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: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
19 // RUN:     -target i386-unknown-linux -fsanitize=address \
20 // RUN:     -resource-dir=%S/Inputs/empty_resource_dir \
21 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
22 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s
23 //
24 // CHECK-ASAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
25 // CHECK-ASAN-LINUX-CXX-NOT: "-lc"
26 // CHECK-ASAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
27 // CHECK-ASAN-LINUX-CXX: "-lpthread"
28 // CHECK-ASAN-LINUX-CXX: "-lrt"
29 // CHECK-ASAN-LINUX-CXX: "-ldl"
30 // CHECK-ASAN-LINUX-CXX: "-export-dynamic"
31 // CHECK-ASAN-LINUX-CXX-NOT: "--dynamic-list"
32 // CHECK-ASAN-LINUX-CXX: stdc++
33 
34 // RUN: %clang -no-canonical-prefixes %s -### -o /dev/null -fsanitize=address \
35 // RUN:     -target i386-unknown-linux --sysroot=%S/Inputs/basic_linux_tree \
36 // RUN:     -lstdc++ -static 2>&1 \
37 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX-STATIC %s
38 //
39 // CHECK-ASAN-LINUX-CXX-STATIC: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
40 // CHECK-ASAN-LINUX-CXX-STATIC-NOT: stdc++
41 // CHECK-ASAN-LINUX-CXX-STATIC: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
42 // CHECK-ASAN-LINUX-CXX-STATIC: stdc++
43 
44 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
45 // RUN:     -target arm-linux-androideabi -fsanitize=address \
46 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
47 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID %s
48 //
49 // CHECK-ASAN-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
50 // CHECK-ASAN-ANDROID-NOT: "-lc"
51 // CHECK-ASAN-ANDROID: libclang_rt.asan-arm-android.so"
52 // CHECK-ASAN-ANDROID-NOT: "-lpthread"
53 //
54 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
55 // RUN:     -target arm-linux-androideabi -fsanitize=address \
56 // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
57 // RUN:     -shared \
58 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-ANDROID-SHARED %s
59 //
60 // CHECK-ASAN-ANDROID-SHARED: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
61 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lc"
62 // CHECK-ASAN-ANDROID-SHARED: libclang_rt.asan-arm-android.so"
63 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lpthread"
64 
65 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
66 // RUN:     -target x86_64-unknown-linux -lstdc++ -fsanitize=thread \
67 // RUN:     -resource-dir=%S/Inputs/resource_dir \
68 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
69 // RUN:   | FileCheck --check-prefix=CHECK-TSAN-LINUX-CXX %s
70 //
71 // CHECK-TSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
72 // CHECK-TSAN-LINUX-CXX-NOT: stdc++
73 // CHECK-TSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.tsan-x86_64.a" "-no-whole-archive"
74 // CHECK-TSAN-LINUX-CXX: "-lpthread"
75 // CHECK-TSAN-LINUX-CXX: "-lrt"
76 // CHECK-TSAN-LINUX-CXX: "-ldl"
77 // CHECK-TSAN-LINUX-CXX-NOT: "-export-dynamic"
78 // CHECK-TSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan-x86_64.a.syms"
79 // CHECK-TSAN-LINUX-CXX: stdc++
80 
81 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
82 // RUN:     -target x86_64-unknown-linux -lstdc++ -fsanitize=memory \
83 // RUN:     -resource-dir=%S/Inputs/resource_dir \
84 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
85 // RUN:   | FileCheck --check-prefix=CHECK-MSAN-LINUX-CXX %s
86 //
87 // CHECK-MSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
88 // CHECK-MSAN-LINUX-CXX-NOT: stdc++
89 // CHECK-MSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.msan-x86_64.a" "-no-whole-archive"
90 // CHECK-MSAN-LINUX-CXX: "-lpthread"
91 // CHECK-MSAN-LINUX-CXX: "-lrt"
92 // CHECK-MSAN-LINUX-CXX: "-ldl"
93 // CHECK-MSAN-LINUX-CXX-NOT: "-export-dynamic"
94 // CHECK-MSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan-x86_64.a.syms"
95 // CHECK-MSAN-LINUX-CXX: stdc++
96 
97 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
98 // RUN:     -target i386-unknown-linux \
99 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
100 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s
101 // CHECK-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
102 // CHECK-UBSAN-LINUX-NOT: libclang_rt.asan
103 // CHECK-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.san-i386.a" "-no-whole-archive"
104 // CHECK-UBSAN-LINUX-NOT: libclang_rt.asan
105 // CHECK-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
106 // CHECK-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx
107 // CHECK-UBSAN-LINUX: "-lpthread"
108 // CHECK-UBSAN-LINUX-NOT: "-lstdc++"
109 
110 // RUN: %clangxx -fsanitize=undefined %s -### -o %t.o 2>&1 \
111 // RUN:     -target i386-unknown-linux \
112 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
113 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-CXX %s
114 // CHECK-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
115 // CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
116 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.san-i386.a" "-no-whole-archive"
117 // CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan
118 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
119 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive"
120 // CHECK-UBSAN-LINUX-CXX: "-lpthread"
121 // CHECK-UBSAN-LINUX-CXX: "-lstdc++"
122 
123 // RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
124 // RUN:     -target i386-unknown-linux \
125 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
126 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX %s
127 // CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
128 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.san
129 // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
130 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.san
131 // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
132 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx
133 // CHECK-ASAN-UBSAN-LINUX: "-lpthread"
134 // CHECK-ASAN-UBSAN-LINUX-NOT: "-lstdc++"
135 
136 // RUN: %clangxx -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
137 // RUN:     -target i386-unknown-linux \
138 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
139 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX %s
140 // CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"
141 // CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.san
142 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"
143 // CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.san
144 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"
145 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive"
146 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread"
147 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++"
148 
149 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
150 // RUN:     -target i386-unknown-linux \
151 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
152 // RUN:     -shared \
153 // RUN:   | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHARED %s
154 // CHECK-UBSAN-LINUX-SHARED: "{{.*}}ld{{(.exe)?}}"
155 // CHECK-UBSAN-LINUX-SHARED: libclang_rt.ubsan-i386.a"
156 
157 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
158 // RUN:     -target x86_64-unknown-linux -fsanitize=leak \
159 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
160 // RUN:   | FileCheck --check-prefix=CHECK-LSAN-LINUX %s
161 //
162 // CHECK-LSAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
163 // CHECK-LSAN-LINUX-NOT: "-lc"
164 // CHECK-LSAN-LINUX: libclang_rt.lsan-x86_64.a"
165 // CHECK-LSAN-LINUX: "-lpthread"
166 // CHECK-LSAN-LINUX: "-ldl"
167 
168 // RUN: %clang -fsanitize=leak,undefined %s -### -o %t.o 2>&1 \
169 // RUN:     -target x86_64-unknown-linux \
170 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
171 // RUN:   | FileCheck --check-prefix=CHECK-LSAN-UBSAN-LINUX %s
172 // CHECK-LSAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"
173 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.san
174 // CHECK-LSAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.lsan-x86_64.a" "-no-whole-archive"
175 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.san
176 // CHECK-LSAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-x86_64.a" "-no-whole-archive"
177 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx
178 // CHECK-LSAN-UBSAN-LINUX: "-lpthread"
179 // CHECK-LSAN-UBSAN-LINUX-NOT: "-lstdc++"
180 
181 // RUN: %clang -fsanitize=leak,address %s -### -o %t.o 2>&1 \
182 // RUN:     -target x86_64-unknown-linux \
183 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \
184 // RUN:   | FileCheck --check-prefix=CHECK-LSAN-ASAN-LINUX %s
185 // CHECK-LSAN-ASAN-LINUX: "{{.*}}ld{{(.exe)?}}"
186 // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
187 // CHECK-LSAN-ASAN-LINUX: libclang_rt.asan-x86_64
188 // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
189