forked from OSchip/llvm-project
Stop treating -static as overriding -fPIC: they are distinct.
For some reason, clang had been treating a command like: clang -static -fPIC foo.c as if it should be compiled without the PIC relocation model. This was incorrect: -static should be affecting only the linking model, and -fPIC only the compilation. This new behavior also matches GCC. This is a follow-up from a review comment on r245447. Differential Revision: http://reviews.llvm.org/D12208 llvm-svn: 245667
This commit is contained in:
parent
6995de9f1d
commit
c4015d3291
|
@ -3021,12 +3021,10 @@ ParsePICArgs(const ToolChain &ToolChain, const llvm::Triple &Triple,
|
|||
if (PIC && ToolChain.getTriple().isOSDarwin())
|
||||
IsPICLevelTwo |= ToolChain.isPICDefault();
|
||||
|
||||
// Note that these flags are trump-cards. Regardless of the order w.r.t. the
|
||||
// PIC or PIE options above, if these show up, PIC is disabled.
|
||||
// This kernel flags are a trump-card: they will disable PIC/PIE
|
||||
// generation, independent of the argument order.
|
||||
if (KernelOrKext && (!Triple.isiOS() || Triple.isOSVersionLT(6)))
|
||||
PIC = PIE = false;
|
||||
if (Args.hasArg(options::OPT_static))
|
||||
PIC = PIE = false;
|
||||
|
||||
if (Arg *A = Args.getLastArg(options::OPT_mdynamic_no_pic)) {
|
||||
// This is a very special mode. It trumps the other modes, almost no one
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
// CHECK-PIC2: "-mrelocation-model" "pic"
|
||||
// CHECK-PIC2: "-pic-level" "2"
|
||||
//
|
||||
// CHECK-STATIC: "-static"
|
||||
// CHECK-NO-STATIC-NOT: "-static"
|
||||
//
|
||||
// CHECK-PIE1: "-mrelocation-model" "pic"
|
||||
|
@ -135,8 +136,15 @@
|
|||
// Disregard any of the PIC-specific flags if we have a trump-card flag.
|
||||
// RUN: %clang -c %s -target i386-unknown-unknown -mkernel -fPIC -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
|
||||
|
||||
// The -static argument *doesn't* override PIC: -static only affects
|
||||
// linking, and -fPIC only affects code generation.
|
||||
// RUN: %clang -c %s -target i386-unknown-unknown -static -fPIC -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIC2
|
||||
// RUN: %clang %s -target i386-linux-gnu -static -fPIC -### \
|
||||
// RUN: --gcc-toolchain="" \
|
||||
// RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-STATIC
|
||||
//
|
||||
// On Linux, disregard -pie if we have -shared.
|
||||
// RUN: %clang %s -target i386-unknown-linux -shared -pie -### 2>&1 \
|
||||
|
@ -207,7 +215,7 @@
|
|||
// RUN: %clang -c %s -target armv7-apple-ios -fapple-kext -miphoneos-version-min=5.0.0 -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
|
||||
// RUN: %clang -c %s -target armv7-apple-ios -fapple-kext -miphoneos-version-min=6.0.0 -static -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIC2
|
||||
//
|
||||
// On OpenBSD, PIE is enabled by default, but can be disabled.
|
||||
// RUN: %clang -c %s -target amd64-pc-openbsd -### 2>&1 \
|
||||
|
|
Loading…
Reference in New Issue