backport marking library functions unavailable on mingw

This commit is contained in:
Jeremy Drake
2021-07-29 16:50:58 -07:00
parent 8ac2a39035
commit 743145611b
3 changed files with 129 additions and 1 deletions

View File

@@ -0,0 +1,124 @@
From c5638a71d805330294e9b6e2c670e1ed7420b63a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
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"

View File

@@ -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 \

View File

@@ -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: