diff options
author | Mateusz Mikuła <mati865@gmail.com> | 2022-09-20 10:49:41 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2022-09-20 10:50:31 +0300 |
commit | 4f30c5808a49ba85b052cb65bbe7b34109187bad (patch) | |
tree | 351c0811e9a67bd3cb5f2901d4c66378f8496232 /llvm/lib/Analysis/TargetLibraryInfo.cpp | |
parent | 365d0a5cd867cdf414b70c9f4fd5122146287b01 (diff) | |
download | llvm-4f30c5808a49ba85b052cb65bbe7b34109187bad.zip llvm-4f30c5808a49ba85b052cb65bbe7b34109187bad.tar.gz llvm-4f30c5808a49ba85b052cb65bbe7b34109187bad.tar.bz2 |
[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
Diffstat (limited to 'llvm/lib/Analysis/TargetLibraryInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/TargetLibraryInfo.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 75b57e7..40f0cf3 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -439,6 +439,7 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, TLI.setUnavailable(LibFunc_htons); TLI.setUnavailable(LibFunc_lchown); TLI.setUnavailable(LibFunc_lstat); + TLI.setUnavailable(LibFunc_memrchr); TLI.setUnavailable(LibFunc_ntohl); TLI.setUnavailable(LibFunc_ntohs); TLI.setUnavailable(LibFunc_pread); |