diff --git a/mingw-w64-clang/0019-MinGW-Mark-a-number-of-library-functions-unavailable.patch b/mingw-w64-clang/0019-MinGW-Mark-a-number-of-library-functions-unavailable.patch new file mode 100644 index 0000000000..4b0c738ee3 --- /dev/null +++ b/mingw-w64-clang/0019-MinGW-Mark-a-number-of-library-functions-unavailable.patch @@ -0,0 +1,124 @@ +From c5638a71d805330294e9b6e2c670e1ed7420b63a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Martin=20Storsj=C3=B6?= +Date: Fri, 21 May 2021 00:47:39 +0300 +Subject: [PATCH] [MinGW] Mark a number of library functions unavailable for + mingw targets + +These functions were marked unavailable for MSVC targets before, +within an "T.isOSWindows() && !T.isOSCygMing()" block, but these ones +are unavailable on MinGW targets too. + +This avoids generating calls to stpcpy for MinGW targets, which has +been happening since 6dbf0cfcf789365493f70ae69df8a7a59be41c75 (in +some cases). + +This fixes https://github.com/mstorsjo/llvm-mingw/issues/201. + +Differential Revision: https://reviews.llvm.org/D102946 +--- + lib/Analysis/TargetLibraryInfo.cpp | 48 ++++++++++--------- + test/Transforms/InstCombine/sprintf-1.ll | 1 + + 2 files changed, 27 insertions(+), 22 deletions(-) + +diff --git a/lib/Analysis/TargetLibraryInfo.cpp b/lib/Analysis/TargetLibraryInfo.cpp +index 153ba073cc10b..05088c189ca22 100644 +--- a/lib/Analysis/TargetLibraryInfo.cpp ++++ b/lib/Analysis/TargetLibraryInfo.cpp +@@ -352,59 +352,63 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, + // Win32 does not support these functions, but + // they are generally available on POSIX-compliant systems. + TLI.setUnavailable(LibFunc_access); ++ TLI.setUnavailable(LibFunc_chmod); ++ TLI.setUnavailable(LibFunc_closedir); ++ TLI.setUnavailable(LibFunc_fdopen); ++ TLI.setUnavailable(LibFunc_fileno); ++ TLI.setUnavailable(LibFunc_fseeko); ++ TLI.setUnavailable(LibFunc_fstat); ++ TLI.setUnavailable(LibFunc_ftello); ++ TLI.setUnavailable(LibFunc_gettimeofday); ++ TLI.setUnavailable(LibFunc_memccpy); ++ TLI.setUnavailable(LibFunc_mkdir); ++ TLI.setUnavailable(LibFunc_open); ++ TLI.setUnavailable(LibFunc_opendir); ++ TLI.setUnavailable(LibFunc_pclose); ++ TLI.setUnavailable(LibFunc_popen); ++ TLI.setUnavailable(LibFunc_read); ++ TLI.setUnavailable(LibFunc_rmdir); ++ TLI.setUnavailable(LibFunc_stat); ++ TLI.setUnavailable(LibFunc_strcasecmp); ++ TLI.setUnavailable(LibFunc_strncasecmp); ++ TLI.setUnavailable(LibFunc_unlink); ++ TLI.setUnavailable(LibFunc_utime); ++ TLI.setUnavailable(LibFunc_write); ++ } ++ ++ if (T.isOSWindows() && !T.isWindowsCygwinEnvironment()) { ++ // These functions aren't available in either MSVC or MinGW environments. + TLI.setUnavailable(LibFunc_bcmp); + TLI.setUnavailable(LibFunc_bcopy); + TLI.setUnavailable(LibFunc_bzero); +- TLI.setUnavailable(LibFunc_chmod); + TLI.setUnavailable(LibFunc_chown); +- TLI.setUnavailable(LibFunc_closedir); + TLI.setUnavailable(LibFunc_ctermid); +- TLI.setUnavailable(LibFunc_fdopen); + TLI.setUnavailable(LibFunc_ffs); +- TLI.setUnavailable(LibFunc_fileno); + TLI.setUnavailable(LibFunc_flockfile); +- TLI.setUnavailable(LibFunc_fseeko); +- TLI.setUnavailable(LibFunc_fstat); + TLI.setUnavailable(LibFunc_fstatvfs); +- TLI.setUnavailable(LibFunc_ftello); + TLI.setUnavailable(LibFunc_ftrylockfile); + TLI.setUnavailable(LibFunc_funlockfile); + TLI.setUnavailable(LibFunc_getitimer); + TLI.setUnavailable(LibFunc_getlogin_r); + TLI.setUnavailable(LibFunc_getpwnam); +- TLI.setUnavailable(LibFunc_gettimeofday); + TLI.setUnavailable(LibFunc_htonl); + TLI.setUnavailable(LibFunc_htons); + TLI.setUnavailable(LibFunc_lchown); + TLI.setUnavailable(LibFunc_lstat); +- TLI.setUnavailable(LibFunc_memccpy); +- TLI.setUnavailable(LibFunc_mkdir); + TLI.setUnavailable(LibFunc_ntohl); + TLI.setUnavailable(LibFunc_ntohs); +- TLI.setUnavailable(LibFunc_open); +- TLI.setUnavailable(LibFunc_opendir); +- TLI.setUnavailable(LibFunc_pclose); +- TLI.setUnavailable(LibFunc_popen); + TLI.setUnavailable(LibFunc_pread); + TLI.setUnavailable(LibFunc_pwrite); +- TLI.setUnavailable(LibFunc_read); + TLI.setUnavailable(LibFunc_readlink); + TLI.setUnavailable(LibFunc_realpath); +- TLI.setUnavailable(LibFunc_rmdir); + TLI.setUnavailable(LibFunc_setitimer); +- TLI.setUnavailable(LibFunc_stat); + TLI.setUnavailable(LibFunc_statvfs); + TLI.setUnavailable(LibFunc_stpcpy); + TLI.setUnavailable(LibFunc_stpncpy); +- TLI.setUnavailable(LibFunc_strcasecmp); +- TLI.setUnavailable(LibFunc_strncasecmp); + TLI.setUnavailable(LibFunc_times); + TLI.setUnavailable(LibFunc_uname); +- TLI.setUnavailable(LibFunc_unlink); + TLI.setUnavailable(LibFunc_unsetenv); +- TLI.setUnavailable(LibFunc_utime); + TLI.setUnavailable(LibFunc_utimes); +- TLI.setUnavailable(LibFunc_write); + } + + switch (T.getOS()) { +diff --git a/test/Transforms/InstCombine/sprintf-1.ll b/test/Transforms/InstCombine/sprintf-1.ll +index 187488d9ce78e..704d51724e06b 100644 +--- a/test/Transforms/InstCombine/sprintf-1.ll ++++ b/test/Transforms/InstCombine/sprintf-1.ll +@@ -4,6 +4,7 @@ + ; RUN: opt < %s -instcombine -S | FileCheck %s + ; RUN: opt < %s -mtriple xcore-xmos-elf -instcombine -S | FileCheck %s -check-prefixes=CHECK,CHECK-IPRINTF + ; RUN: opt < %s -mtriple=i386-pc-windows-msvc -instcombine -S | FileCheck %s --check-prefixes=CHECK,WIN ++; RUN: opt < %s -mtriple=i386-mingw32 -instcombine -S | FileCheck %s --check-prefixes=CHECK,WIN + + target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" + diff --git a/mingw-w64-clang/PKGBUILD b/mingw-w64-clang/PKGBUILD index e7655be3ca..72628f22e8 100644 --- a/mingw-w64-clang/PKGBUILD +++ b/mingw-w64-clang/PKGBUILD @@ -76,6 +76,7 @@ source=("https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver "0016-llvm-rc-Make-commas-in-user-data-structs-optional.patch" "0017-X86-Teach-X86FloatingPoint-s-handleCall-to-only-eras.patch" "0018-llvm-rc-Allow-dashes-as-part-of-resource-name-strings.patch" + "0019-MinGW-Mark-a-number-of-library-functions-unavailable.patch" "0101-Disable-fPIC-errors.patch" "0103-Use-posix-style-path-separators-with-MinGW.patch" "0104-link-pthread-with-mingw.patch" @@ -129,6 +130,7 @@ sha256sums=('129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e' 'f1fa4f06d55afeb2d7f010745d2871d8a6a43140b2abaae173e142e3595aa8ef' '8f98770616e9c0457b8e7dd39c01550e300237d3973da96b827f4b4a9eca07f8' 'e7eb5fdaa0c12122be7f801adf9cf748de806843c6c4e65bb28d042e94e78d88' + '8a5a038cdbfdcf56a021cb53bbb6b00328c792d632a12dad99d9df0f33a91461' '63b2bda6a487ec69e257c3b7a14d71f6bec649fca058a5a54804f213d45c7c70' '2d1dc7f7cd6bd61f275cd0be6650f3086aee622074ac786ff5a921bf8ecaada2' '715cb8862753854b2d9256e0b70003e2d1f57083d83eaeaf5a095fc72b8a4e26' @@ -186,7 +188,8 @@ prepare() { "0015-Use-TerminateProcess-to-exit-without-running-destruc.patch" \ "0016-llvm-rc-Make-commas-in-user-data-structs-optional.patch" \ "0017-X86-Teach-X86FloatingPoint-s-handleCall-to-only-eras.patch" \ - "0018-llvm-rc-Allow-dashes-as-part-of-resource-name-strings.patch" + "0018-llvm-rc-Allow-dashes-as-part-of-resource-name-strings.patch" \ + "0019-MinGW-Mark-a-number-of-library-functions-unavailable.patch" if (( ! _clangprefix )); then apply_patch_with_msg \ diff --git a/mingw-w64-clang/README-patches.md b/mingw-w64-clang/README-patches.md index 94ed1f97dd..1842fe58e0 100644 --- a/mingw-w64-clang/README-patches.md +++ b/mingw-w64-clang/README-patches.md @@ -22,6 +22,7 @@ Legend: - `"0016-llvm-rc-Make-commas-in-user-data-structs-optional.patch"` :arrow_down_small: - `"0017-X86-Teach-X86FloatingPoint-s-handleCall-to-only-eras.patch"` :arrow_down_small: - `"0018-llvm-rc-Allow-dashes-as-part-of-resource-name-strings.patch"` :arrow_down_small: +- `"0019-MinGW-Mark-a-number-of-library-functions-unavailable.patch"` :arrow_down_small: - `"0101-Disable-fPIC-errors.patch"` :x: - `"0103-Use-posix-style-path-separators-with-MinGW.patch"` :x::x::x: - this one is really imporant - `"0104-link-pthread-with-mingw.patch"` :grey_exclamation: