xref: /aosp_15_r20/external/clang/test/Driver/pic.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // Test the driver's control over the PIC behavior. These consist of tests of
2*67e74705SXin Li // the relocation model flags and the pic level flags passed to CC1.
3*67e74705SXin Li //
4*67e74705SXin Li // CHECK-NO-PIC: "-mrelocation-model" "static"
5*67e74705SXin Li // CHECK-NO-PIC-NOT: "-pic-level"
6*67e74705SXin Li // CHECK-NO-PIC-NOT: "-pic-is-pie"
7*67e74705SXin Li //
8*67e74705SXin Li // CHECK-PIC1: "-mrelocation-model" "pic"
9*67e74705SXin Li // CHECK-PIC1: "-pic-level" "1"
10*67e74705SXin Li // CHECK-PIC1-NOT: "-pic-is-pie"
11*67e74705SXin Li //
12*67e74705SXin Li // CHECK-PIC2: "-mrelocation-model" "pic"
13*67e74705SXin Li // CHECK-PIC2: "-pic-level" "2"
14*67e74705SXin Li // CHECK-PIC2-NOT: "-pic-is-pie"
15*67e74705SXin Li //
16*67e74705SXin Li // CHECK-STATIC: "-static"
17*67e74705SXin Li // CHECK-NO-STATIC-NOT: "-static"
18*67e74705SXin Li //
19*67e74705SXin Li // CHECK-PIE1: "-mrelocation-model" "pic"
20*67e74705SXin Li // CHECK-PIE1: "-pic-level" "1"
21*67e74705SXin Li // CHECK-PIE1: "-pic-is-pie"
22*67e74705SXin Li //
23*67e74705SXin Li // CHECK-PIE2: "-mrelocation-model" "pic"
24*67e74705SXin Li // CHECK-PIE2: "-pic-level" "2"
25*67e74705SXin Li // CHECK-PIE2: "-pic-is-pie"
26*67e74705SXin Li //
27*67e74705SXin Li // CHECK-PIE-LD: "{{.*}}ld{{(.exe)?}}"
28*67e74705SXin Li // CHECK-PIE-LD: "-pie"
29*67e74705SXin Li // CHECK-PIE-LD: "Scrt1.o" "crti.o" "crtbeginS.o"
30*67e74705SXin Li // CHECK-PIE-LD: "crtendS.o" "crtn.o"
31*67e74705SXin Li //
32*67e74705SXin Li // CHECK-NOPIE-LD: "-nopie"
33*67e74705SXin Li //
34*67e74705SXin Li // CHECK-DYNAMIC-NO-PIC-32: "-mrelocation-model" "dynamic-no-pic"
35*67e74705SXin Li // CHECK-DYNAMIC-NO-PIC-32-NOT: "-pic-level"
36*67e74705SXin Li // CHECK-DYNAMIC-NO-PIC-32-NOT: "-pic-is-pie"
37*67e74705SXin Li //
38*67e74705SXin Li // CHECK-DYNAMIC-NO-PIC-64: "-mrelocation-model" "dynamic-no-pic"
39*67e74705SXin Li // CHECK-DYNAMIC-NO-PIC-64: "-pic-level" "2"
40*67e74705SXin Li // CHECK-DYNAMIC-NO-PIC-64-NOT: "-pic-is-pie"
41*67e74705SXin Li //
42*67e74705SXin Li // CHECK-NON-DARWIN-DYNAMIC-NO-PIC: error: unsupported option '-mdynamic-no-pic' for target 'i386-unknown-unknown'
43*67e74705SXin Li //
44*67e74705SXin Li // CHECK-NO-PIE-NOT: "-pie"
45*67e74705SXin Li //
46*67e74705SXin Li // CHECK-NO-UNUSED-ARG-NOT: argument unused during compilation
47*67e74705SXin Li //
48*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -### 2>&1 \
49*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
50*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -### 2>&1 \
51*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
52*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -### 2>&1 \
53*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
54*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -### 2>&1 \
55*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
56*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -### 2>&1 \
57*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
58*67e74705SXin Li //
59*67e74705SXin Li // Check that PIC and PIE flags obey last-match-wins. If the last flag is
60*67e74705SXin Li // a no-* variant, regardless of which variant or which flags precede it, we
61*67e74705SXin Li // get no PIC.
62*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-pic -### 2>&1 \
63*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
64*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-pic -### 2>&1 \
65*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
66*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-pic -### 2>&1 \
67*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
68*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-pic -### 2>&1 \
69*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
70*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-PIC -### 2>&1 \
71*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
72*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-PIC -### 2>&1 \
73*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
74*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-PIC -### 2>&1 \
75*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
76*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-PIC -### 2>&1 \
77*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
78*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-pie -### 2>&1 \
79*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
80*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-pie -### 2>&1 \
81*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
82*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-pie -### 2>&1 \
83*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
84*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-pie -### 2>&1 \
85*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
86*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-PIE -### 2>&1 \
87*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
88*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-PIE -### 2>&1 \
89*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
90*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-PIE -### 2>&1 \
91*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
92*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-PIE -### 2>&1 \
93*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
94*67e74705SXin Li //
95*67e74705SXin Li // Last-match-wins where both pic and pie are specified.
96*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fpic -### 2>&1 \
97*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
98*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fpic -### 2>&1 \
99*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
100*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIC -### 2>&1 \
101*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
102*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fPIC -### 2>&1 \
103*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
104*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fpie -### 2>&1 \
105*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
106*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fpie -### 2>&1 \
107*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
108*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIE -### 2>&1 \
109*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
110*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fPIE -### 2>&1 \
111*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
112*67e74705SXin Li //
113*67e74705SXin Li // Last-match-wins when selecting level 1 vs. level 2.
114*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIC -### 2>&1 \
115*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
116*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fpic -### 2>&1 \
117*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
118*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIE -fpie -### 2>&1 \
119*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
120*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIC -fPIE -### 2>&1 \
121*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
122*67e74705SXin Li //
123*67e74705SXin Li // Make sure -pie is passed to along to ld and that the right *crt* files
124*67e74705SXin Li // are linked in.
125*67e74705SXin Li // RUN: %clang %s -target i386-unknown-freebsd -fPIE -pie -### \
126*67e74705SXin Li // RUN: --gcc-toolchain="" \
127*67e74705SXin Li // RUN: --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 \
128*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE-LD
129*67e74705SXin Li // RUN: %clang %s -target i386-linux-gnu -fPIE -pie -### \
130*67e74705SXin Li // RUN: --gcc-toolchain="" \
131*67e74705SXin Li // RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \
132*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE-LD
133*67e74705SXin Li // RUN: %clang %s -target i386-linux-gnu -fPIC -pie -### \
134*67e74705SXin Li // RUN: --gcc-toolchain="" \
135*67e74705SXin Li // RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \
136*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE-LD
137*67e74705SXin Li //
138*67e74705SXin Li // Disregard any of the PIC-specific flags if we have a trump-card flag.
139*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -mkernel -fPIC -### 2>&1 \
140*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
141*67e74705SXin Li 
142*67e74705SXin Li // The -static argument *doesn't* override PIC: -static only affects
143*67e74705SXin Li // linking, and -fPIC only affects code generation.
144*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -static -fPIC -### 2>&1 \
145*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
146*67e74705SXin Li // RUN: %clang %s -target i386-linux-gnu -static -fPIC -### \
147*67e74705SXin Li // RUN: --gcc-toolchain="" \
148*67e74705SXin Li // RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \
149*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-STATIC
150*67e74705SXin Li //
151*67e74705SXin Li // On Linux, disregard -pie if we have -shared.
152*67e74705SXin Li // RUN: %clang %s -target i386-unknown-linux -shared -pie -### 2>&1 \
153*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIE
154*67e74705SXin Li //
155*67e74705SXin Li // Darwin is a beautiful and unique snowflake when it comes to these flags.
156*67e74705SXin Li // When targeting a 32-bit darwin system, only level 2 is supported. On 64-bit
157*67e74705SXin Li // targets, there is simply nothing you can do, there is no PIE, there is only
158*67e74705SXin Li // PIC when it comes to compilation.
159*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -### 2>&1 \
160*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
161*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fpic -### 2>&1 \
162*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
163*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fPIC -### 2>&1 \
164*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
165*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fpie -### 2>&1 \
166*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
167*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fPIE -### 2>&1 \
168*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
169*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -### 2>&1 \
170*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
171*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fno-PIE -### 2>&1 \
172*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
173*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -fpic -### 2>&1 \
174*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
175*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -fPIE -### 2>&1 \
176*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
177*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -fno-PIC -### 2>&1 \
178*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
179*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -fno-PIE -### 2>&1 \
180*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
181*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -fpic -### 2>&1 \
182*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
183*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -fPIE -### 2>&1 \
184*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
185*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -fPIC -### 2>&1 \
186*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-UNUSED-ARG
187*67e74705SXin Li //
188*67e74705SXin Li // Darwin gets even more special with '-mdynamic-no-pic'. This flag is only
189*67e74705SXin Li // valid on Darwin, and it's behavior is very strange but needs to remain
190*67e74705SXin Li // consistent for compatibility.
191*67e74705SXin Li // RUN: %clang -c %s -target i386-unknown-unknown -mdynamic-no-pic -### 2>&1 \
192*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NON-DARWIN-DYNAMIC-NO-PIC
193*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic -### 2>&1 \
194*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-32
195*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic -fno-pic -### 2>&1 \
196*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-32
197*67e74705SXin Li // RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic -fpie -### 2>&1 \
198*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-32
199*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -mdynamic-no-pic -### 2>&1 \
200*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-64
201*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -mdynamic-no-pic -fno-pic -### 2>&1 \
202*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-64
203*67e74705SXin Li // RUN: %clang -c %s -target x86_64-apple-darwin -mdynamic-no-pic -fpie -### 2>&1 \
204*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-64
205*67e74705SXin Li //
206*67e74705SXin Li // Checks for ARM+Apple+IOS including -fapple-kext, -mkernel, and iphoneos
207*67e74705SXin Li // version boundaries.
208*67e74705SXin Li // RUN: %clang -c %s -target armv7-apple-ios -fapple-kext -miphoneos-version-min=6.0.0 -### 2>&1 \
209*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
210*67e74705SXin Li // RUN: %clang -c %s -target armv7-apple-ios -mkernel -miphoneos-version-min=6.0.0 -### 2>&1 \
211*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
212*67e74705SXin Li // RUN: %clang -c %s -target arm64-apple-ios -mkernel -miphoneos-version-min=7.0.0 -### 2>&1 \
213*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
214*67e74705SXin Li // RUN: %clang -x assembler -c %s -target arm64-apple-ios -mkernel -miphoneos-version-min=7.0.0 -no-integrated-as -### 2>&1 \
215*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-STATIC
216*67e74705SXin Li // RUN: %clang -c %s -target armv7k-apple-watchos -fapple-kext -mwatchos-version-min=1.0.0 -### 2>&1 \
217*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
218*67e74705SXin Li // RUN: %clang -c %s -target armv7-apple-ios -fapple-kext -miphoneos-version-min=5.0.0 -### 2>&1 \
219*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
220*67e74705SXin Li // RUN: %clang -c %s -target armv7-apple-ios -fapple-kext -miphoneos-version-min=6.0.0 -static -### 2>&1 \
221*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
222*67e74705SXin Li // RUN: %clang -c %s -target armv7-apple-unknown-macho -static -### 2>&1 \
223*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
224*67e74705SXin Li //
225*67e74705SXin Li // On OpenBSD, PIE is enabled by default, but can be disabled.
226*67e74705SXin Li // RUN: %clang -c %s -target amd64-pc-openbsd -### 2>&1 \
227*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
228*67e74705SXin Li // RUN: %clang -c %s -target i386-pc-openbsd -### 2>&1 \
229*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
230*67e74705SXin Li // RUN: %clang -c %s -target mips64-unknown-openbsd -### 2>&1 \
231*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
232*67e74705SXin Li // RUN: %clang -c %s -target mips64el-unknown-openbsd -### 2>&1 \
233*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE1
234*67e74705SXin Li // RUN: %clang -c %s -target powerpc-unknown-openbsd -### 2>&1 \
235*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
236*67e74705SXin Li // RUN: %clang -c %s -target sparc-unknown-openbsd -### 2>&1 \
237*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
238*67e74705SXin Li // RUN: %clang -c %s -target sparc64-unknown-openbsd -### 2>&1 \
239*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIE2
240*67e74705SXin Li // RUN: %clang -c %s -target i386-pc-openbsd -fno-pie -### 2>&1 \
241*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC
242*67e74705SXin Li //
243*67e74705SXin Li // On OpenBSD, -nopie needs to be passed through to the linker.
244*67e74705SXin Li // RUN: %clang %s -target i386-pc-openbsd -nopie -### 2>&1 \
245*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-NOPIE-LD
246*67e74705SXin Li //
247*67e74705SXin Li // On Android PIC is enabled by default
248*67e74705SXin Li // RUN: %clang -c %s -target i686-linux-android -### 2>&1 \
249*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
250*67e74705SXin Li // RUN: %clang -c %s -target arm-linux-androideabi -### 2>&1 \
251*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
252*67e74705SXin Li // RUN: %clang -c %s -target mipsel-linux-android -### 2>&1 \
253*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
254*67e74705SXin Li // RUN: %clang -c %s -target aarch64-linux-android -### 2>&1 \
255*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
256*67e74705SXin Li // RUN: %clang -c %s -target arm64-linux-android -### 2>&1 \
257*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC1
258*67e74705SXin Li //
259*67e74705SXin Li // On Windows-X64 PIC is enabled by default
260*67e74705SXin Li // RUN: %clang -c %s -target x86_64-pc-windows-msvc18.0.0 -### 2>&1 \
261*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
262*67e74705SXin Li // RUN: %clang -c %s -target x86_64-pc-windows-gnu -### 2>&1 \
263*67e74705SXin Li // RUN:   | FileCheck %s --check-prefix=CHECK-PIC2
264