forked from OSchip/llvm-project
[clang][MinGW] Explicitly ignore `-fPIC` & friends
GCC on Windows ignores this flag completely [0] which some build systems sadly rely on when compiling for Windows using MinGW. The current behaviour of clang however is to error out as -fPIC & friends has no effect on Windows. This patch instead changes the behaviour for MinGW to ignore the option for the sake of compatibility Fixes https://github.com/llvm/llvm-project/issues/52947 [0] https://gcc.gnu.org/legacy-ml/gcc-patches/2015-08/msg00836.html Differential Revision: https://reviews.llvm.org/D116485
This commit is contained in:
parent
1b708b67f6
commit
dbeeb136ab
|
@ -1186,10 +1186,9 @@ tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {
|
|||
options::OPT_fpic, options::OPT_fno_pic,
|
||||
options::OPT_fPIE, options::OPT_fno_PIE,
|
||||
options::OPT_fpie, options::OPT_fno_pie);
|
||||
if (Triple.isOSWindows() && LastPICArg &&
|
||||
LastPICArg ==
|
||||
Args.getLastArg(options::OPT_fPIC, options::OPT_fpic,
|
||||
options::OPT_fPIE, options::OPT_fpie)) {
|
||||
if (Triple.isOSWindows() && !Triple.isOSCygMing() && LastPICArg &&
|
||||
LastPICArg == Args.getLastArg(options::OPT_fPIC, options::OPT_fpic,
|
||||
options::OPT_fPIE, options::OPT_fpie)) {
|
||||
ToolChain.getDriver().Diag(diag::err_drv_unsupported_opt_for_target)
|
||||
<< LastPICArg->getSpelling() << Triple.str();
|
||||
if (Triple.getArch() == llvm::Triple::x86_64)
|
||||
|
|
|
@ -486,10 +486,7 @@ bool toolchains::MinGW::isPIEDefault(const llvm::opt::ArgList &Args) const {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool toolchains::MinGW::isPICDefaultForced() const {
|
||||
return getArch() == llvm::Triple::x86_64 ||
|
||||
getArch() == llvm::Triple::aarch64;
|
||||
}
|
||||
bool toolchains::MinGW::isPICDefaultForced() const { return true; }
|
||||
|
||||
llvm::ExceptionHandling
|
||||
toolchains::MinGW::GetExceptionModel(const ArgList &Args) const {
|
||||
|
|
|
@ -301,3 +301,13 @@
|
|||
// RUN: | FileCheck %s --check-prefix=CHECK-PIC2
|
||||
// RUN: %clang -c %s -target aarch64-windows-gnu -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIC2
|
||||
//
|
||||
// On MinGW, allow specifying -fPIC & friends but ignore them
|
||||
// RUN: %clang -fno-PIC -c %s -target x86_64-pc-windows-gnu -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIC2
|
||||
// RUN: %clang -fPIC -c %s -target i686-pc-windows-gnu -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
|
||||
// RUN: %clang -fno-PIC -c %s -target aarch64-pc-windows-gnu -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIC2
|
||||
// RUN: %clang -fPIC -c %s -target armv7-pc-windows-gnu -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
|
||||
|
|
|
@ -16,15 +16,6 @@
|
|||
// RUN: %clang -### -target i686-windows-itanium -fPIE -fno-pie %s
|
||||
// RUN: %clang -### -target i686-windows-itanium -fpie -fno-pie %s
|
||||
|
||||
// RUN: %clang -### -target i686-windows-gnu -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s
|
||||
// RUN: %clang -### -target i686-windows-gnu -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s
|
||||
// RUN: %clang -### -target i686-windows-gnu -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s
|
||||
// RUN: %clang -### -target i686-windows-gnu -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s
|
||||
// RUN: %clang -### -target i686-windows-gnu -fPIC -fno-pic %s
|
||||
// RUN: %clang -### -target i686-windows-gnu -Fpic -fno-pic %s
|
||||
// RUN: %clang -### -target i686-windows-gnu -fPIE -fno-pie %s
|
||||
// RUN: %clang -### -target i686-windows-gnu -fpie -fno-pie %s
|
||||
|
||||
// RUN: %clang -### -target x86_64-windows -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s
|
||||
// RUN: %clang -### -target x86_64-windows -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s
|
||||
// RUN: %clang -### -target x86_64-windows -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s
|
||||
|
@ -43,15 +34,6 @@
|
|||
// RUN: %clang -### -target x86_64-windows-itanium -fPIE -fno-pie %s
|
||||
// RUN: %clang -### -target x86_64-windows-itanium -fpie -fno-pie %s
|
||||
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -fPIC %s 2>&1 | FileCheck -check-prefix CHECK-PIC-ERROR %s
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -fpic %s 2>&1 | FileCheck -check-prefix CHECK-pic-ERROR %s
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -fPIE %s 2>&1 | FileCheck -check-prefix CHECK-PIE-ERROR %s
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -fpie %s 2>&1 | FileCheck -check-prefix CHECK-pie-ERROR %s
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -fPIC -fno-pic %s
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -Fpic -fno-pic %s
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -fPIE -fno-pie %s
|
||||
// RUN: %clang -### -target x86_64-windows-gnu -fpie -fno-pie %s
|
||||
|
||||
// CHECK-PIC-ERROR: unsupported option '-fPIC' for target '{{.*}}
|
||||
// CHECK-pic-ERROR: unsupported option '-fpic' for target '{{.*}}
|
||||
// CHECK-PIE-ERROR: unsupported option '-fPIE' for target '{{.*}}
|
||||
|
|
Loading…
Reference in New Issue