[TargetLibraryInfo] Mark memrchr as unavailable on Windows
authorMateusz Mikuła <mati865@gmail.com>
Tue, 20 Sep 2022 07:49:41 +0000 (10:49 +0300)
committerMartin Storsjö <martin@martin.st>
Tue, 20 Sep 2022 07:50:31 +0000 (10:50 +0300)
commit4f30c5808a49ba85b052cb65bbe7b34109187bad
tree351c0811e9a67bd3cb5f2901d4c66378f8496232
parent365d0a5cd867cdf414b70c9f4fd5122146287b01
[TargetLibraryInfo] Mark memrchr as unavailable on Windows

Otherwise LLVM will optimise strrchr into memrchr on Windows resulting in linker error:
```
$ cat memrchr_test.c
int main(int argc, char **argv) {
    return (long)strrchr("KkMm", argv[argc-1][0]);
}

$ clang memrchr_test.c -O
memrchr_test.c:3:12: warning: cast to smaller integer type 'long' from 'char *' [-Wpointer-to-int-cast]
    return (long)strrchr("KkMm", argv[argc-1][0]);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
ld.lld: error: undefined symbol: memrchr
>>> referenced by D:/msys64/tmp/memrchr_test-e7aabd.o:(main)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

Example taken from MSYS2 Discord and tested with windows-gnu target.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D134134
llvm/lib/Analysis/TargetLibraryInfo.cpp