xref: /llvm-project/clang/test/Driver/sanitizer-ld.c (revision 0897373f1a329a7a02f8ce3c501a05d2f9c89390)
1 // Test sanitizers ld flags.
2 
3 // Match all sanitizer related libclang_rt, we are not interested in
4 // libclang_rt.builtins, libclang_rt.osx, libclang_rt.ios, libclang_rt.watchos
5 // etc.
6 //
7 // If we need to add sanitizer with name starting with excluded laters, e.g.
8 // `bsan`, we can extend expression like this: `([^iow]|b[^u])`.
9 //
10 // DEFINE: %{filecheck} = FileCheck %s --implicit-check-not="libclang_rt.{{([^biow])}}"
11 
12 // RUN: %clang -### %s 2>&1 \
13 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -fsanitize=address \
14 // RUN:     -resource-dir=%S/Inputs/resource_dir \
15 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
16 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-LINUX
17 //
18 // CHECK-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
19 // CHECK-ASAN-LINUX-NOT: "-lc"
20 // CHECK-ASAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
21 // CHECK-ASAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
22 // CHECK-ASAN-LINUX-NOT: "--export-dynamic"
23 // CHECK-ASAN-LINUX: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
24 // CHECK-ASAN-LINUX-NOT: "--export-dynamic"
25 // CHECK-ASAN-LINUX: "-lpthread"
26 // CHECK-ASAN-LINUX: "-lrt"
27 // CHECK-ASAN-LINUX: "-ldl"
28 // CHECK-ASAN-LINUX: "-lresolv"
29 
30 // RUN: %clang -fsanitize=address -fno-sanitize-link-runtime -### %s 2>&1 \
31 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
32 // RUN:     -resource-dir=%S/Inputs/resource_dir \
33 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
34 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX
35 //
36 // CHECK-ASAN-NO-LINK-RUNTIME-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
37 
38 // RUN: %clang -fsanitize=address -fno-sanitize-link-runtime -### %s 2>&1 \
39 // RUN:     --target=arm64e-apple-macosx -fuse-ld=ld \
40 // RUN:     -resource-dir=%S/Inputs/resource_dir \
41 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
42 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-DARWIN
43 //
44 // CHECK-ASAN-NO-LINK-RUNTIME-DARWIN: "{{.*}}ld{{(.exe)?}}"
45 
46 // RUN: %clang -fsanitize=address -### %s 2>&1 \
47 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
48 // RUN:     -resource-dir=%S/Inputs/resource_dir \
49 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
50 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX
51 //
52 // CHECK-ASAN-EXECUTABLE-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
53 // CHECK-ASAN-EXECUTABLE-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
54 // CHECK-ASAN-EXECUTABLE-LINUX: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
55 
56 // RUN: %clang -fsanitize=address -shared -### %s 2>&1  \
57 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
58 // RUN:     -resource-dir=%S/Inputs/resource_dir \
59 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
60 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-SHARED-LINUX
61 //
62 // CHECK-ASAN-SHARED-LINUX: libclang_rt.asan_static
63 
64 // RUN: %clang -### %s 2>&1 \
65 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
66 // RUN:     -resource-dir=%S/Inputs/resource_dir \
67 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
68 // RUN:   | %{filecheck} --check-prefix=CHECK-SHARED-ASAN-LINUX
69 
70 // RUN: %clang -### %s 2>&1 \
71 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libasan \
72 // RUN:     -resource-dir=%S/Inputs/resource_dir \
73 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
74 // RUN:   | %{filecheck} --check-prefix=CHECK-SHARED-ASAN-LINUX
75 
76 // RUN: %clang -### %s 2>&1 \
77 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -fsanitize=address \
78 // RUN:     -shared-libsan -static-libsan -shared-libasan             \
79 // RUN:     -resource-dir=%S/Inputs/resource_dir \
80 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
81 // RUN:   | %{filecheck} --check-prefix=CHECK-SHARED-ASAN-LINUX
82 //
83 // CHECK-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
84 // CHECK-SHARED-ASAN-LINUX-NOT: "-lc"
85 // CHECK-SHARED-ASAN-LINUX: libclang_rt.asan.so"
86 // CHECK-SHARED-ASAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan-preinit.a" "--no-whole-archive"
87 // CHECK-SHARED-ASAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
88 // CHECK-SHARED-ASAN-LINUX-NOT: "-lpthread"
89 // CHECK-SHARED-ASAN-LINUX-NOT: "-lrt"
90 // CHECK-SHARED-ASAN-LINUX-NOT: "-ldl"
91 // CHECK-SHARED-ASAN-LINUX-NOT: "-lresolv"
92 // CHECK-SHARED-ASAN-LINUX-NOT: "--export-dynamic"
93 // CHECK-SHARED-ASAN-LINUX-NOT: "--dynamic-list"
94 
95 // RUN: %clang -### %s -o %t.so -shared 2>&1 \
96 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
97 // RUN:     -resource-dir=%S/Inputs/resource_dir \
98 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
99 // RUN:   | %{filecheck} --check-prefix=CHECK-DSO-SHARED-ASAN-LINUX
100 //
101 // CHECK-DSO-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
102 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lc"
103 // CHECK-DSO-SHARED-ASAN-LINUX: libclang_rt.asan.so"
104 // CHECK-DSO-SHARED-ASAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
105 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lpthread"
106 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lrt"
107 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-ldl"
108 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lresolv"
109 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "--export-dynamic"
110 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "--dynamic-list"
111 
112 // RUN: %clang -### %s 2>&1 \
113 // RUN:     --target=i386-unknown-freebsd -fuse-ld=ld -fsanitize=address \
114 // RUN:     -resource-dir=%S/Inputs/resource_dir \
115 // RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
116 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-FREEBSD
117 //
118 // CHECK-ASAN-FREEBSD: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
119 // CHECK-ASAN-FREEBSD-NOT: "-lc"
120 // CHECK-ASAN-FREEBSD: freebsd{{/|\\+}}libclang_rt.asan_static.a"
121 // CHECK-ASAN-FREEBSD: freebsd{{/|\\+}}libclang_rt.asan.a"
122 // CHECK-ASAN-FREEBSD-NOT: "--dynamic-list"
123 // CHECK-ASAN-FREEBSD: "--export-dynamic"
124 // CHECK-ASAN-FREEBSD: "-lpthread"
125 // CHECK-ASAN-FREEBSD: "-lrt"
126 
127 // RUN: %clang -### %s 2>&1 \
128 // RUN:     --target=i386-unknown-freebsd -fuse-ld=ld -fsanitize=address \
129 // RUN:     -resource-dir=%S/Inputs/resource_dir \
130 // RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
131 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-FREEBSD-LDL
132 //
133 // CHECK-ASAN-FREEBSD-LDL: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
134 // CHECK-ASAN-FREEBSD-LDL-NOT: "-ldl"
135 // CHECK-ASAN-FREEBSD-LDL: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
136 // CHECK-ASAN-FREEBSD-LDL: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
137 
138 // RUN: %clangxx -### %s 2>&1 \
139 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
140 // RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
141 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
142 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-LINUX-CXX
143 
144 // RUN: %clangxx -### %s 2>&1 \
145 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
146 // RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
147 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
148 // RUN:     -fsanitize-link-c++-runtime \
149 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-LINUX-CXX
150 
151 // CHECK-ASAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
152 // CHECK-ASAN-LINUX-CXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
153 // CHECK-ASAN-LINUX-CXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan_cxx.a" "--no-whole-archive"
154 // CHECK-ASAN-LINUX-CXX-NOT: "--dynamic-list"
155 // CHECK-ASAN-LINUX-CXX-SAME: "--export-dynamic"
156 // CHECK-ASAN-LINUX-CXX-SAME: "-lstdc++"
157 // CHECK-ASAN-LINUX-CXX-SAME: "-lpthread"
158 // CHECK-ASAN-LINUX-CXX-SAME: "-lrt"
159 // CHECK-ASAN-LINUX-CXX-SAME: "-ldl"
160 // CHECK-ASAN-LINUX-CXX-SAME: "-lresolv"
161 // CHECK-ASAN-LINUX-CXX-SAME: "-lc"
162 
163 // RUN: %clang -### %s 2>&1 \
164 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
165 // RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
166 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
167 // RUN:     -fno-sanitize-link-c++-runtime \
168 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-LINUX-CNOCXX
169 
170 // CHECK-ASAN-LINUX-CNOCXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
171 // CHECK-ASAN-LINUX-CNOCXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
172 // CHECK-ASAN-LINUX-CNOCXX-SAME: "--export-dynamic"
173 // CHECK-ASAN-LINUX-CNOCXX-NOT: stdc++
174 // CHECK-ASAN-LINUX-CNOCXX-SAME: "-lpthread"
175 // CHECK-ASAN-LINUX-CNOCXX-SAME: "-lrt"
176 // CHECK-ASAN-LINUX-CNOCXX-SAME: "-ldl"
177 // CHECK-ASAN-LINUX-CNOCXX-SAME: "-lresolv"
178 // CHECK-ASAN-LINUX-CNOCXX-SAME: "-lc"
179 
180 // RUN: %clangxx -### %s 2>&1 \
181 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
182 // RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
183 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
184 // RUN:     -fno-sanitize-link-c++-runtime \
185 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-LINUX-NOCXX
186 
187 // CHECK-ASAN-LINUX-NOCXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
188 // CHECK-ASAN-LINUX-NOCXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
189 // CHECK-ASAN-LINUX-NOCXX-SAME: "--export-dynamic"
190 // CHECK-ASAN-LINUX-NOCXX-SAME: "-lstdc++"
191 // CHECK-ASAN-LINUX-NOCXX-SAME: "-lpthread"
192 // CHECK-ASAN-LINUX-NOCXX-SAME: "-lrt"
193 // CHECK-ASAN-LINUX-NOCXX-SAME: "-ldl"
194 // CHECK-ASAN-LINUX-NOCXX-SAME: "-lresolv"
195 // CHECK-ASAN-LINUX-NOCXX-SAME: "-lc"
196 
197 // RUN: %clangxx -### %s 2>&1 \
198 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
199 // RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
200 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
201 // RUN:     -nostdlib++ \
202 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-LINUX-NOSTDCXX
203 
204 // CHECK-ASAN-LINUX-NOSTDCXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
205 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
206 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan_cxx.a" "--no-whole-archive"
207 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "--export-dynamic"
208 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lpthread"
209 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lrt"
210 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-ldl"
211 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lresolv"
212 // CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lc"
213 
214 // RUN: %clang -### %s -o /dev/null -fsanitize=address \
215 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform \
216 // RUN:     -resource-dir=%S/Inputs/resource_dir \
217 // RUN:     --sysroot=%S/Inputs/basic_linux_tree -lstdc++ -static 2>&1 \
218 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-LINUX-CXX-STATIC
219 //
220 // CHECK-ASAN-LINUX-CXX-STATIC: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
221 // CHECK-ASAN-LINUX-CXX-STATIC-NOT: stdc++
222 // CHECK-ASAN-LINUX-CXX-STATIC: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
223 // CHECK-ASAN-LINUX-CXX-STATIC: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
224 // CHECK-ASAN-LINUX-CXX-STATIC: stdc++
225 
226 // RUN: %clang -### %s 2>&1 \
227 // RUN:     --target=arm-linux-gnueabi -fuse-ld=ld -fsanitize=address \
228 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
229 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ARM
230 //
231 // CHECK-ASAN-ARM: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
232 // CHECK-ASAN-ARM-NOT: "-lc"
233 // CHECK-ASAN-ARM: libclang_rt.asan_static.a"
234 // CHECK-ASAN-ARM: libclang_rt.asan.a"
235 //
236 // RUN: %clang -### %s 2>&1 \
237 // RUN:     --target=armv7l-linux-gnueabi -fuse-ld=ld -fsanitize=address \
238 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
239 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ARMv7
240 //
241 // CHECK-ASAN-ARMv7: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
242 // CHECK-ASAN-ARMv7-NOT: "-lc"
243 // CHECK-ASAN-ARMv7: libclang_rt.asan_static.a"
244 // CHECK-ASAN-ARMv7: libclang_rt.asan.a"
245 
246 // RUN: %clang -### %s 2>&1 \
247 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=address \
248 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
249 // RUN:     -resource-dir=%S/Inputs/resource_dir \
250 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ANDROID
251 //
252 // CHECK-ASAN-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
253 // CHECK-ASAN-ANDROID: "-pie"
254 // CHECK-ASAN-ANDROID-NOT: "-lc"
255 // CHECK-ASAN-ANDROID-NOT: "-lpthread"
256 // CHECK-ASAN-ANDROID-NOT: "-lresolv"
257 // CHECK-ASAN-ANDROID: libclang_rt.asan.so"
258 // CHECK-ASAN-ANDROID: libclang_rt.asan_static.a"
259 // CHECK-ASAN-ANDROID-NOT: "-lpthread"
260 // CHECK-ASAN-ANDROID-NOT: "-lresolv"
261 
262 // RUN: %clang -### %s 2>&1 \
263 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=address \
264 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
265 // RUN:     -resource-dir=%S/Inputs/resource_dir \
266 // RUN:     -static-libsan \
267 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ANDROID-STATICLIBASAN
268 //
269 // RUN: %clang -### %s 2>&1 \
270 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=address \
271 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
272 // RUN:     -resource-dir=%S/Inputs/resource_dir \
273 // RUN:     -static-libasan \
274 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ANDROID-STATICLIBASAN
275 //
276 // CHECK-ASAN-ANDROID-STATICLIBASAN: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
277 // CHECK-ASAN-ANDROID-STATICLIBASAN: libclang_rt.asan_static.a"
278 // CHECK-ASAN-ANDROID-STATICLIBASAN: libclang_rt.asan.a"
279 // CHECK-ASAN-ANDROID-STATICLIBASAN-NOT: "-lpthread"
280 // CHECK-ASAN-ANDROID-STATICLIBASAN-NOT: "-lrt"
281 // CHECK-ASAN-ANDROID-STATICLIBASAN-NOT: "-lresolv"
282 
283 // RUN: %clang -### %s 2>&1 \
284 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=undefined \
285 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
286 // RUN:     -resource-dir=%S/Inputs/resource_dir \
287 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-ANDROID
288 //
289 // CHECK-UBSAN-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
290 // CHECK-UBSAN-ANDROID: "-pie"
291 // CHECK-UBSAN-ANDROID-NOT: "-lc"
292 // CHECK-UBSAN-ANDROID-NOT: "-lpthread"
293 // CHECK-UBSAN-ANDROID-NOT: "-lresolv"
294 // CHECK-UBSAN-ANDROID: libclang_rt.ubsan_standalone.so"
295 // CHECK-UBSAN-ANDROID-NOT: "-lpthread"
296 // CHECK-UBSAN-ANDROID-NOT: "-lresolv"
297 
298 // RUN: %clang -### %s 2>&1 \
299 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=undefined \
300 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
301 // RUN:     -resource-dir=%S/Inputs/resource_dir \
302 // RUN:     -static-libsan \
303 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-ANDROID-STATICLIBASAN
304 //
305 // CHECK-UBSAN-ANDROID-STATICLIBASAN: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
306 // CHECK-UBSAN-ANDROID-STATICLIBASAN: libclang_rt.ubsan_standalone.a"
307 // CHECK-UBSAN-ANDROID-STATICLIBASAN-NOT: "-lpthread"
308 // CHECK-UBSAN-ANDROID-STATICLIBASAN-NOT: "-lrt"
309 // CHECK-UBSAN-ANDROID-STATICLIBASAN-NOT: "-lresolv"
310 
311 //
312 // RUN: %clang -### %s 2>&1 \
313 // RUN:     --target=i686-linux-android -fuse-ld=ld -fsanitize=address \
314 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
315 // RUN:     -resource-dir=%S/Inputs/resource_dir \
316 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ANDROID-X86
317 //
318 // CHECK-ASAN-ANDROID-X86: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
319 // CHECK-ASAN-ANDROID-X86: "-pie"
320 // CHECK-ASAN-ANDROID-X86-NOT: "-lc"
321 // CHECK-ASAN-ANDROID-X86-NOT: "-lpthread"
322 // CHECK-ASAN-ANDROID-X86-NOT: "-lresolv"
323 // CHECK-ASAN-ANDROID-X86: libclang_rt.asan.so"
324 // CHECK-ASAN-ANDROID-X86: libclang_rt.asan_static.a"
325 // CHECK-ASAN-ANDROID-X86-NOT: "-lpthread"
326 // CHECK-ASAN-ANDROID-X86-NOT: "-lresolv"
327 //
328 // RUN: %clang -### %s 2>&1 \
329 // RUN:     --target=arm-linux-androideabi -fsanitize=address \
330 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
331 // RUN:     -shared-libsan \
332 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ANDROID-SHARED-LIBASAN
333 //
334 // CHECK-ASAN-ANDROID-SHARED-LIBASAN-NOT: argument unused during compilation: '-shared-libsan'
335 // CHECK-ASAN-ANDROID-SHARED-LIBASAN: libclang_rt.asan{{.*}}.so"
336 // CHECK-ASAN-ANDROID-SHARED-LIBASAN: libclang_rt.asan_static{{.*}}.a"
337 //
338 // RUN: %clang -### %s 2>&1 \
339 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=address \
340 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
341 // RUN:     -resource-dir=%S/Inputs/resource_dir \
342 // RUN:     -shared \
343 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-ANDROID-SHARED
344 //
345 // CHECK-ASAN-ANDROID-SHARED: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
346 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lc"
347 // CHECK-ASAN-ANDROID-SHARED: libclang_rt.asan.so"
348 // CHECK-ASAN-ANDROID-SHARED: libclang_rt.asan_static.a"
349 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lpthread"
350 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lresolv"
351 
352 
353 // RUN: %clangxx %s -### -o %t.o 2>&1 \
354 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -stdlib=platform -lstdc++ \
355 // RUN:     -fsanitize=type \
356 // RUN:     -resource-dir=%S/Inputs/resource_dir \
357 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
358 // RUN:   | %{filecheck} --check-prefix=CHECK-TYSAN-LINUX-CXX
359 //
360 // CHECK-TYSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
361 // CHECK-TYSAN-LINUX-CXX-NOT: stdc++
362 // CHECK-TYSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tysan{{[^.]*}}.a" "--no-whole-archive"
363 // CHECK-TYSAN-LINUX-CXX: stdc++
364 
365 // RUN: %clangxx -fsanitize=type -### %s 2>&1 \
366 // RUN:     -mmacosx-version-min=10.6 \
367 // RUN:     --target=x86_64-apple-darwin13.4.0 -fuse-ld=ld -stdlib=platform \
368 // RUN:     -resource-dir=%S/Inputs/resource_dir \
369 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
370 // RUN:   | %{filecheck} --check-prefix=CHECK-TYSAN-DARWIN-CXX
371 // CHECK-TYSAN-DARWIN-CXX: "{{.*}}ld{{(.exe)?}}"
372 // CHECK-TYSAN-DARWIN-CXX: libclang_rt.tysan_osx_dynamic.dylib
373 // CHECK-TYSAN-DARWIN-CXX-NOT: -lc++abi
374 
375 // RUN: %clangxx -### %s 2>&1 \
376 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -stdlib=platform -lstdc++ \
377 // RUN:     -fsanitize=thread \
378 // RUN:     -resource-dir=%S/Inputs/resource_dir \
379 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
380 // RUN:   | %{filecheck} --check-prefix=CHECK-TSAN-LINUX-CXX
381 //
382 // CHECK-TSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
383 // CHECK-TSAN-LINUX-CXX-NOT: stdc++
384 // CHECK-TSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tsan.a" "--no-whole-archive"
385 // CHECK-TSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan.a.syms"
386 // CHECK-TSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tsan_cxx.a" "--no-whole-archive"
387 // CHECK-TSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan_cxx.a.syms"
388 // CHECK-TSAN-LINUX-CXX-NOT: "--export-dynamic"
389 // CHECK-TSAN-LINUX-CXX: stdc++
390 // CHECK-TSAN-LINUX-CXX: "-lpthread"
391 // CHECK-TSAN-LINUX-CXX: "-lrt"
392 // CHECK-TSAN-LINUX-CXX: "-ldl"
393 // CHECK-TSAN-LINUX-CXX: "-lresolv"
394 
395 // RUN: %clang -fsanitize=thread -fno-sanitize-link-runtime -### %s 2>&1 \
396 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
397 // RUN:     -resource-dir=%S/Inputs/resource_dir \
398 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
399 // RUN:   | %{filecheck} --check-prefix=CHECK-TSAN-NO-LINK-RUNTIME-LINUX
400 //
401 // CHECK-TSAN-NO-LINK-RUNTIME-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
402 
403 // RUN: not %clang -fsanitize=thread -fno-sanitize-link-runtime -### %s 2>&1 \
404 // RUN:     --target=arm64e-apple-ios -fuse-ld=ld \
405 // RUN:     -resource-dir=%S/Inputs/resource_dir \
406 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
407 // RUN:   | %{filecheck} --check-prefix=CHECK-TSAN-NO-LINK-RUNTIME-DARWIN
408 //
409 // CHECK-TSAN-NO-LINK-RUNTIME-DARWIN: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
410 
411 // RUN: %clangxx -### %s 2>&1 \
412 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -stdlib=platform -lstdc++ \
413 // RUN:     -fsanitize=memory \
414 // RUN:     -resource-dir=%S/Inputs/resource_dir \
415 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
416 // RUN:   | %{filecheck} --check-prefix=CHECK-MSAN-LINUX-CXX
417 //
418 // CHECK-MSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
419 // CHECK-MSAN-LINUX-CXX-NOT: stdc++
420 // CHECK-MSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.msan.a" "--no-whole-archive"
421 // CHECK-MSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan.a.syms"
422 // CHECK-MSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.msan_cxx.a" "--no-whole-archive"
423 // CHECK-MSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan_cxx.a.syms"
424 // CHECK-MSAN-LINUX-CXX-NOT: "--export-dynamic"
425 // CHECK-MSAN-LINUX-CXX: stdc++
426 // CHECK-MSAN-LINUX-CXX: "-lpthread"
427 // CHECK-MSAN-LINUX-CXX: "-lrt"
428 // CHECK-MSAN-LINUX-CXX: "-ldl"
429 // CHECK-MSAN-LINUX-CXX: "-lresolv"
430 
431 // RUN: %clang -fsanitize=memory -fno-sanitize-link-runtime -### %s 2>&1 \
432 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
433 // RUN:     -resource-dir=%S/Inputs/resource_dir \
434 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
435 // RUN:   | %{filecheck} --check-prefix=CHECK-MSAN-NO-LINK-RUNTIME-LINUX
436 //
437 // CHECK-MSAN-NO-LINK-RUNTIME-LINUX: "{{.*}}ld{{(.exe)?}}"
438 
439 // RUN: %clang -fsanitize=undefined -### %s 2>&1 \
440 // RUN:     --target=x86_64-unknown-linux-gnux32 -fuse-ld=ld \
441 // RUN:     -resource-dir=%S/Inputs/resource_dir \
442 // RUN:     --sysroot=%S/Inputs/multilib_64bit_linux_tree \
443 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX
444 
445 // RUN: %clang -fsanitize=float-divide-by-zero -### %s 2>&1 \
446 // RUN:     --target=x86_64-unknown-linux-gnux32 -fuse-ld=ld \
447 // RUN:     -resource-dir=%S/Inputs/resource_dir \
448 // RUN:     --sysroot=%S/Inputs/multilib_64bit_linux_tree \
449 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX
450 
451 // RUN: %clang -fsanitize=undefined -### %s 2>&1 \
452 // RUN:     --target=x86_64-unknown-linux-gnux32 -fuse-ld=ld \
453 // RUN:     -resource-dir=%S/Inputs/resource_dir \
454 // RUN:     --sysroot=%S/Inputs/multilib_64bit_linux_tree \
455 // RUN:     -static-libsan \
456 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX
457 
458 // CHECK-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
459 // CHECK-UBSAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone.a" "--no-whole-archive"
460 // CHECK-UBSAN-LINUX-NOT: "-lstdc++"
461 // CHECK-UBSAN-LINUX: "-lpthread"
462 // CHECK-UBSAN-LINUX: "-lresolv"
463 
464 // RUN: %clang -fsanitize=undefined -fno-sanitize-link-runtime -### %s 2>&1 \
465 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
466 // RUN:     -resource-dir=%S/Inputs/resource_dir \
467 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
468 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-NO-LINK-RUNTIME-LINUX
469 //
470 // CHECK-UBSAN-NO-LINK-RUNTIME-LINUX: "{{.*}}ld{{(.exe)?}}"
471 
472 // RUN: %clang -fsanitize=undefined -fno-sanitize-link-runtime -### %s 2>&1 \
473 // RUN:     --target=x86_64-apple-darwin -fuse-ld=ld \
474 // RUN:     -resource-dir=%S/Inputs/resource_dir \
475 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
476 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-NO-LINK-RUNTIME-DARWIN
477 //
478 // CHECK-UBSAN-NO-LINK-RUNTIME-DARWIN: "{{.*}}ld{{(.exe)?}}"
479 
480 // RUN: %clang -fsanitize=fuzzer -fno-sanitize-link-runtime -### %s 2>&1 \
481 // RUN:     --target=arm64e-apple-watchos -fuse-ld=ld \
482 // RUN:     -resource-dir=%S/Inputs/resource_dir \
483 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
484 // RUN:   | %{filecheck} --check-prefix=CHECK-FUZZER-NO-LINK-RUNTIME-DARWIN
485 //
486 // CHECK-FUZZER-NO-LINK-RUNTIME-DARWIN: "{{.*}}ld{{(.exe)?}}"
487 
488 // RUN: %clang -fsanitize=undefined -### %s 2>&1 \
489 // RUN:     --target=i386-unknown-linux -fuse-ld=ld \
490 // RUN:     -resource-dir=%S/Inputs/resource_dir \
491 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
492 // RUN:     -shared-libsan \
493 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN
494 
495 // RUN: %clang -fsanitize=undefined -### %s 2>&1 \
496 // RUN:     --target=i386-unknown-linux -fuse-ld=ld \
497 // RUN:     -resource-dir=%S/Inputs/resource_dir \
498 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
499 // RUN:     -static-libsan -shared-libsan \
500 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN
501 
502 // RUN: %clang -fsanitize=undefined -### %s 2>&1 \
503 // RUN:     --target=i386-unknown-linux -fuse-ld=ld \
504 // RUN:     -resource-dir=%S/Inputs/resource_dir \
505 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
506 // RUN:     -shared -shared-libsan \
507 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX-SHAREDLIBASAN
508 
509 // CHECK-UBSAN-LINUX-SHAREDLIBASAN: "{{.*}}ld{{(.exe)?}}"
510 // CHECK-UBSAN-LINUX-SHAREDLIBASAN: "{{.*}}libclang_rt.ubsan_standalone.so{{.*}}"
511 
512 // RUN: %clang -fsanitize=undefined -fsanitize-link-c++-runtime -### %s 2>&1 \
513 // RUN:     --target=i386-unknown-linux \
514 // RUN:     -resource-dir=%S/Inputs/resource_dir \
515 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
516 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX-LINK-CXX
517 // CHECK-UBSAN-LINUX-LINK-CXX-NOT: "-lstdc++"
518 // CHECK-UBSAN-LINUX-LINK-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone_cxx.a" "--no-whole-archive"
519 // CHECK-UBSAN-LINUX-LINK-CXX-NOT: "-lstdc++"
520 
521 // RUN: %clangxx -fsanitize=undefined -### %s 2>&1 \
522 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform \
523 // RUN:     -resource-dir=%S/Inputs/resource_dir \
524 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
525 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX-CXX
526 // CHECK-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
527 // CHECK-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone.a" "--no-whole-archive"
528 // CHECK-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone_cxx.a" "--no-whole-archive"
529 // CHECK-UBSAN-LINUX-CXX: "-lstdc++"
530 // CHECK-UBSAN-LINUX-CXX: "-lpthread"
531 // CHECK-UBSAN-LINUX-CXX: "-lresolv"
532 
533 // RUN: %clang -fsanitize=undefined -fsanitize-minimal-runtime -### %s 2>&1 \
534 // RUN:     --target=i386-unknown-linux -fuse-ld=ld \
535 // RUN:     -resource-dir=%S/Inputs/resource_dir \
536 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
537 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-MINIMAL-LINUX
538 // CHECK-UBSAN-MINIMAL-LINUX: "{{.*}}ld{{(.exe)?}}"
539 // CHECK-UBSAN-MINIMAL-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_minimal.a" "--no-whole-archive"
540 // CHECK-UBSAN-MINIMAL-LINUX: "-lpthread"
541 // CHECK-UBSAN-MINIMAL-LINUX: "-lresolv"
542 
543 // RUN: %clang -fsanitize=undefined -fsanitize-minimal-runtime -### %s 2>&1 \
544 // RUN:     --target=x86_64-apple-darwin -fuse-ld=ld \
545 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
546 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-MINIMAL-DARWIN
547 // CHECK-UBSAN-MINIMAL-DARWIN: "{{.*}}ld{{(.exe)?}}"
548 // CHECK-UBSAN-MINIMAL-DARWIN: "{{.*}}libclang_rt.ubsan_minimal_osx_dynamic.dylib"
549 
550 // RUN: not %clang -fsanitize=undefined -### %s 2>&1 \
551 // RUN:     --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
552 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
553 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-STATIC-DARWIN
554 // CHECK-UBSAN-STATIC-DARWIN: {{.*}}error: static UndefinedBehaviorSanitizer runtime is not supported on darwin
555 
556 // RUN: not %clang -fsanitize=address -### %s 2>&1 \
557 // RUN:     --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
558 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
559 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-STATIC-DARWIN
560 // CHECK-ASAN-STATIC-DARWIN: {{.*}}error: static AddressSanitizer runtime is not supported on darwin
561 
562 // RUN: not %clang -fsanitize=thread -### %s 2>&1 \
563 // RUN:     --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
564 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
565 // RUN:   | %{filecheck} --check-prefix=CHECK-TSAN-STATIC-DARWIN
566 // CHECK-TSAN-STATIC-DARWIN: {{.*}}error: static ThreadSanitizer runtime is not supported on darwin
567 
568 // RUN: %clang -fsanitize=address,undefined -### %s 2>&1 \
569 // RUN:     --target=i386-unknown-linux -fuse-ld=ld \
570 // RUN:     -resource-dir=%S/Inputs/resource_dir \
571 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
572 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-UBSAN-LINUX
573 // CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
574 // CHECK-ASAN-UBSAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
575 // CHECK-ASAN-UBSAN-LINUX: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
576 // CHECK-ASAN-UBSAN-LINUX: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
577 // CHECK-ASAN-UBSAN-LINUX-NOT: "-lstdc++"
578 // CHECK-ASAN-UBSAN-LINUX: "-lpthread"
579 // CHECK-ASAN-UBSAN-LINUX: "-lresolv"
580 
581 // RUN: %clangxx -fsanitize=address,undefined -### %s 2>&1 \
582 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform \
583 // RUN:     -resource-dir=%S/Inputs/resource_dir \
584 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
585 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX
586 // CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
587 // CHECK-ASAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
588 // CHECK-ASAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
589 // CHECK-ASAN-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
590 // CHECK-ASAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan_cxx.a" "--no-whole-archive"
591 // CHECK-ASAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone_cxx.a" "--no-whole-archive"
592 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++"
593 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread"
594 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lresolv"
595 
596 // RUN: %clangxx -fsanitize=address,undefined -fno-sanitize=vptr -### %s 2>&1 \
597 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform \
598 // RUN:     -resource-dir=%S/Inputs/resource_dir \
599 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
600 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX
601 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
602 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan_static.a" "--no-whole-archive"
603 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
604 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX-SAME: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
605 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan_cxx.a" "--no-whole-archive"
606 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX-SAME: "-lstdc++"
607 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX-SAME: "-lpthread"
608 // CHECK-ASAN-UBSAN-NOVPTR-LINUX-CXX-SAME: "-lresolv"
609 
610 // RUN: %clangxx -fsanitize=memory,undefined -### %s 2>&1 \
611 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
612 // RUN:     -resource-dir=%S/Inputs/resource_dir \
613 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
614 // RUN:   | %{filecheck} --check-prefix=CHECK-MSAN-UBSAN-LINUX-CXX
615 // CHECK-MSAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
616 // CHECK-MSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.msan.a" "--no-whole-archive"
617 // CHECK-MSAN-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan.a.syms"
618 // CHECK-MSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.msan_cxx.a" "--no-whole-archive"
619 // CHECK-MSAN-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan_cxx.a.syms"
620 // CHECK-MSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone_cxx.a" "--no-whole-archive"
621 
622 // RUN: %clangxx -fsanitize=thread,undefined -### %s 2>&1 \
623 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
624 // RUN:     -resource-dir=%S/Inputs/resource_dir \
625 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
626 // RUN:   | %{filecheck} --check-prefix=CHECK-TSAN-UBSAN-LINUX-CXX
627 // CHECK-TSAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
628 // CHECK-TSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tsan.a" "--no-whole-archive"
629 // CHECK-TSAN-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan.a.syms"
630 // CHECK-TSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.tsan_cxx.a" "--no-whole-archive"
631 // CHECK-TSAN-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan_cxx.a.syms"
632 // CHECK-TSAN-UBSAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone_cxx.a" "--no-whole-archive"
633 
634 // RUN: %clang -fsanitize=undefined -### %s 2>&1 \
635 // RUN:     --target=i386-unknown-linux -fuse-ld=ld \
636 // RUN:     -resource-dir=%S/Inputs/resource_dir \
637 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
638 // RUN:     -shared \
639 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-LINUX-SHARED
640 // CHECK-UBSAN-LINUX-SHARED: "{{.*}}ld{{(.exe)?}}"
641 // CHECK-UBSAN-LINUX-SHARED-NOT: --export-dynamic
642 // CHECK-UBSAN-LINUX-SHARED-NOT: --dynamic-list
643 
644 // RUN: %clang -### %s 2>&1 \
645 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=leak \
646 // RUN:     -resource-dir=%S/Inputs/resource_dir \
647 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
648 // RUN:   | %{filecheck} --check-prefix=CHECK-LSAN-LINUX
649 //
650 // CHECK-LSAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
651 // CHECK-LSAN-LINUX-NOT: "-lc"
652 // CHECK-LSAN-LINUX: libclang_rt.lsan.a"
653 // CHECK-LSAN-LINUX: "-lpthread"
654 // CHECK-LSAN-LINUX: "-ldl"
655 // CHECK-LSAN-LINUX: "-lresolv"
656 
657 // RUN: %clang -fsanitize=leak -fno-sanitize-link-runtime -### %s 2>&1 \
658 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
659 // RUN:     -resource-dir=%S/Inputs/resource_dir \
660 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
661 // RUN:   | %{filecheck} --check-prefix=CHECK-LSAN-NO-LINK-RUNTIME-LINUX
662 //
663 // CHECK-LSAN-NO-LINK-RUNTIME-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
664 
665 // RUN: %clang -### %s 2>&1 \
666 // RUN:  --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=leak -fsanitize-coverage=func \
667 // RUN:  -resource-dir=%S/Inputs/resource_dir \
668 // RUN:  --sysroot=%S/Inputs/basic_linux_tree \
669 // RUN:   | %{filecheck} --check-prefix=CHECK-LSAN-COV-LINUX
670 //
671 // CHECK-LSAN-COV-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
672 // CHECK-LSAN-COV-LINUX-NOT: "-lc"
673 // CHECK-LSAN-COV-LINUX: libclang_rt.lsan.a
674 // CHECK-LSAV-COV-LINUX: libclang_rt.lsan-x86_64.a"
675 // CHECK-LSAN-COV-LINUX: "-lpthread"
676 // CHECK-LSAN-COV-LINUX: "-ldl"
677 // CHECK-LSAN-COV-LINUX: "-lresolv"
678 
679 // RUN: %clang -fsanitize=leak,address -### %s 2>&1 \
680 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
681 // RUN:     -resource-dir=%S/Inputs/resource_dir \
682 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
683 // RUN:   | %{filecheck} --check-prefix=CHECK-LSAN-ASAN-LINUX
684 // CHECK-LSAN-ASAN-LINUX: "{{.*}}ld{{(.exe)?}}"
685 // CHECK-LSAN-ASAN-LINUX: libclang_rt.asan_static
686 // CHECK-LSAN-ASAN-LINUX: libclang_rt.asan
687 // CHECK-LSAN-ASAN-LINUX: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
688 
689 // RUN: %clang -fsanitize=address -fsanitize-coverage=func -### %s 2>&1 \
690 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
691 // RUN:     -resource-dir=%S/Inputs/resource_dir \
692 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
693 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-COV-LINUX
694 // CHECK-ASAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
695 // CHECK-ASAN-COV-LINUX: libclang_rt.asan_static
696 // CHECK-ASAN-COV-LINUX: libclang_rt.asan
697 // CHECK-ASAN-COV-LINUX: "--dynamic-list={{.*}}libclang_rt.asan.a.syms"
698 // CHECK-ASAN-COV-LINUX-NOT: "-lstdc++"
699 // CHECK-ASAN-COV-LINUX: "-lpthread"
700 // CHECK-ASAN-COV-LINUX: "-lresolv"
701 
702 // RUN: %clang -fsanitize=memory -fsanitize-coverage=func -### %s 2>&1 \
703 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
704 // RUN:     -resource-dir=%S/Inputs/resource_dir \
705 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
706 // RUN:   | %{filecheck} --check-prefix=CHECK-MSAN-COV-LINUX
707 // CHECK-MSAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
708 // CHECK-MSAN-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.msan.a" "--no-whole-archive"
709 // CHECK-MSAN-COV-LINUX: "--dynamic-list={{.*}}libclang_rt.msan.a.syms"
710 // CHECK-MSAN-COV-LINUX-NOT: "-lstdc++"
711 // CHECK-MSAN-COV-LINUX: "-lpthread"
712 // CHECK-MSAN-COV-LINUX: "-lresolv"
713 
714 // RUN: %clang -fsanitize=dataflow -fsanitize-coverage=func -### %s 2>&1 \
715 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
716 // RUN:     -resource-dir=%S/Inputs/resource_dir \
717 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
718 // RUN:   | %{filecheck} --check-prefix=CHECK-DFSAN-COV-LINUX
719 // CHECK-DFSAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
720 // CHECK-DFSAN-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.dfsan.a" "--no-whole-archive"
721 // CHECK-DFSAN-COV-LINUX-NOT: "-lstdc++"
722 // CHECK-DFSAN-COV-LINUX: "-lpthread"
723 // CHECK-DFSAN-COV-LINUX: "-lresolv"
724 
725 // RUN: %clang -fsanitize=undefined -fsanitize-coverage=func -### %s 2>&1 \
726 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
727 // RUN:     -resource-dir=%S/Inputs/resource_dir \
728 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
729 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-COV-LINUX
730 // CHECK-UBSAN-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
731 // CHECK-UBSAN-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone.a" "--no-whole-archive"
732 // CHECK-UBSAN-COV-LINUX-NOT: "-lstdc++"
733 // CHECK-UBSAN-COV-LINUX: "-lpthread"
734 // CHECK-UBSAN-COV-LINUX: "-lresolv"
735 
736 // RUN: %clang -fsanitize-coverage=func -### %s 2>&1 \
737 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
738 // RUN:     -resource-dir=%S/Inputs/resource_dir \
739 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
740 // RUN:   | %{filecheck} --check-prefix=CHECK-COV-LINUX
741 // CHECK-COV-LINUX: "{{.*}}ld{{(.exe)?}}"
742 // CHECK-COV-LINUX: "--whole-archive" "{{.*}}libclang_rt.ubsan_standalone.a" "--no-whole-archive"
743 // CHECK-COV-LINUX-NOT: "-lstdc++"
744 // CHECK-COV-LINUX: "-lpthread"
745 // CHECK-COV-LINUX: "-lresolv"
746 
747 // RUN: %clang -### %s 2>&1 \
748 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=numerical \
749 // RUN:     -resource-dir=%S/Inputs/resource_dir \
750 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
751 // RUN:   | %{filecheck} --check-prefix=CHECK-NSAN-LINUX
752 //
753 // CHECK-NSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
754 // CHECK-NSAN-LINUX-NOT: "-lc"
755 // CHECK-NSAN-LINUX: libclang_rt.nsan.a"
756 // CHECK-NSAN-LINUX: "-lpthread" "-lrt" "-lm" "-ldl" "-lresolv"
757 
758 // RUN: %clang -### %s 2>&1 --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=numerical -shared-libsan \
759 // RUN:     -resource-dir=%S/Inputs/resource_dir \
760 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
761 // RUN:   | %{filecheck} --check-prefix=CHECK-NSAN-SHARED-LINUX
762 
763 // CHECK-NSAN-SHARED-LINUX: libclang_rt.nsan.so"
764 // CHECK-NSAN-SHARED-LINUX-NOT: "-lpthread"
765 // CHECK-NSAN-SHARED-LINUX-NOT: "-ldl"
766 // CHECK-NSAN-SHARED-LINUX-NOT: "--dynamic-list
767 
768 // RUN: %clang -### %s 2>&1 --target=x86_64-unknown-linux -fsanitize=numerical,undefined \
769 // RUN:     -resource-dir=%S/Inputs/resource_dir \
770 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
771 // RUN:   | %{filecheck} --check-prefix=CHECK-NSAN-UBSAN
772 
773 // CHECK-NSAN-UBSAN: "--whole-archive" "{{[^"]*}}libclang_rt.nsan.a" "--no-whole-archive"
774 
775 // CFI by itself does not link runtime libraries.
776 // RUN: not %clang -fsanitize=cfi -### %s 2>&1 \
777 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -rtlib=platform \
778 // RUN:     -resource-dir=%S/Inputs/resource_dir \
779 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
780 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-LINUX
781 // CHECK-CFI-LINUX: "{{.*}}ld{{(.exe)?}}"
782 
783 // CFI with diagnostics links the UBSan runtime.
784 // RUN: not %clang -fsanitize=cfi -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
785 // RUN:     -### %s 2>&1\
786 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
787 // RUN:     -resource-dir=%S/Inputs/resource_dir \
788 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
789 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-DIAG-LINUX
790 // CHECK-CFI-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}"
791 // CHECK-CFI-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.ubsan_standalone.a" "--no-whole-archive"
792 
793 // Cross-DSO CFI links the CFI runtime.
794 // RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \
795 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
796 // RUN:     -resource-dir=%S/Inputs/resource_dir \
797 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
798 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-LINUX
799 // CHECK-CFI-CROSS-DSO-LINUX: "{{.*}}ld{{(.exe)?}}"
800 // CHECK-CFI-CROSS-DSO-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi.a" "--no-whole-archive"
801 // CHECK-CFI-CROSS-DSO-LINUX: -export-dynamic
802 
803 // Cross-DSO CFI with diagnostics links just the CFI runtime.
804 // RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \
805 // RUN:     -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
806 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
807 // RUN:     -resource-dir=%S/Inputs/resource_dir \
808 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
809 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-DIAG-LINUX
810 // CHECK-CFI-CROSS-DSO-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}"
811 // CHECK-CFI-CROSS-DSO-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi_diag.a" "--no-whole-archive"
812 // CHECK-CFI-CROSS-DSO-DIAG-LINUX: -export-dynamic
813 
814 // Cross-DSO CFI on Android does not link runtime libraries.
815 // RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \
816 // RUN:     --target=aarch64-linux-android -fuse-ld=ld \
817 // RUN:     -resource-dir=%S/Inputs/resource_dir \
818 // RUN:     --sysroot=%S/Inputs/basic_android_tree \
819 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-ANDROID
820 // CHECK-CFI-CROSS-DSO-ANDROID: "{{.*}}ld{{(.exe)?}}"
821 
822 // Cross-DSO CFI with diagnostics on Android links just the UBSAN runtime.
823 // RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \
824 // RUN:     -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
825 // RUN:     --target=aarch64-linux-android -fuse-ld=ld \
826 // RUN:     -resource-dir=%S/Inputs/resource_dir \
827 // RUN:     --sysroot=%S/Inputs/basic_android_tree \
828 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-DIAG-ANDROID
829 // CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{.*}}ld{{(.exe)?}}"
830 // CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{[^"]*}}libclang_rt.ubsan_standalone.so"
831 // CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "--export-dynamic-symbol=__cfi_check"
832 
833 // RUN: %clangxx -fsanitize=address -### %s 2>&1 \
834 // RUN:     -mmacos-version-min=10.6 \
835 // RUN:     --target=x86_64-apple-darwin13.4.0 -fuse-ld=ld -stdlib=platform \
836 // RUN:     -resource-dir=%S/Inputs/resource_dir \
837 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
838 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-DARWIN106-CXX
839 // CHECK-ASAN-DARWIN106-CXX: "{{.*}}ld{{(.exe)?}}"
840 // CHECK-ASAN-DARWIN106-CXX: libclang_rt.asan_osx_dynamic.dylib
841 // CHECK-ASAN-DARWIN106-CXX-NOT: -lc++abi
842 
843 // RUN: %clangxx -fsanitize=leak -### %s 2>&1 \
844 // RUN:     -mmacos-version-min=10.6 \
845 // RUN:     --target=x86_64-apple-darwin13.4.0 -fuse-ld=ld -stdlib=platform \
846 // RUN:     -resource-dir=%S/Inputs/resource_dir \
847 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
848 // RUN:   | %{filecheck} --check-prefix=CHECK-LSAN-DARWIN106-CXX
849 // CHECK-LSAN-DARWIN106-CXX: "{{.*}}ld{{(.exe)?}}"
850 // CHECK-LSAN-DARWIN106-CXX: libclang_rt.lsan_osx_dynamic.dylib
851 // CHECK-LSAN-DARWIN106-CXX-NOT: -lc++abi
852 
853 // RUN: %clang -### %s 2>&1 \
854 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=safe-stack \
855 // RUN:     -resource-dir=%S/Inputs/resource_dir \
856 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
857 // RUN:   | %{filecheck} --check-prefix=CHECK-SAFESTACK-LINUX
858 //
859 // CHECK-SAFESTACK-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
860 // CHECK-SAFESTACK-LINUX-NOT: "-lc"
861 // CHECK-SAFESTACK-LINUX-NOT: whole-archive
862 // CHECK-SAFESTACK-LINUX: "-u" "__safestack_init"
863 // CHECK-SAFESTACK-LINUX: libclang_rt.safestack.a"
864 // CHECK-SAFESTACK-LINUX: "-lpthread"
865 // CHECK-SAFESTACK-LINUX: "-ldl"
866 // CHECK-SAFESTACK-LINUX: "-lresolv"
867 
868 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
869 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
870 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-X86-64
871 // CHECK-SHADOWCALLSTACK-LINUX-X86-64-NOT: error:
872 // CHECK-SHADOWCALLSTACK-LINUX-X86-64: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
873 
874 // RUN: not %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
875 // RUN:     --target=aarch64-unknown-linux -fuse-ld=ld \
876 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64
877 // CHECK-SHADOWCALLSTACK-LINUX-AARCH64: '-fsanitize=shadow-call-stack' only allowed with '-ffixed-x18'
878 
879 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
880 // RUN:     --target=riscv32-unknown-elf -fuse-ld=ld \
881 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-ELF-RISCV32
882 // CHECK-SHADOWCALLSTACK-ELF-RISCV32-NOT: error:
883 // CHECK-SHADOWCALLSTACK-ELF-RISCV32: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
884 
885 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
886 // RUN:     --target=riscv64-unknown-linux -fuse-ld=ld \
887 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-RISCV64
888 // CHECK-SHADOWCALLSTACK-LINUX-RISCV64-NOT: error:
889 // CHECK-SHADOWCALLSTACK-LINUX-RISCV64: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
890 
891 // RUN: %clang -target riscv64-linux-android -fsanitize=shadow-call-stack %s -### 2>&1 \
892 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-ANDROID-RISCV64
893 // CHECK-SHADOWCALLSTACK-ANDROID-RISCV64-NOT: error:
894 // CHECK-SHADOWCALLSTACK-ANDROID-RISCV64: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
895 
896 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
897 // RUN:     --target=riscv64-unknown-fuchsia -fuse-ld=ld \
898 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-FUCHSIA-RISCV64
899 // CHECK-SHADOWCALLSTACK-FUCHSIA-RISCV64-NOT: error:
900 // CHECK-SHADOWCALLSTACK-FUCHSIA-RISCV64: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
901 
902 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
903 // RUN:     --target=aarch64-unknown-linux -fuse-ld=ld -ffixed-x18 \
904 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18
905 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
906 // RUN:     --target=arm64-unknown-ios -fuse-ld=ld \
907 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18
908 // CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18-NOT: error:
909 // CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
910 
911 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
912 // RUN:     --target=aarch64-unknown-linux-android -fuse-ld=ld \
913 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18-ANDROID
914 // CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18-ANDROID-NOT: error:
915 // CHECK-SHADOWCALLSTACK-LINUX-AARCH64-X18-ANDROID: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
916 
917 // RUN: not %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
918 // RUN:     --target=x86-unknown-linux -fuse-ld=ld \
919 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-LINUX-X86
920 // CHECK-SHADOWCALLSTACK-LINUX-X86: error: unsupported option '-fsanitize=shadow-call-stack' for target 'x86-unknown-linux'
921 
922 // RUN: %clang -fsanitize=shadow-call-stack -### %s 2>&1 \
923 // RUN:     -fsanitize=safe-stack --target=x86_64-unknown-linux -fuse-ld=ld \
924 // RUN:   | %{filecheck} --check-prefix=CHECK-SHADOWCALLSTACK-SAFESTACK
925 // CHECK-SHADOWCALLSTACK-SAFESTACK-NOT: error:
926 // CHECK-SHADOWCALLSTACK-SAFESTACK: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
927 // CHECK-SHADOWCALLSTACK-SAFESTACK: libclang_rt.safestack.a
928 
929 // RUN: not %clang -fsanitize=cfi -fsanitize-stats -### %s 2>&1 \
930 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld \
931 // RUN:     -resource-dir=%S/Inputs/resource_dir \
932 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
933 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-STATS-LINUX
934 // CHECK-CFI-STATS-LINUX: "{{.*}}ld{{(.exe)?}}"
935 // CHECK-CFI-STATS-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.stats_client.a" "--no-whole-archive"
936 // CHECK-CFI-STATS-LINUX-NOT: "--whole-archive"
937 // CHECK-CFI-STATS-LINUX: "{{[^"]*}}libclang_rt.stats.a"
938 
939 // RUN: not %clang -fsanitize=cfi -fsanitize-stats -### %s 2>&1 \
940 // RUN:     --target=x86_64-apple-darwin -fuse-ld=ld \
941 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
942 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-STATS-DARWIN
943 // CHECK-CFI-STATS-DARWIN: "{{.*}}ld{{(.exe)?}}"
944 // CHECK-CFI-STATS-DARWIN: "{{[^"]*}}libclang_rt.stats_client_osx.a"
945 // CHECK-CFI-STATS-DARWIN: "{{[^"]*}}libclang_rt.stats_osx_dynamic.dylib"
946 
947 // RUN: not %clang -fsanitize=cfi -fsanitize-stats -### %s 2>&1 \
948 // RUN:     --target=x86_64-pc-windows \
949 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
950 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-STATS-WIN64
951 // CHECK-CFI-STATS-WIN64: "--dependent-lib=clang_rt.stats_client{{(-x86_64)?}}.lib"
952 // CHECK-CFI-STATS-WIN64: "--dependent-lib=clang_rt.stats{{(-x86_64)?}}.lib"
953 // CHECK-CFI-STATS-WIN64: "--linker-option=/include:__sanitizer_stats_register"
954 
955 // RUN: not %clang -fsanitize=cfi -fsanitize-stats -### %s 2>&1 \
956 // RUN:     --target=i686-pc-windows \
957 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
958 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-STATS-WIN32
959 // RUN: not %clang -fsanitize=cfi -fsanitize-stats -### %s 2>&1 \
960 // RUN:     --target=i686-pc-windows \
961 // RUN:     -fno-rtlib-defaultlib \
962 // RUN:     -frtlib-defaultlib \
963 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
964 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-STATS-WIN32
965 // CHECK-CFI-STATS-WIN32: "--dependent-lib=clang_rt.stats_client{{(-i386)?}}.lib"
966 // CHECK-CFI-STATS-WIN32: "--dependent-lib=clang_rt.stats{{(-i386)?}}.lib"
967 // CHECK-CFI-STATS-WIN32: "--linker-option=/include:___sanitizer_stats_register"
968 
969 // RUN: not %clang -fsanitize=cfi -fsanitize-stats -### %s 2>&1 \
970 // RUN:     --target=i686-pc-windows \
971 // RUN:     -fno-rtlib-defaultlib \
972 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
973 // RUN:   | %{filecheck} --check-prefix=CHECK-CFI-STATS-WIN32-NODEF
974 // CHECK-CFI-STATS-WIN32-NODEF-NOT: "--dependent-lib=clang_rt.stats_client{{(-i386)?}}.lib"
975 // CHECK-CFI-STATS-WIN32-NODEF-NOT: "--dependent-lib=clang_rt.stats{{(-i386)?}}.lib"
976 
977 // RUN: %clang -### %s 2>&1 \
978 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=safe-stack \
979 // RUN:     --sysroot=%S/Inputs/basic_android_tree \
980 // RUN:   | %{filecheck} --check-prefix=CHECK-SAFESTACK-ANDROID-ARM
981 //
982 // CHECK-SAFESTACK-ANDROID-ARM: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
983 
984 // RUN: %clang -### %s -shared 2>&1 \
985 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=safe-stack \
986 // RUN:     --sysroot=%S/Inputs/basic_android_tree \
987 // RUN:   | %{filecheck} --check-prefix=CHECK-SAFESTACK-SHARED-ANDROID-ARM
988 //
989 // CHECK-SAFESTACK-SHARED-ANDROID-ARM: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
990 
991 // RUN: %clang -### %s 2>&1 \
992 // RUN:     --target=aarch64-linux-android -fuse-ld=ld -fsanitize=safe-stack \
993 // RUN:     --sysroot=%S/Inputs/basic_android_tree \
994 // RUN:   | %{filecheck} --check-prefix=CHECK-SAFESTACK-ANDROID-AARCH64
995 //
996 // CHECK-SAFESTACK-ANDROID-AARCH64: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
997 
998 // RUN: not %clang -fsanitize=undefined -### %s 2>&1 \
999 // RUN:     --target=x86_64-scei-ps4 -fuse-ld=ld \
1000 // RUN:     -shared \
1001 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-PS4
1002 // CHECK-UBSAN-PS4: --dependent-lib=libSceDbgUBSanitizer_stub_weak.a
1003 // CHECK-UBSAN-PS4: "{{.*}}ld{{(.gold)?(.exe)?}}"
1004 // CHECK-UBSAN-PS4: -lSceDbgUBSanitizer_stub_weak
1005 
1006 // RUN: not %clang -fsanitize=undefined -### %s 2>&1 \
1007 // RUN:     --target=x86_64-sie-ps5 -fuse-ld=ld \
1008 // RUN:     -shared \
1009 // RUN:   | %{filecheck} --check-prefix=CHECK-UBSAN-PS5
1010 // CHECK-UBSAN-PS5: --dependent-lib=libSceUBSanitizer_nosubmission_stub_weak.a
1011 // CHECK-UBSAN-PS5: "{{.*}}ld{{(.gold)?(.exe)?}}"
1012 // CHECK-UBSAN-PS5: -lSceUBSanitizer_nosubmission_stub_weak
1013 
1014 // RUN: not %clang -fsanitize=address -### %s 2>&1 \
1015 // RUN:     --target=x86_64-scei-ps4 -fuse-ld=ld \
1016 // RUN:     -shared \
1017 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-PS4
1018 // CHECK-ASAN-PS4: --dependent-lib=libSceDbgAddressSanitizer_stub_weak.a
1019 // CHECK-ASAN-PS4: "{{.*}}ld{{(.gold)?(.exe)?}}"
1020 // CHECK-ASAN-PS4: -lSceDbgAddressSanitizer_stub_weak
1021 
1022 // RUN: not %clang -fsanitize=address -### %s 2>&1 \
1023 // RUN:     --target=x86_64-sie-ps5 -fuse-ld=ld \
1024 // RUN:     -shared \
1025 // RUN:   | %{filecheck} --check-prefix=CHECK-ASAN-PS5
1026 // CHECK-ASAN-PS5: --dependent-lib=libSceAddressSanitizer_nosubmission_stub_weak.a
1027 // CHECK-ASAN-PS5: "{{.*}}ld{{(.gold)?(.exe)?}}"
1028 // CHECK-ASAN-PS5: -lSceAddressSanitizer_nosubmission_stub_weak
1029 
1030 // RUN: not %clang -fsanitize=address,undefined -### %s 2>&1 \
1031 // RUN:     --target=x86_64-scei-ps4 -fuse-ld=ld \
1032 // RUN:     -shared \
1033 // RUN:   | %{filecheck} --check-prefix=CHECK-AUBSAN-PS4
1034 // CHECK-AUBSAN-PS4-NOT: --dependent-lib=libSceDbgUBSanitizer_stub_weak.a
1035 // CHECK-AUBSAN-PS4: --dependent-lib=libSceDbgAddressSanitizer_stub_weak.a
1036 // CHECK-AUBSAN-PS4-NOT: --dependent-lib=libSceDbgUBSanitizer_stub_weak.a
1037 // CHECK-AUBSAN-PS4: "{{.*}}ld{{(.gold)?(.exe)?}}"
1038 // CHECK-AUBSAN-PS4: -lSceDbgAddressSanitizer_stub_weak
1039 
1040 // RUN: not %clang -fsanitize=address,undefined -### %s 2>&1 \
1041 // RUN:     --target=x86_64-sie-ps5 -fuse-ld=ld \
1042 // RUN:     -shared \
1043 // RUN:   | %{filecheck} --check-prefix=CHECK-AUBSAN-PS5
1044 // CHECK-AUBSAN-PS5-NOT: --dependent-lib=libSceUBSanitizer_nosubmission_stub_weak.a
1045 // CHECK-AUBSAN-PS5: --dependent-lib=libSceAddressSanitizer_nosubmission_stub_weak.a
1046 // CHECK-AUBSAN-PS5-NOT: --dependent-lib=libSceUBSanitizer_nosubmission_stub_weak.a
1047 // CHECK-AUBSAN-PS5: "{{.*}}ld{{(.gold)?(.exe)?}}"
1048 // CHECK-AUBSAN-PS5: -lSceAddressSanitizer_nosubmission_stub_weak
1049 
1050 // RUN: not %clang -fsanitize=address,undefined -### %s 2>&1 \
1051 // RUN:     --target=x86_64-scei-ps4 -fuse-ld=ld \
1052 // RUN:     -shared \
1053 // RUN:     -nostdlib \
1054 // RUN:   | %{filecheck} --check-prefix=CHECK-NOLIB-PS4
1055 // CHECK-NOLIB-PS4-NOT: SceDbgAddressSanitizer_stub_weak
1056 
1057 // RUN: not %clang -fsanitize=address,undefined -### %s 2>&1 \
1058 // RUN:     --target=x86_64-sie-ps5 -fuse-ld=ld \
1059 // RUN:     -shared \
1060 // RUN:     -nostdlib \
1061 // RUN:   | %{filecheck} --check-prefix=CHECK-NOLIB-PS5
1062 // CHECK-NOLIB-PS5-NOT: SceAddressSanitizer_nosubmission_stub_weak
1063 
1064 // RUN: %clang -fsanitize=scudo -### %s 2>&1 \
1065 // RUN:     --target=i386-unknown-linux -fuse-ld=ld \
1066 // RUN:     -resource-dir=%S/Inputs/resource_dir \
1067 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1068 // RUN:   | %{filecheck} --check-prefix=CHECK-SCUDO-LINUX
1069 // CHECK-SCUDO-LINUX: "{{.*}}ld{{(.exe)?}}"
1070 // CHECK-SCUDO-LINUX: "--whole-archive" "{{.*}}libclang_rt.scudo_standalone.a" "--no-whole-archive"
1071 // CHECK-SCUDO-LINUX-NOT: "-lstdc++"
1072 // CHECK-SCUDO-LINUX: "-lpthread"
1073 // CHECK-SCUDO-LINUX: "-ldl"
1074 // CHECK-SCUDO-LINUX: "-lresolv"
1075 
1076 // RUN: %clang -### %s -o %t.so -shared 2>&1 \
1077 // RUN:     --target=i386-unknown-linux -fuse-ld=ld -fsanitize=scudo -shared-libsan \
1078 // RUN:     -resource-dir=%S/Inputs/resource_dir \
1079 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1080 // RUN:   | %{filecheck} --check-prefix=CHECK-SCUDO-SHARED-LINUX
1081 //
1082 // CHECK-SCUDO-SHARED-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
1083 // CHECK-SCUDO-SHARED-LINUX-NOT: "-lc"
1084 // CHECK-SCUDO-SHARED-LINUX: libclang_rt.scudo_standalone.so"
1085 // CHECK-SCUDO-SHARED-LINUX-NOT: "-lpthread"
1086 // CHECK-SCUDO-SHARED-LINUX-NOT: "-lrt"
1087 // CHECK-SCUDO-SHARED-LINUX-NOT: "-ldl"
1088 // CHECK-SCUDO-SHARED-LINUX-NOT: "-lresolv"
1089 // CHECK-SCUDO-SHARED-LINUX-NOT: "--export-dynamic"
1090 // CHECK-SCUDO-SHARED-LINUX-NOT: "--dynamic-list"
1091 
1092 // RUN: %clang -### %s 2>&1 \
1093 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=scudo \
1094 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
1095 // RUN:   | %{filecheck} --check-prefix=CHECK-SCUDO-ANDROID
1096 //
1097 // CHECK-SCUDO-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
1098 // CHECK-SCUDO-ANDROID-NOT: "-lc"
1099 // CHECK-SCUDO-ANDROID: "-pie"
1100 // CHECK-SCUDO-ANDROID-NOT: "-lpthread"
1101 // CHECK-SCUDO-ANDROID-NOT: "-lresolv"
1102 // CHECK-SCUDO-ANDROID: libclang_rt.scudo_standalone.so"
1103 // CHECK-SCUDO-ANDROID-NOT: "-lpthread"
1104 // CHECK-SCUDO-ANDROID-NOT: "-lresolv"
1105 
1106 // RUN: %clang -### %s 2>&1 \
1107 // RUN:     --target=arm-linux-androideabi -fuse-ld=ld -fsanitize=scudo \
1108 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
1109 // RUN:     -static-libsan \
1110 // RUN:   | %{filecheck} --check-prefix=CHECK-SCUDO-ANDROID-STATIC
1111 // CHECK-SCUDO-ANDROID-STATIC: "{{(.*[^.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
1112 // CHECK-SCUDO-ANDROID-STATIC: "-pie"
1113 // CHECK-SCUDO-ANDROID-STATIC: "--whole-archive" "{{.*}}libclang_rt.scudo_standalone.a" "--no-whole-archive"
1114 // CHECK-SCUDO-ANDROID-STATIC-NOT: "-lstdc++"
1115 // CHECK-SCUDO-ANDROID-STATIC-NOT: "-lpthread"
1116 // CHECK-SCUDO-ANDROID-STATIC-NOT: "-lrt"
1117 // CHECK-SCUDO-ANDROID-STATIC-NOT: "-lresolv"
1118 
1119 // RUN: %clang -### %s 2>&1 \
1120 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
1121 // RUN:     -resource-dir=%S/Inputs/resource_dir \
1122 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1123 // RUN:   | %{filecheck} --check-prefix=CHECK-HWASAN-X86-64-LINUX
1124 //
1125 // CHECK-HWASAN-X86-64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
1126 // CHECK-HWASAN-X86-64-LINUX-NOT: "-lc"
1127 // CHECK-HWASAN-X86-64-LINUX: libclang_rt.hwasan.a"
1128 // CHECK-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
1129 // CHECK-HWASAN-X86-64-LINUX: "--dynamic-list={{.*}}libclang_rt.hwasan.a.syms"
1130 // CHECK-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
1131 // CHECK-HWASAN-X86-64-LINUX: "-lpthread"
1132 // CHECK-HWASAN-X86-64-LINUX: "-lrt"
1133 // CHECK-HWASAN-X86-64-LINUX: "-ldl"
1134 // CHECK-HWASAN-X86-64-LINUX: "-lresolv"
1135 
1136 // RUN: %clang -### %s 2>&1 \
1137 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
1138 // RUN:     -shared-libsan -resource-dir=%S/Inputs/resource_dir \
1139 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1140 // RUN:   | %{filecheck} --check-prefix=CHECK-SHARED-HWASAN-X86-64-LINUX
1141 //
1142 // CHECK-SHARED-HWASAN-X86-64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
1143 // CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-lc"
1144 // CHECK-SHARED-HWASAN-X86-64-LINUX: libclang_rt.hwasan.so"
1145 // CHECK-SHARED-HWASAN-X86-64-LINUX: libclang_rt.hwasan-preinit.a"
1146 // CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-lpthread"
1147 // CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-lrt"
1148 // CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-ldl"
1149 // CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "-lresolv"
1150 // CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
1151 // CHECK-SHARED-HWASAN-X86-64-LINUX-NOT: "--dynamic-list"
1152 
1153 // RUN: %clang -### %s -o %t.so -shared 2>&1 \
1154 // RUN:     --target=x86_64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
1155 // RUN:     -shared-libsan -resource-dir=%S/Inputs/resource_dir \
1156 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1157 // RUN:   | %{filecheck} --check-prefix=CHECK-DSO-SHARED-HWASAN-X86-64-LINUX
1158 //
1159 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
1160 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-lc"
1161 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX: libclang_rt.hwasan.so"
1162 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-lpthread"
1163 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-lrt"
1164 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-ldl"
1165 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "-lresolv"
1166 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "--export-dynamic"
1167 // CHECK-DSO-SHARED-HWASAN-X86-64-LINUX-NOT: "--dynamic-list"
1168 
1169 // RUN: %clang -### %s 2>&1 \
1170 // RUN:     --target=aarch64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
1171 // RUN:     -resource-dir=%S/Inputs/resource_dir \
1172 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1173 // RUN:   | %{filecheck} --check-prefix=CHECK-HWASAN-AARCH64-LINUX
1174 //
1175 // CHECK-HWASAN-AARCH64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
1176 // CHECK-HWASAN-AARCH64-LINUX-NOT: "-lc"
1177 // CHECK-HWASAN-AARCH64-LINUX: libclang_rt.hwasan.a"
1178 // CHECK-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
1179 // CHECK-HWASAN-AARCH64-LINUX: "--dynamic-list={{.*}}libclang_rt.hwasan.a.syms"
1180 // CHECK-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
1181 // CHECK-HWASAN-AARCH64-LINUX: "-lpthread"
1182 // CHECK-HWASAN-AARCH64-LINUX: "-lrt"
1183 // CHECK-HWASAN-AARCH64-LINUX: "-ldl"
1184 // CHECK-HWASAN-AARCH64-LINUX: "-lresolv"
1185 
1186 // RUN: %clang -### %s 2>&1 \
1187 // RUN:     --target=aarch64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
1188 // RUN:     -shared-libsan \
1189 // RUN:     -resource-dir=%S/Inputs/resource_dir \
1190 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1191 // RUN:   | %{filecheck} --check-prefix=CHECK-SHARED-HWASAN-AARCH64-LINUX
1192 //
1193 // CHECK-SHARED-HWASAN-AARCH64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
1194 // CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lc"
1195 // CHECK-SHARED-HWASAN-AARCH64-LINUX: libclang_rt.hwasan.so"
1196 // CHECK-SHARED-HWASAN-AARCH64-LINUX: libclang_rt.hwasan-preinit.a"
1197 // CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lpthread"
1198 // CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lrt"
1199 // CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
1200 // CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lresolv"
1201 // CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
1202 // CHECK-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
1203 
1204 // RUN: %clang -### %s -o %t.so -shared 2>&1 \
1205 // RUN:     --target=aarch64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \
1206 // RUN:     -shared-libsan -resource-dir=%S/Inputs/resource_dir \
1207 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
1208 // RUN:   | %{filecheck} --check-prefix=CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX
1209 //
1210 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
1211 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lc"
1212 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX: libclang_rt.hwasan.so"
1213 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lpthread"
1214 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lrt"
1215 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
1216 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-lresolv"
1217 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
1218 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
1219