Clang Project

clang_source_code/test/Driver/sanitizer-ld.c
1// Test sanitizers ld flags.
2
3// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
4// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address \
5// RUN:     -resource-dir=%S/Inputs/resource_dir \
6// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
7// RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX %s
8//
9// CHECK-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
10// CHECK-ASAN-LINUX-NOT: "-lc"
11// CHECK-ASAN-LINUX: libclang_rt.asan-i386.a"
12// CHECK-ASAN-LINUX-NOT: "--export-dynamic"
13// CHECK-ASAN-LINUX: "--dynamic-list={{.*}}libclang_rt.asan-i386.a.syms"
14// CHECK-ASAN-LINUX-NOT: "--export-dynamic"
15// CHECK-ASAN-LINUX: "-lpthread"
16// CHECK-ASAN-LINUX: "-lrt"
17// CHECK-ASAN-LINUX: "-ldl"
18
19// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
20// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
21// RUN:     -resource-dir=%S/Inputs/resource_dir \
22// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
23// RUN:   | FileCheck --check-prefix=CHECK-SHARED-ASAN-LINUX %s
24
25// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
26// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libasan \
27// RUN:     -resource-dir=%S/Inputs/resource_dir \
28// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
29// RUN:   | FileCheck --check-prefix=CHECK-SHARED-ASAN-LINUX %s
30
31// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
32// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address \
33// RUN:     -shared-libsan -static-libsan -shared-libasan             \
34// RUN:     -resource-dir=%S/Inputs/resource_dir \
35// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
36// RUN:   | FileCheck --check-prefix=CHECK-SHARED-ASAN-LINUX %s
37//
38// CHECK-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
39// CHECK-SHARED-ASAN-LINUX-NOT: "-lc"
40// CHECK-SHARED-ASAN-LINUX-NOT: libclang_rt.asan-i386.a"
41// CHECK-SHARED-ASAN-LINUX: libclang_rt.asan-i386.so"
42// CHECK-SHARED-ASAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan-preinit-i386.a" "--no-whole-archive"
43// CHECK-SHARED-ASAN-LINUX-NOT: "-lpthread"
44// CHECK-SHARED-ASAN-LINUX-NOT: "-lrt"
45// CHECK-SHARED-ASAN-LINUX-NOT: "-ldl"
46// CHECK-SHARED-ASAN-LINUX-NOT: "--export-dynamic"
47// CHECK-SHARED-ASAN-LINUX-NOT: "--dynamic-list"
48
49// RUN: %clang -no-canonical-prefixes %s -### -o %t.so -shared 2>&1 \
50// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
51// RUN:     -resource-dir=%S/Inputs/resource_dir \
52// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
53// RUN:   | FileCheck --check-prefix=CHECK-DSO-SHARED-ASAN-LINUX %s
54//
55// CHECK-DSO-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
56// CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lc"
57// CHECK-DSO-SHARED-ASAN-LINUX-NOT: libclang_rt.asan-i386.a"
58// CHECK-DSO-SHARED-ASAN-LINUX-NOT: "libclang_rt.asan-preinit-i386.a"
59// CHECK-DSO-SHARED-ASAN-LINUX: libclang_rt.asan-i386.so"
60// CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lpthread"
61// CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lrt"
62// CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-ldl"
63// CHECK-DSO-SHARED-ASAN-LINUX-NOT: "--export-dynamic"
64// CHECK-DSO-SHARED-ASAN-LINUX-NOT: "--dynamic-list"
65
66// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
67// RUN:     -target i386-unknown-freebsd -fuse-ld=ld -fsanitize=address \
68// RUN:     -resource-dir=%S/Inputs/resource_dir \
69// RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
70// RUN:   | FileCheck --check-prefix=CHECK-ASAN-FREEBSD %s
71//
72// CHECK-ASAN-FREEBSD: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
73// CHECK-ASAN-FREEBSD-NOT: "-lc"
74// CHECK-ASAN-FREEBSD-NOT: libclang_rt.asan_cxx
75// CHECK-ASAN-FREEBSD: freebsd{{/|\\+}}libclang_rt.asan-i386.a"
76// CHECK-ASAN-FREEBSD-NOT: libclang_rt.asan_cxx
77// CHECK-ASAN-FREEBSD-NOT: "--dynamic-list"
78// CHECK-ASAN-FREEBSD: "--export-dynamic"
79// CHECK-ASAN-FREEBSD: "-lpthread"
80// CHECK-ASAN-FREEBSD: "-lrt"
81
82// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
83// RUN:     -target i386-unknown-freebsd -fuse-ld=ld -fsanitize=address \
84// RUN:     -resource-dir=%S/Inputs/resource_dir \
85// RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
86// RUN:   | FileCheck --check-prefix=CHECK-ASAN-FREEBSD-LDL %s
87//
88// CHECK-ASAN-FREEBSD-LDL: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
89// CHECK-ASAN-FREEBSD-LDL-NOT: "-ldl"
90
91// RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
92// RUN:     -target i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
93// RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
94// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
95// RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s
96//
97// CHECK-ASAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
98// CHECK-ASAN-LINUX-CXX-NOT: "-lc"
99// CHECK-ASAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan-i386.a" "--no-whole-archive"
100// CHECK-ASAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan_cxx-i386.a" "--no-whole-archive"
101// CHECK-ASAN-LINUX-CXX-NOT: "--dynamic-list"
102// CHECK-ASAN-LINUX-CXX: "--export-dynamic"
103// CHECK-ASAN-LINUX-CXX: stdc++
104// CHECK-ASAN-LINUX-CXX: "-lpthread"
105// CHECK-ASAN-LINUX-CXX: "-lrt"
106// CHECK-ASAN-LINUX-CXX: "-ldl"
107
108// RUN: %clang -no-canonical-prefixes %s -### -o /dev/null -fsanitize=address \
109// RUN:     -target i386-unknown-linux -fuse-ld=ld -stdlib=platform \
110// RUN:     --sysroot=%S/Inputs/basic_linux_tree -lstdc++ -static 2>&1 \
111// RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX-STATIC %s
112//
113// CHECK-ASAN-LINUX-CXX-STATIC: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
114// CHECK-ASAN-LINUX-CXX-STATIC-NOT: stdc++
115// CHECK-ASAN-LINUX-CXX-STATIC: "--whole-archive" "{{.*}}libclang_rt.asan-i386.a" "--no-whole-archive"
116// CHECK-ASAN-LINUX-CXX-STATIC: stdc++
117
118// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
119// RUN:     -target arm-linux-gnueabi -fuse-ld=ld -fsanitize=address \
120// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
121// RUN:   | FileCheck --check-prefix=CHECK-ASAN-ARM %s
122//
123// CHECK-ASAN-ARM: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
124// CHECK-ASAN-ARM-NOT: "-lc"
125// CHECK-ASAN-ARM: libclang_rt.asan-arm.a"
126//
127// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
128// RUN:     -target armv7l-linux-gnueabi -fuse-ld=ld -fsanitize=address \
129// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
130// RUN:   | FileCheck --check-prefix=CHECK-ASAN-ARMv7 %s
131//
132// CHECK-ASAN-ARMv7: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
133// CHECK-ASAN-ARMv7-NOT: "-lc"
134// CHECK-ASAN-ARMv7: libclang_rt.asan-arm.a"
135
136// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
137// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=address \
138// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
139// RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID %s
140//
141// CHECK-ASAN-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
142// CHECK-ASAN-ANDROID-NOT: "-lc"
143// CHECK-ASAN-ANDROID-NOT: "-pie"
144// CHECK-ASAN-ANDROID-NOT: "-lpthread"
145// CHECK-ASAN-ANDROID: libclang_rt.asan-arm-android.so"
146// CHECK-ASAN-ANDROID-NOT: "-lpthread"
147
148// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
149// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=address \
150// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
151// RUN:     -static-libsan \
152// RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID-STATICLIBASAN %s
153//
154// CHECK-ASAN-ANDROID-STATICLIBASAN: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
155// CHECK-ASAN-ANDROID-STATICLIBASAN: libclang_rt.asan-arm-android.a"
156// CHECK-ASAN-ANDROID-STATICLIBASAN-NOT: "-lpthread"
157// CHECK-ASAN-ANDROID-STATICLIBASAN-NOT: "-lrt"
158
159// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
160// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=undefined \
161// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
162// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-ANDROID %s
163//
164// CHECK-UBSAN-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
165// CHECK-UBSAN-ANDROID-NOT: "-lc"
166// CHECK-UBSAN-ANDROID-NOT: "-pie"
167// CHECK-UBSAN-ANDROID-NOT: "-lpthread"
168// CHECK-UBSAN-ANDROID: libclang_rt.ubsan_standalone-arm-android.so"
169// CHECK-UBSAN-ANDROID-NOT: "-lpthread"
170
171// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
172// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=undefined \
173// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
174// RUN:     -static-libsan \
175// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-ANDROID-STATICLIBASAN %s
176//
177// CHECK-UBSAN-ANDROID-STATICLIBASAN: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
178// CHECK-UBSAN-ANDROID-STATICLIBASAN: libclang_rt.ubsan_standalone-arm-android.a"
179// CHECK-UBSAN-ANDROID-STATICLIBASAN-NOT: "-lpthread"
180// CHECK-UBSAN-ANDROID-STATICLIBASAN-NOT: "-lrt"
181
182//
183// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
184// RUN:     -target i686-linux-android -fuse-ld=ld -fsanitize=address \
185// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
186// RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID-X86 %s
187//
188// CHECK-ASAN-ANDROID-X86: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
189// CHECK-ASAN-ANDROID-X86-NOT: "-lc"
190// CHECK-ASAN-ANDROID-X86-NOT: "-pie"
191// CHECK-ASAN-ANDROID-X86-NOT: "-lpthread"
192// CHECK-ASAN-ANDROID-X86: libclang_rt.asan-i686-android.so"
193// CHECK-ASAN-ANDROID-X86-NOT: "-lpthread"
194//
195// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
196// RUN:     -target arm-linux-androideabi -fsanitize=address \
197// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
198// RUN:     -shared-libsan \
199// RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID-SHARED-LIBASAN %s
200//
201// CHECK-ASAN-ANDROID-SHARED-LIBASAN-NOT: argument unused during compilation: '-shared-libsan'
202//
203// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
204// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=address \
205// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
206// RUN:     -shared \
207// RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID-SHARED %s
208//
209// CHECK-ASAN-ANDROID-SHARED: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
210// CHECK-ASAN-ANDROID-SHARED-NOT: "-lc"
211// CHECK-ASAN-ANDROID-SHARED: libclang_rt.asan-arm-android.so"
212// CHECK-ASAN-ANDROID-SHARED-NOT: "-lpthread"
213
214// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
215// RUN:     -target sparcel-myriad-rtems-elf -fuse-ld=ld -fsanitize=address \
216// RUN:     --sysroot=%S/Inputs/basic_myriad_tree \
217// RUN:   | FileCheck --check-prefix=CHECK-ASAN-MYRIAD %s
218//
219// CHECK-ASAN-MYRIAD: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
220// CHECK-ASAN-MYRIAD-NOT: "-lc"
221// CHECK-ASAN-MYRIAD: libclang_rt.asan-sparcel.a"
222
223// RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
224// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -stdlib=platform -lstdc++ \
225// RUN:     -fsanitize=thread \
226// RUN:     -resource-dir=%S/Inputs/resource_dir \
227// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
228// RUN:   | FileCheck --check-prefix=CHECK-TSAN-LINUX-CXX %s
229//
230// CHECK-TSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
231// CHECK-TSAN-LINUX-CXX-NOT: stdc++
232// CHECK-TSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tsan-x86_64.a" "--no-whole-archive"
233// CHECK-TSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan-x86_64.a.syms"
234// CHECK-TSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tsan_cxx-x86_64.a" "--no-whole-archive"
235// CHECK-TSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan_cxx-x86_64.a.syms"
236// CHECK-TSAN-LINUX-CXX-NOT: "--export-dynamic"
237// CHECK-TSAN-LINUX-CXX: stdc++
238// CHECK-TSAN-LINUX-CXX: "-lpthread"
239// CHECK-TSAN-LINUX-CXX: "-lrt"
240// CHECK-TSAN-LINUX-CXX: "-ldl"
241
242// RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
243// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -stdlib=platform -lstdc++ \
244// RUN:     -fsanitize=memory \
245// RUN:     -resource-dir=%S/Inputs/resource_dir \
246// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
247// RUN:   | FileCheck --check-prefix=CHECK-MSAN-LINUX-CXX %s
248//
249// CHECK-MSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
250// CHECK-MSAN-LINUX-CXX-NOT: stdc++
251// CHECK-MSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.msan-x86_64.a" "--no-whole-archive"
252// CHECK-MSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan-x86_64.a.syms"
253// CHECK-MSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.msan_cxx-x86_64.a" "--no-whole-archive"
254// CHECK-MSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan_cxx-x86_64.a.syms"
255// CHECK-MSAN-LINUX-CXX-NOT: "--export-dynamic"
256// CHECK-MSAN-LINUX-CXX: stdc++
257// CHECK-MSAN-LINUX-CXX: "-lpthread"
258// CHECK-MSAN-LINUX-CXX: "-lrt"
259// CHECK-MSAN-LINUX-CXX: "-ldl"
260
261// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
262// RUN:     -target i386-unknown-linux -fuse-ld=ld \
263// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
264// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s
265
266// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
267// RUN:     -target i386-unknown-linux -fuse-ld=ld \
268// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
269// RUN:     -static-libsan \
270// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s
271
272// CHECK-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
273// CHECK-UBSAN-LINUX-NOT: libclang_rt.asan
274// CHECK-UBSAN-LINUX-NOT: libclang_rt.ubsan_standalone_cxx
275// CHECK-UBSAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone-i386.a" "--no-whole-archive"
276// CHECK-UBSAN-LINUX-NOT: libclang_rt.asan
277// CHECK-UBSAN-LINUX-NOT: libclang_rt.ubsan_standalone_cxx
278// CHECK-UBSAN-LINUX-NOT: "-lstdc++"
279// CHECK-UBSAN-LINUX: "-lpthread"
280
281// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
282// RUN:     -target i386-unknown-linux -fuse-ld=ld \
283// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
284// RUN:     -shared-libsan \
285// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN %s
286
287// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
288// RUN:     -target i386-unknown-linux -fuse-ld=ld \
289// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
290// RUN:     -static-libsan -shared-libsan \
291// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN %s
292
293// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
294// RUN:     -target i386-unknown-linux -fuse-ld=ld \
295// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
296// RUN:     -shared -shared-libsan \
297// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN %s
298
299// CHECK-UBSAN-LINUX-SHAREDLIBASAN: "{{.*}}ld{{(.exe)?}}"
300// CHECK-UBSAN-LINUX-SHAREDLIBASAN: "{{.*}}libclang_rt.ubsan_standalone-i386.so{{.*}}"
301
302// RUN: %clang -fsanitize=undefined -fsanitize-link-c++-runtime %s -### -o %t.o 2>&1 \
303// RUN:     -target i386-unknown-linux \
304// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
305// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-LINK-CXX %s
306// CHECK-UBSAN-LINUX-LINK-CXX-NOT: "-lstdc++"
307// CHECK-UBSAN-LINUX-LINK-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone_cxx-i386.a" "--no-whole-archive"
308// CHECK-UBSAN-LINUX-LINK-CXX-NOT: "-lstdc++"
309
310// RUN: %clangxx -fsanitize=undefined %s -### -o %t.o 2>&1 \
311// RUN:     -target i386-unknown-linux -fuse-ld=ld -stdlib=platform \
312// RUN:     -resource-dir=%S/Inputs/resource_dir \
313// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
314// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-CXX %s
315// CHECK-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
316// CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
317// CHECK-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone-i386.a" "--no-whole-archive"
318// CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
319// CHECK-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone_cxx-i386.a" "--no-whole-archive"
320// CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
321// CHECK-UBSAN-LINUX-CXX: "-lstdc++"
322// CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
323// CHECK-UBSAN-LINUX-CXX: "-lpthread"
324
325// RUN: %clang -fsanitize=undefined -fsanitize-minimal-runtime %s -### -o %t.o 2>&1 \
326// RUN:     -target i386-unknown-linux -fuse-ld=ld \
327// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
328// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-MINIMAL-LINUX %s
329// CHECK-UBSAN-MINIMAL-LINUX: "{{.*}}ld{{(.exe)?}}"
330// CHECK-UBSAN-MINIMAL-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_minimal-i386.a" "--no-whole-archive"
331// CHECK-UBSAN-MINIMAL-LINUX: "-lpthread"
332
333// RUN: %clang -fsanitize=undefined -fsanitize-minimal-runtime %s -### -o %t.o 2>&1 \
334// RUN:     -target x86_64-apple-darwin -fuse-ld=ld \
335// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
336// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-MINIMAL-DARWIN %s
337// CHECK-UBSAN-MINIMAL-DARWIN: "{{.*}}ld{{(.exe)?}}"
338// CHECK-UBSAN-MINIMAL-DARWIN: "{{.*}}libclang_rt.ubsan_minimal_osx_dynamic.dylib"
339
340// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
341// RUN:     -target x86_64-apple-darwin -fuse-ld=ld -static-libsan \
342// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
343// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-STATIC-DARWIN %s
344// CHECK-UBSAN-STATIC-DARWIN: "{{.*}}ld{{(.exe)?}}"
345// CHECK-UBSAN-STATIC-DARWIN: "{{.*}}libclang_rt.ubsan_osx.a"
346
347// RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
348// RUN:     -target i386-unknown-linux -fuse-ld=ld \
349// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
350// RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX %s
351// CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
352// CHECK-ASAN-UBSAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan-i386.a" "--no-whole-archive"
353// CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan
354// CHECK-ASAN-UBSAN-LINUX-NOT: "-lstdc++"
355// CHECK-ASAN-UBSAN-LINUX: "-lpthread"
356
357// RUN: %clangxx -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
358// RUN:     -target i386-unknown-linux -fuse-ld=ld -stdlib=platform \
359// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
360// RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX %s
361// CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
362// CHECK-ASAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan-i386.a" "--no-whole-archive"
363// CHECK-ASAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan_cxx-i386.a" "--no-whole-archive"
364// CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.ubsan
365// CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++"
366// CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread"
367
368// RUN: %clangxx -fsanitize=memory,undefined %s -### -o %t.o 2>&1 \
369// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
370// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
371// RUN:   | FileCheck --check-prefix=CHECK-MSAN-UBSAN-LINUX-CXX %s
372// CHECK-MSAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
373// CHECK-MSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.msan-x86_64.a" "--no-whole-archive"
374// CHECK-MSAN-UBSAN-LINUX-CXX-NOT: libclang_rt.ubsan
375
376// RUN: %clangxx -fsanitize=thread,undefined %s -### -o %t.o 2>&1 \
377// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
378// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
379// RUN:   | FileCheck --check-prefix=CHECK-TSAN-UBSAN-LINUX-CXX %s
380// CHECK-TSAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
381// CHECK-TSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tsan-x86_64.a" "--no-whole-archive"
382// CHECK-TSAN-UBSAN-LINUX-CXX-NOT: libclang_rt.ubsan
383
384// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
385// RUN:     -target i386-unknown-linux -fuse-ld=ld \
386// RUN:     -resource-dir=%S/Inputs/resource_dir \
387// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
388// RUN:     -shared \
389// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHARED %s
390// CHECK-UBSAN-LINUX-SHARED: "{{.*}}ld{{(.exe)?}}"
391// CHECK-UBSAN-LINUX-SHARED-NOT: --export-dynamic
392// CHECK-UBSAN-LINUX-SHARED-NOT: --dynamic-list
393// CHECK-UBSAN-LINUX-SHARED-NOT: libclang_rt.ubsan
394
395// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
396// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=leak \
397// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
398// RUN:   | FileCheck --check-prefix=CHECK-LSAN-LINUX %s
399//
400// CHECK-LSAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
401// CHECK-LSAN-LINUX-NOT: "-lc"
402// CHECK-LSAN-LINUX-NOT: libclang_rt.ubsan
403// CHECK-LSAN-LINUX: libclang_rt.lsan-x86_64.a"
404// CHECK-LSAN-LINUX: "-lpthread"
405// CHECK-LSAN-LINUX: "-ldl"
406
407// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
408// RUN:  -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=leak -fsanitize-coverage=func \
409// RUN:  --sysroot=%S/Inputs/basic_linux_tree \
410// RUN:   | FileCheck --check-prefix=CHECK-LSAN-COV-LINUX %s
411//
412// CHECK-LSAN-COV-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
413// CHECK-LSAN-COV-LINUX-NOT: "-lc"
414// CHECK-LSAN-COV-LINUX-NOT: libclang_rt.ubsan
415// CHECK-LSAV-COV-LINUX: libclang_rt.lsan-x86_64.a"
416// CHECK-LSAN-COV-LINUX-NOT: libclang_rt.ubsan
417// CHECK-LSAN-COV-LINUX: "-lpthread"
418// CHECK-LSAN-COV-LINUX: "-ldl"
419
420// RUN: %clang -fsanitize=leak,address %s -### -o %t.o 2>&1 \
421// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
422// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
423// RUN:   | FileCheck --check-prefix=CHECK-LSAN-ASAN-LINUX %s
424// CHECK-LSAN-ASAN-LINUX: "{{.*}}ld{{(.exe)?}}"
425// CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
426// CHECK-LSAN-ASAN-LINUX: libclang_rt.asan-x86_64
427// CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
428
429// RUN: %clang -fsanitize=address -fsanitize-coverage=func %s -### -o %t.o 2>&1 \
430// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
431// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
432// RUN:   | FileCheck --check-prefix=CHECK-ASAN-COV-LINUX %s
433// CHECK-ASAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
434// CHECK-ASAN-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan-x86_64.a" "--no-whole-archive"
435// CHECK-ASAN-COV-LINUX-NOT: libclang_rt.ubsan
436// CHECK-ASAN-COV-LINUX-NOT: "-lstdc++"
437// CHECK-ASAN-COV-LINUX: "-lpthread"
438
439// RUN: %clang -fsanitize=memory -fsanitize-coverage=func %s -### -o %t.o 2>&1 \
440// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
441// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
442// RUN:   | FileCheck --check-prefix=CHECK-MSAN-COV-LINUX %s
443// CHECK-MSAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
444// CHECK-MSAN-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.msan-x86_64.a" "--no-whole-archive"
445// CHECK-MSAN-COV-LINUX-NOT: libclang_rt.ubsan
446// CHECK-MSAN-COV-LINUX-NOT: "-lstdc++"
447// CHECK-MSAN-COV-LINUX: "-lpthread"
448
449// RUN: %clang -fsanitize=dataflow -fsanitize-coverage=func %s -### -o %t.o 2>&1 \
450// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
451// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
452// RUN:   | FileCheck --check-prefix=CHECK-DFSAN-COV-LINUX %s
453// CHECK-DFSAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
454// CHECK-DFSAN-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.dfsan-x86_64.a" "--no-whole-archive"
455// CHECK-DFSAN-COV-LINUX-NOT: libclang_rt.ubsan
456// CHECK-DFSAN-COV-LINUX-NOT: "-lstdc++"
457// CHECK-DFSAN-COV-LINUX: "-lpthread"
458
459// RUN: %clang -fsanitize=undefined -fsanitize-coverage=func %s -### -o %t.o 2>&1 \
460// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
461// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
462// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-COV-LINUX %s
463// CHECK-UBSAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
464// CHECK-UBSAN-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone-x86_64.a" "--no-whole-archive"
465// CHECK-UBSAN-COV-LINUX-NOT: "-lstdc++"
466// CHECK-UBSAN-COV-LINUX: "-lpthread"
467
468// RUN: %clang -fsanitize-coverage=func %s -### -o %t.o 2>&1 \
469// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
470// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
471// RUN:   | FileCheck --check-prefix=CHECK-COV-LINUX %s
472// CHECK-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
473// CHECK-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone-x86_64.a" "--no-whole-archive"
474// CHECK-COV-LINUX-NOT: "-lstdc++"
475// CHECK-COV-LINUX: "-lpthread"
476
477// CFI by itself does not link runtime libraries.
478// RUN: %clang -fsanitize=cfi %s -### -o %t.o 2>&1 \
479// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -rtlib=platform \
480// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
481// RUN:   | FileCheck --check-prefix=CHECK-CFI-LINUX %s
482// CHECK-CFI-LINUX: "{{.*}}ld{{(.exe)?}}"
483// CHECK-CFI-LINUX-NOT: libclang_rt.
484
485// CFI with diagnostics links the UBSan runtime.
486// RUN: %clang -fsanitize=cfi -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
487// RUN:     %s -### -o %t.o 2>&1\
488// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
489// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
490// RUN:   | FileCheck --check-prefix=CHECK-CFI-DIAG-LINUX %s
491// CHECK-CFI-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}"
492// CHECK-CFI-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.ubsan_standalone-x86_64.a" "--no-whole-archive"
493
494// Cross-DSO CFI links the CFI runtime.
495// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso %s -### -o %t.o 2>&1 \
496// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
497// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
498// RUN:   | FileCheck --check-prefix=CHECK-CFI-CROSS-DSO-LINUX %s
499// CHECK-CFI-CROSS-DSO-LINUX: "{{.*}}ld{{(.exe)?}}"
500// CHECK-CFI-CROSS-DSO-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi-x86_64.a" "--no-whole-archive"
501// CHECK-CFI-CROSS-DSO-LINUX: -export-dynamic
502
503// Cross-DSO CFI with diagnostics links just the CFI runtime.
504// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso %s -### -o %t.o 2>&1 \
505// RUN:     -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
506// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
507// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
508// RUN:   | FileCheck --check-prefix=CHECK-CFI-CROSS-DSO-DIAG-LINUX %s
509// CHECK-CFI-CROSS-DSO-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}"
510// CHECK-CFI-CROSS-DSO-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi_diag-x86_64.a" "--no-whole-archive"
511// CHECK-CFI-CROSS-DSO-DIAG-LINUX: -export-dynamic
512
513// Cross-DSO CFI on Android does not link runtime libraries.
514// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso %s -### -o %t.o 2>&1 \
515// RUN:     -target aarch64-linux-android -fuse-ld=ld \
516// RUN:     --sysroot=%S/Inputs/basic_android_tree \
517// RUN:   | FileCheck --check-prefix=CHECK-CFI-CROSS-DSO-ANDROID %s
518// CHECK-CFI-CROSS-DSO-ANDROID: "{{.*}}ld{{(.exe)?}}"
519// CHECK-CFI-CROSS-DSO-ANDROID-NOT: libclang_rt.cfi
520
521// Cross-DSO CFI with diagnostics on Android links just the UBSAN runtime.
522// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso %s -### -o %t.o 2>&1 \
523// RUN:     -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
524// RUN:     -target aarch64-linux-android -fuse-ld=ld \
525// RUN:     --sysroot=%S/Inputs/basic_android_tree \
526// RUN:   | FileCheck --check-prefix=CHECK-CFI-CROSS-DSO-DIAG-ANDROID %s
527// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{.*}}ld{{(.exe)?}}"
528// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{[^"]*}}libclang_rt.ubsan_standalone-aarch64-android.so"
529// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "-export-dynamic-symbol=__cfi_check"
530
531// RUN: %clangxx -fsanitize=address %s -### -o %t.o 2>&1 \
532// RUN:     -mmacosx-version-min=10.6 \
533// RUN:     -target x86_64-apple-darwin13.4.0 -fuse-ld=ld -stdlib=platform \
534// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
535// RUN:   | FileCheck --check-prefix=CHECK-ASAN-DARWIN106-CXX %s
536// CHECK-ASAN-DARWIN106-CXX: "{{.*}}ld{{(.exe)?}}"
537// CHECK-ASAN-DARWIN106-CXX: libclang_rt.asan_osx_dynamic.dylib
538// CHECK-ASAN-DARWIN106-CXX-NOT: -lc++abi
539
540// RUN: %clangxx -fsanitize=leak %s -### -o %t.o 2>&1 \
541// RUN:     -mmacosx-version-min=10.6 \
542// RUN:     -target x86_64-apple-darwin13.4.0 -fuse-ld=ld -stdlib=platform \
543// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
544// RUN:   | FileCheck --check-prefix=CHECK-LSAN-DARWIN106-CXX %s
545// CHECK-LSAN-DARWIN106-CXX: "{{.*}}ld{{(.exe)?}}"
546// CHECK-LSAN-DARWIN106-CXX: libclang_rt.lsan_osx_dynamic.dylib
547// CHECK-LSAN-DARWIN106-CXX-NOT: -lc++abi
548
549// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
550// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=safe-stack \
551// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
552// RUN:   | FileCheck --check-prefix=CHECK-SAFESTACK-LINUX %s
553//
554// CHECK-SAFESTACK-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
555// CHECK-SAFESTACK-LINUX-NOT: "-lc"
556// CHECK-SAFESTACK-LINUX-NOT: whole-archive
557// CHECK-SAFESTACK-LINUX: libclang_rt.safestack-x86_64.a"
558// CHECK-SAFESTACK-LINUX: "-u" "__safestack_init"
559// CHECK-SAFESTACK-LINUX: "-lpthread"
560// CHECK-SAFESTACK-LINUX: "-ldl"
561
562// RUN: %clang -fsanitize=shadow-call-stack %s -### -o %t.o 2>&1 \
563// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
564// RUN:   | FileCheck --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-X86-64 %s
565// CHECK-SHADOWCALLSTACK-LINUX-X86-64-NOT: error:
566
567// RUN: %clang -fsanitize=shadow-call-stack %s -### -o %t.o 2>&1 \
568// RUN:     -target aarch64-unknown-linux -fuse-ld=ld \
569// RUN:   | FileCheck --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64 %s
570// CHECK-SHADOWCALLSTACK-LINUX-AARCH64: '-fsanitize=shadow-call-stack' only allowed with '-ffixed-x18'
571
572// RUN: %clang -fsanitize=shadow-call-stack %s -### -o %t.o 2>&1 \
573// RUN:     -target aarch64-unknown-linux -fuse-ld=ld -ffixed-x18 \
574// RUN:   | FileCheck --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18 %s
575// RUN: %clang -fsanitize=shadow-call-stack %s -### -o %t.o 2>&1 \
576// RUN:     -target arm64-unknown-ios -fuse-ld=ld \
577// RUN:   | FileCheck --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18 %s
578// RUN: %clang -fsanitize=shadow-call-stack %s -### -o %t.o 2>&1 \
579// RUN:     -target aarch64-unknown-linux-android -fuse-ld=ld \
580// RUN:   | FileCheck --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18 %s
581// CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18-NOT: error:
582
583// RUN: %clang -fsanitize=shadow-call-stack %s -### -o %t.o 2>&1 \
584// RUN:     -target x86-unknown-linux -fuse-ld=ld \
585// RUN:   | FileCheck --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-X86 %s
586// CHECK-SHADOWCALLSTACK-LINUX-X86: error: unsupported option '-fsanitize=shadow-call-stack' for target 'x86-unknown-linux'
587
588// RUN: %clang -fsanitize=shadow-call-stack %s -### -o %t.o 2>&1 \
589// RUN:     -fsanitize=safe-stack -target x86_64-unknown-linux -fuse-ld=ld \
590// RUN:   | FileCheck --check-prefix=CHECK-SHADOWCALLSTACK-SAFESTACK %s
591// CHECK-SHADOWCALLSTACK-SAFESTACK-NOT: error:
592
593// RUN: %clang -fsanitize=cfi -fsanitize-stats %s -### -o %t.o 2>&1 \
594// RUN:     -target x86_64-unknown-linux -fuse-ld=ld \
595// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
596// RUN:   | FileCheck --check-prefix=CHECK-CFI-STATS-LINUX %s
597// CHECK-CFI-STATS-LINUX: "{{.*}}ld{{(.exe)?}}"
598// CHECK-CFI-STATS-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.stats_client-x86_64.a" "--no-whole-archive"
599// CHECK-CFI-STATS-LINUX-NOT: "--whole-archive"
600// CHECK-CFI-STATS-LINUX: "{{[^"]*}}libclang_rt.stats-x86_64.a"
601
602// RUN: %clang -fsanitize=cfi -fsanitize-stats %s -### -o %t.o 2>&1 \
603// RUN:     -target x86_64-apple-darwin -fuse-ld=ld \
604// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
605// RUN:   | FileCheck --check-prefix=CHECK-CFI-STATS-DARWIN %s
606// CHECK-CFI-STATS-DARWIN: "{{.*}}ld{{(.exe)?}}"
607// CHECK-CFI-STATS-DARWIN: "{{[^"]*}}libclang_rt.stats_client_osx.a"
608// CHECK-CFI-STATS-DARWIN: "{{[^"]*}}libclang_rt.stats_osx_dynamic.dylib"
609
610// RUN: %clang -fsanitize=cfi -fsanitize-stats %s -### -o %t.o 2>&1 \
611// RUN:     -target x86_64-pc-windows \
612// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
613// RUN:   | FileCheck --check-prefix=CHECK-CFI-STATS-WIN64 %s
614// CHECK-CFI-STATS-WIN64: "--dependent-lib={{[^"]*}}clang_rt.stats_client-x86_64.lib"
615// CHECK-CFI-STATS-WIN64: "--dependent-lib={{[^"]*}}clang_rt.stats-x86_64.lib"
616// CHECK-CFI-STATS-WIN64: "--linker-option=/include:__sanitizer_stats_register"
617
618// RUN: %clang -fsanitize=cfi -fsanitize-stats %s -### -o %t.o 2>&1 \
619// RUN:     -target i686-pc-windows \
620// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
621// RUN:   | FileCheck --check-prefix=CHECK-CFI-STATS-WIN32 %s
622// CHECK-CFI-STATS-WIN32: "--dependent-lib={{[^"]*}}clang_rt.stats_client-i386.lib"
623// CHECK-CFI-STATS-WIN32: "--dependent-lib={{[^"]*}}clang_rt.stats-i386.lib"
624// CHECK-CFI-STATS-WIN32: "--linker-option=/include:___sanitizer_stats_register"
625
626// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
627// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=safe-stack \
628// RUN:     --sysroot=%S/Inputs/basic_android_tree \
629// RUN:   | FileCheck --check-prefix=CHECK-SAFESTACK-ANDROID-ARM %s
630//
631// CHECK-SAFESTACK-ANDROID-ARM: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
632// CHECK-SAFESTACK-ANDROID-ARM-NOT: libclang_rt.safestack
633
634// RUN: %clang -no-canonical-prefixes %s -### -o %t.o -shared 2>&1 \
635// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=safe-stack \
636// RUN:     --sysroot=%S/Inputs/basic_android_tree \
637// RUN:   | FileCheck --check-prefix=CHECK-SAFESTACK-SHARED-ANDROID-ARM %s
638//
639// CHECK-SAFESTACK-SHARED-ANDROID-ARM: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
640// CHECK-SAFESTACK-SHARED-ANDROID-ARM-NOT: libclang_rt.safestack
641
642// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
643// RUN:     -target aarch64-linux-android -fuse-ld=ld -fsanitize=safe-stack \
644// RUN:     --sysroot=%S/Inputs/basic_android_tree \
645// RUN:   | FileCheck --check-prefix=CHECK-SAFESTACK-ANDROID-AARCH64 %s
646//
647// CHECK-SAFESTACK-ANDROID-AARCH64: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
648// CHECK-SAFESTACK-ANDROID-AARCH64-NOT: libclang_rt.safestack
649
650// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
651// RUN:     -target x86_64-scei-ps4 -fuse-ld=ld \
652// RUN:     -shared \
653// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-PS4 %s
654// CHECK-UBSAN-PS4: --dependent-lib=libSceDbgUBSanitizer_stub_weak.a
655// CHECK-UBSAN-PS4: "{{.*}}ld{{(.gold)?(.exe)?}}"
656// CHECK-UBSAN-PS4: -lSceDbgUBSanitizer_stub_weak
657
658// RUN: %clang -fsanitize=address %s -### -o %t.o 2>&1 \
659// RUN:     -target x86_64-scei-ps4 -fuse-ld=ld \
660// RUN:     -shared \
661// RUN:   | FileCheck --check-prefix=CHECK-ASAN-PS4 %s
662// CHECK-ASAN-PS4: --dependent-lib=libSceDbgAddressSanitizer_stub_weak.a
663// CHECK-ASAN-PS4: "{{.*}}ld{{(.gold)?(.exe)?}}"
664// CHECK-ASAN-PS4: -lSceDbgAddressSanitizer_stub_weak
665
666// RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
667// RUN:     -target x86_64-scei-ps4 -fuse-ld=ld \
668// RUN:     -shared \
669// RUN:   | FileCheck --check-prefix=CHECK-AUBSAN-PS4 %s
670// CHECK-AUBSAN-PS4-NOT: --dependent-lib=libSceDbgUBSanitizer_stub_weak.a
671// CHECK-AUBSAN-PS4: --dependent-lib=libSceDbgAddressSanitizer_stub_weak.a
672// CHECK-AUBSAN-PS4-NOT: --dependent-lib=libSceDbgUBSanitizer_stub_weak.a
673// CHECK-AUBSAN-PS4: "{{.*}}ld{{(.gold)?(.exe)?}}"
674// CHECK-AUBSAN-PS4: -lSceDbgAddressSanitizer_stub_weak
675
676// RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
677// RUN:     -target x86_64-scei-ps4 -fuse-ld=ld \
678// RUN:     -shared \
679// RUN:     -nostdlib \
680// RUN:   | FileCheck --check-prefix=CHECK-NOLIB-PS4 %s
681// CHECK-NOLIB-PS4-NOT: SceDbgAddressSanitizer_stub_weak
682
683// RUN: %clang -fsanitize=scudo %s -### -o %t.o 2>&1 \
684// RUN:     -target i386-unknown-linux -fuse-ld=ld \
685// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
686// RUN:   | FileCheck --check-prefix=CHECK-SCUDO-LINUX %s
687// CHECK-SCUDO-LINUX: "{{.*}}ld{{(.exe)?}}"
688// CHECK-SCUDO-LINUX: "-pie"
689// CHECK-SCUDO-LINUX: "--whole-archive" "{{.*}}libclang_rt.scudo-i386.a" "--no-whole-archive"
690// CHECK-SCUDO-LINUX-NOT: "-lstdc++"
691// CHECK-SCUDO-LINUX: "-lpthread"
692// CHECK-SCUDO-LINUX: "-ldl"
693
694// RUN: %clang -fsanitize=scudo -fsanitize-minimal-runtime %s -### -o %t.o 2>&1 \
695// RUN:     -target i386-unknown-linux -fuse-ld=ld \
696// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
697// RUN:   | FileCheck --check-prefix=CHECK-SCUDO-MINIMAL-LINUX %s
698// CHECK-SCUDO-MINIMAL-LINUX: "{{.*}}ld{{(.exe)?}}"
699// CHECK-SCUDO-MINIMAL-LINUX: "-pie"
700// CHECK-SCUDO-MINIMAL-LINUX: "--whole-archive" "{{.*}}libclang_rt.scudo_minimal-i386.a" "--no-whole-archive"
701// CHECK-SCUDO-MINIMAL-LINUX: "-lpthread"
702
703// RUN: %clang -no-canonical-prefixes %s -### -o %t.so -shared 2>&1 \
704// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=scudo -shared-libsan \
705// RUN:     -resource-dir=%S/Inputs/resource_dir \
706// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
707// RUN:   | FileCheck --check-prefix=CHECK-SCUDO-SHARED-LINUX %s
708//
709// CHECK-SCUDO-SHARED-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
710// CHECK-SCUDO-SHARED-LINUX-NOT: "-lc"
711// CHECK-SCUDO-SHARED-LINUX-NOT: libclang_rt.scudo-i386.a"
712// CHECK-SCUDO-SHARED-LINUX: libclang_rt.scudo-i386.so"
713// CHECK-SCUDO-SHARED-LINUX-NOT: "-lpthread"
714// CHECK-SCUDO-SHARED-LINUX-NOT: "-lrt"
715// CHECK-SCUDO-SHARED-LINUX-NOT: "-ldl"
716// CHECK-SCUDO-SHARED-LINUX-NOT: "--export-dynamic"
717// CHECK-SCUDO-SHARED-LINUX-NOT: "--dynamic-list"
718
719// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
720// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=scudo \
721// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
722// RUN:   | FileCheck --check-prefix=CHECK-SCUDO-ANDROID %s
723//
724// CHECK-SCUDO-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
725// CHECK-SCUDO-ANDROID-NOT: "-lc"
726// CHECK-SCUDO-ANDROID: "-pie"
727// CHECK-SCUDO-ANDROID-NOT: "-lpthread"
728// CHECK-SCUDO-ANDROID: libclang_rt.scudo-arm-android.so"
729// CHECK-SCUDO-ANDROID-NOT: "-lpthread"
730
731// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
732// RUN:     -target arm-linux-androideabi -fuse-ld=ld -fsanitize=scudo \
733// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
734// RUN:     -static-libsan \
735// RUN:   | FileCheck --check-prefix=CHECK-SCUDO-ANDROID-STATIC %s
736// CHECK-SCUDO-ANDROID-STATIC: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
737// CHECK-SCUDO-ANDROID-STATIC: "-pie"
738// CHECK-SCUDO-ANDROID-STATIC: "--whole-archive" "{{.*}}libclang_rt.scudo-arm-android.a" "--no-whole-archive"
739// CHECK-SCUDO-ANDROID-STATIC-NOT: "-lstdc++"
740// CHECK-SCUDO-ANDROID-STATIC-NOT: "-lpthread"
741// CHECK-SCUDO-ANDROID-STATIC-NOT: "-lrt"
742
743// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
744// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
745// RUN:     -resource-dir=%S/Inputs/resource_dir \
746// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
747// RUN:   | FileCheck --check-prefix=CHECK-HWASAN-X86-64-LINUX %s
748//
749// CHECK-HWASAN-X86-64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
750// CHECK-HWASAN-X86-64-LINUX: "-pie"
751// CHECK-HWASAN-X86-64-LINUX-NOT: "-lc"
752// CHECK-HWASAN-X86-64-LINUX: libclang_rt.hwasan-x86_64.a"
753// CHECK-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
754// CHECK-HWASAN-X86-64-LINUX: "--dynamic-list={{.*}}libclang_rt.hwasan-x86_64.a.syms"
755// CHECK-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
756// CHECK-HWASAN-X86-64-LINUX: "-lpthread"
757// CHECK-HWASAN-X86-64-LINUX: "-lrt"
758// CHECK-HWASAN-X86-64-LINUX: "-ldl"
759
760// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
761// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
762// RUN:     -shared-libsan -resource-dir=%S/Inputs/resource_dir \
763// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
764// RUN:   | FileCheck --check-prefix=CHECK-SHARED-HWASAN-X86-64-LINUX %s
765//
766// CHECK-SHARED-HWASAN-X86-64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
767// CHECK-SHARED-HWASAN-X86-64-LINUX: "-pie"
768// CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-lc"
769// CHECK-SHARED-HWASAN-X86-64-LINUX: libclang_rt.hwasan-x86_64.so"
770// CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-lpthread"
771// CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-lrt"
772// CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-ldl"
773// CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
774// CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "--dynamic-list"
775
776// RUN: %clang -no-canonical-prefixes %s -### -o %t.so -shared 2>&1 \
777// RUN:     -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
778// RUN:     -shared-libsan -resource-dir=%S/Inputs/resource_dir \
779// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
780// RUN:   | FileCheck --check-prefix=CHECK-DSO-SHARED-HWASAN-X86-64-LINUX %s
781//
782// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
783// CHECK-DSO_SHARED-HWASAN-X86-64-LINUX: "-pie"
784// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-lc"
785// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX: libclang_rt.hwasan-x86_64.so"
786// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-lpthread"
787// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-lrt"
788// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-ldl"
789// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
790// CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "--dynamic-list"
791
792// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
793// RUN:     -target aarch64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
794// RUN:     -resource-dir=%S/Inputs/resource_dir \
795// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
796// RUN:   | FileCheck --check-prefix=CHECK-HWASAN-AARCH64-LINUX %s
797//
798// CHECK-HWASAN-AARCH64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
799// CHECK-HWASAN-AARCH64-LINUX: "-pie"
800// CHECK-HWASAN-AARCH64-LINUX-NOT: "-lc"
801// CHECK-HWASAN-AARCH64-LINUX: libclang_rt.hwasan-aarch64.a"
802// CHECK-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
803// CHECK-HWASAN-AARCH64-LINUX: "--dynamic-list={{.*}}libclang_rt.hwasan-aarch64.a.syms"
804// CHECK-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
805// CHECK-HWASAN-AARCH64-LINUX: "-lpthread"
806// CHECK-HWASAN-AARCH64-LINUX: "-lrt"
807// CHECK-HWASAN-AARCH64-LINUX: "-ldl"
808
809// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
810// RUN:     -target aarch64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
811// RUN:     -shared-libsan \
812// RUN:     -resource-dir=%S/Inputs/resource_dir \
813// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
814// RUN:   | FileCheck --check-prefix=CHECK-SHARED-HWASAN-AARCH64-LINUX %s
815//
816// CHECK-SHARED-HWASAN-AARCH64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
817// CHECK-SHARED-HWASAN-AARCH64-LINUX: "-pie"
818// CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lc"
819// CHECK-SHARED-HWASAN-AARCH64-LINUX: libclang_rt.hwasan-aarch64.so"
820// CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lpthread"
821// CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lrt"
822// CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
823// CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
824// CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
825
826// RUN: %clang -no-canonical-prefixes %s -### -o %t.so -shared 2>&1 \
827// RUN:     -target aarch64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
828// RUN:     -shared-libsan -resource-dir=%S/Inputs/resource_dir \
829// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
830// RUN:   | FileCheck --check-prefix=CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX %s
831//
832// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
833// CHECK-DSO_SHARED-HWASAN-AARCH64-LINUX: "-pie"
834// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lc"
835// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX: libclang_rt.hwasan-aarch64.so"
836// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lpthread"
837// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lrt"
838// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
839// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
840// CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
841