• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Test sanitizers ld flags.
2 
3 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
4 // RUN:     -target i386-unknown-linux -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: "-lpthread"
13 // CHECK-ASAN-LINUX: "-lrt"
14 // CHECK-ASAN-LINUX: "-ldl"
15 // CHECK-ASAN-LINUX-NOT: "-export-dynamic"
16 // CHECK-ASAN-LINUX: "--dynamic-list={{.*}}libclang_rt.asan-i386.a.syms"
17 
18 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
19 // RUN:     -target i386-unknown-linux -fsanitize=address -shared-libasan \
20 // RUN:     -resource-dir=%S/Inputs/resource_dir \
21 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
22 // RUN:   | FileCheck --check-prefix=CHECK-SHARED-ASAN-LINUX %s
23 //
24 // CHECK-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
25 // CHECK-SHARED-ASAN-LINUX-NOT: "-lc"
26 // CHECK-SHARED-ASAN-LINUX-NOT: libclang_rt.asan-i386.a"
27 // CHECK-SHARED-ASAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.asan-preinit-i386.a" "-no-whole-archive"
28 // CHECK-SHARED-ASAN-LINUX: libclang_rt.asan-i386.so"
29 // CHECK-SHARED-ASAN-LINUX-NOT: "-lpthread"
30 // CHECK-SHARED-ASAN-LINUX-NOT: "-lrt"
31 // CHECK-SHARED-ASAN-LINUX-NOT: "-ldl"
32 // CHECK-SHARED-ASAN-LINUX-NOT: "-export-dynamic"
33 // CHECK-SHARED-ASAN-LINUX-NOT: "--dynamic-list"
34 
35 // RUN: %clang -no-canonical-prefixes %s -### -o %t.so -shared 2>&1 \
36 // RUN:     -target i386-unknown-linux -fsanitize=address -shared-libasan \
37 // RUN:     -resource-dir=%S/Inputs/resource_dir \
38 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
39 // RUN:   | FileCheck --check-prefix=CHECK-DSO-SHARED-ASAN-LINUX %s
40 //
41 // CHECK-DSO-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
42 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lc"
43 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: libclang_rt.asan-i386.a"
44 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "libclang_rt.asan-preinit-i386.a"
45 // CHECK-DSO-SHARED-ASAN-LINUX: libclang_rt.asan-i386.so"
46 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lpthread"
47 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lrt"
48 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-ldl"
49 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-export-dynamic"
50 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "--dynamic-list"
51 
52 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
53 // RUN:     -target i386-unknown-freebsd -fsanitize=address \
54 // RUN:     -resource-dir=%S/Inputs/resource_dir \
55 // RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
56 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-FREEBSD %s
57 //
58 // CHECK-ASAN-FREEBSD: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
59 // CHECK-ASAN-FREEBSD-NOT: "-lc"
60 // CHECK-ASAN-FREEBSD-NOT: libclang_rt.asan_cxx
61 // CHECK-ASAN-FREEBSD: freebsd{{/|\\+}}libclang_rt.asan-i386.a"
62 // CHECK-ASAN-FREEBSD-NOT: libclang_rt.asan_cxx
63 // CHECK-ASAN-FREEBSD: "-lpthread"
64 // CHECK-ASAN-FREEBSD: "-lrt"
65 // CHECK-ASAN-FREEBSD: "-export-dynamic"
66 // CHECK-ASAN-FREEBSD-NOT: "--dynamic-list"
67 
68 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
69 // RUN:     -target i386-unknown-freebsd -fsanitize=address \
70 // RUN:     -resource-dir=%S/Inputs/resource_dir \
71 // RUN:     --sysroot=%S/Inputs/basic_freebsd_tree \
72 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-FREEBSD-LDL %s
73 //
74 // CHECK-ASAN-FREEBSD-LDL: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
75 // CHECK-ASAN-FREEBSD-LDL-NOT: "-ldl"
76 
77 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
78 // RUN:     -target i386-unknown-linux -fsanitize=address \
79 // RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
80 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
81 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s
82 //
83 // CHECK-ASAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
84 // CHECK-ASAN-LINUX-CXX-NOT: "-lc"
85 // CHECK-ASAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan_cxx-i386.a" "-no-whole-archive"
86 // CHECK-ASAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
87 // CHECK-ASAN-LINUX-CXX: "-lpthread"
88 // CHECK-ASAN-LINUX-CXX: "-lrt"
89 // CHECK-ASAN-LINUX-CXX: "-ldl"
90 // CHECK-ASAN-LINUX-CXX: "-export-dynamic"
91 // CHECK-ASAN-LINUX-CXX-NOT: "--dynamic-list"
92 // CHECK-ASAN-LINUX-CXX: stdc++
93 
94 // RUN: %clang -no-canonical-prefixes %s -### -o /dev/null -fsanitize=address \
95 // RUN:     -target i386-unknown-linux --sysroot=%S/Inputs/basic_linux_tree \
96 // RUN:     -lstdc++ -static 2>&1 \
97 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX-STATIC %s
98 //
99 // CHECK-ASAN-LINUX-CXX-STATIC: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
100 // CHECK-ASAN-LINUX-CXX-STATIC-NOT: stdc++
101 // CHECK-ASAN-LINUX-CXX-STATIC: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
102 // CHECK-ASAN-LINUX-CXX-STATIC: stdc++
103 
104 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
105 // RUN:     -target arm-linux-gnueabi -fsanitize=address \
106 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
107 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-ARM %s
108 //
109 // CHECK-ASAN-ARM: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
110 // CHECK-ASAN-ARM-NOT: "-lc"
111 // CHECK-ASAN-ARM: libclang_rt.asan-arm.a"
112 //
113 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
114 // RUN:     -target armv7l-linux-gnueabi -fsanitize=address \
115 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
116 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-ARMv7 %s
117 //
118 // CHECK-ASAN-ARMv7: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
119 // CHECK-ASAN-ARMv7-NOT: "-lc"
120 // CHECK-ASAN-ARMv7: libclang_rt.asan-arm.a"
121 
122 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
123 // RUN:     -target arm-linux-androideabi -fsanitize=address \
124 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
125 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID %s
126 //
127 // CHECK-ASAN-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
128 // CHECK-ASAN-ANDROID-NOT: "-lc"
129 // CHECK-ASAN-ANDROID: libclang_rt.asan-arm-android.so"
130 // CHECK-ASAN-ANDROID-NOT: "-lpthread"
131 // CHECK-ASAN-ANDROID: "-pie"
132 // CHECK-ASAN-ANDROID-NOT: "-lpthread"
133 //
134 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
135 // RUN:     -target arm-linux-androideabi -fsanitize=address \
136 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
137 // RUN:     -shared-libasan \
138 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID-SHARED-LIBASAN %s
139 //
140 // CHECK-ASAN-ANDROID-SHARED-LIBASAN-NOT: argument unused during compilation: '-shared-libasan'
141 //
142 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
143 // RUN:     -target arm-linux-androideabi -fsanitize=address \
144 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
145 // RUN:     -shared \
146 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID-SHARED %s
147 //
148 // CHECK-ASAN-ANDROID-SHARED: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
149 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lc"
150 // CHECK-ASAN-ANDROID-SHARED: libclang_rt.asan-arm-android.so"
151 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lpthread"
152 
153 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
154 // RUN:     -target x86_64-unknown-linux -lstdc++ -fsanitize=thread \
155 // RUN:     -resource-dir=%S/Inputs/resource_dir \
156 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
157 // RUN:   | FileCheck --check-prefix=CHECK-TSAN-LINUX-CXX %s
158 //
159 // CHECK-TSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
160 // CHECK-TSAN-LINUX-CXX-NOT: stdc++
161 // CHECK-TSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.tsan-x86_64.a" "-no-whole-archive"
162 // CHECK-TSAN-LINUX-CXX: "-lpthread"
163 // CHECK-TSAN-LINUX-CXX: "-lrt"
164 // CHECK-TSAN-LINUX-CXX: "-ldl"
165 // CHECK-TSAN-LINUX-CXX-NOT: "-export-dynamic"
166 // CHECK-TSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan-x86_64.a.syms"
167 // CHECK-TSAN-LINUX-CXX: stdc++
168 
169 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
170 // RUN:     -target x86_64-unknown-linux -lstdc++ -fsanitize=memory \
171 // RUN:     -resource-dir=%S/Inputs/resource_dir \
172 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
173 // RUN:   | FileCheck --check-prefix=CHECK-MSAN-LINUX-CXX %s
174 //
175 // CHECK-MSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
176 // CHECK-MSAN-LINUX-CXX-NOT: stdc++
177 // CHECK-MSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.msan-x86_64.a" "-no-whole-archive"
178 // CHECK-MSAN-LINUX-CXX: "-lpthread"
179 // CHECK-MSAN-LINUX-CXX: "-lrt"
180 // CHECK-MSAN-LINUX-CXX: "-ldl"
181 // CHECK-MSAN-LINUX-CXX-NOT: "-export-dynamic"
182 // CHECK-MSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan-x86_64.a.syms"
183 // CHECK-MSAN-LINUX-CXX: stdc++
184 
185 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
186 // RUN:     -target i386-unknown-linux \
187 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
188 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s
189 // CHECK-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
190 // CHECK-UBSAN-LINUX-NOT: libclang_rt.asan
191 // CHECK-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.san-i386.a" "-no-whole-archive"
192 // CHECK-UBSAN-LINUX-NOT: libclang_rt.asan
193 // CHECK-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
194 // CHECK-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx
195 // CHECK-UBSAN-LINUX: "-lpthread"
196 // CHECK-UBSAN-LINUX-NOT: "-lstdc++"
197 
198 // RUN: %clangxx -fsanitize=undefined %s -### -o %t.o 2>&1 \
199 // RUN:     -target i386-unknown-linux \
200 // RUN:     -resource-dir=%S/Inputs/resource_dir \
201 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
202 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-CXX %s
203 // CHECK-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
204 // CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
205 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.san-i386.a" "-no-whole-archive"
206 // CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
207 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
208 // CHECK-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.ubsan-i386.a.syms"
209 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive"
210 // CHECK-UBSAN-LINUX-CXX: "-lpthread"
211 // CHECK-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.ubsan_cxx-i386.a.syms"
212 // CHECK-UBSAN-LINUX-CXX: "-lstdc++"
213 
214 // RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
215 // RUN:     -target i386-unknown-linux \
216 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
217 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX %s
218 // CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
219 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.san
220 // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
221 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.san
222 // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
223 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx
224 // CHECK-ASAN-UBSAN-LINUX: "-lpthread"
225 // CHECK-ASAN-UBSAN-LINUX-NOT: "-lstdc++"
226 
227 // RUN: %clangxx -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
228 // RUN:     -target i386-unknown-linux \
229 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
230 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX %s
231 // CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
232 // CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.san
233 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
234 // CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.san
235 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
236 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive"
237 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread"
238 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++"
239 
240 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
241 // RUN:     -target i386-unknown-linux \
242 // RUN:     -resource-dir=%S/Inputs/resource_dir \
243 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
244 // RUN:     -shared \
245 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHARED %s
246 // CHECK-UBSAN-LINUX-SHARED: "{{.*}}ld{{(.exe)?}}"
247 // CHECK-UBSAN-LINUX-SHARED-NOT: --export-dynamic
248 // CHECK-UBSAN-LINUX-SHARED-NOT: --dynamic-list
249 // CHECK-UBSAN-LINUX-SHARED-NOT: libclang_rt.ubsan-i386.a"
250 // CHECK-UBSAN-LINUX-SHARED-NOT: --export-dynamic
251 // CHECK-UBSAN-LINUX-SHARED-NOT: --dynamic-list
252 
253 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
254 // RUN:     -target x86_64-unknown-linux -fsanitize=leak \
255 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
256 // RUN:   | FileCheck --check-prefix=CHECK-LSAN-LINUX %s
257 //
258 // CHECK-LSAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
259 // CHECK-LSAN-LINUX-NOT: "-lc"
260 // CHECK-LSAN-LINUX: libclang_rt.lsan-x86_64.a"
261 // CHECK-LSAN-LINUX: "-lpthread"
262 // CHECK-LSAN-LINUX: "-ldl"
263 
264 // RUN: %clang -fsanitize=leak,undefined %s -### -o %t.o 2>&1 \
265 // RUN:     -target x86_64-unknown-linux \
266 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
267 // RUN:   | FileCheck --check-prefix=CHECK-LSAN-UBSAN-LINUX %s
268 // CHECK-LSAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
269 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.san
270 // CHECK-LSAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.lsan-x86_64.a" "-no-whole-archive"
271 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.san
272 // CHECK-LSAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-x86_64.a" "-no-whole-archive"
273 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx
274 // CHECK-LSAN-UBSAN-LINUX: "-lpthread"
275 // CHECK-LSAN-UBSAN-LINUX-NOT: "-lstdc++"
276 
277 // RUN: %clang -fsanitize=leak,address %s -### -o %t.o 2>&1 \
278 // RUN:     -target x86_64-unknown-linux \
279 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
280 // RUN:   | FileCheck --check-prefix=CHECK-LSAN-ASAN-LINUX %s
281 // CHECK-LSAN-ASAN-LINUX: "{{.*}}ld{{(.exe)?}}"
282 // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
283 // CHECK-LSAN-ASAN-LINUX: libclang_rt.asan-x86_64
284 // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
285