Skip to content

Commit beea5ac

Browse files
authored
Reapply "[driver] Fix sanitizer libc++ runtime linking (llvm#120370)" (llvm#120538)
Reland without item 2 from llvm#120370 to avoid breaking libc++ tests. This reverts commit 60a2f32.
1 parent e4351f2 commit beea5ac

File tree

2 files changed

+74
-14
lines changed

2 files changed

+74
-14
lines changed

clang/lib/Driver/SanitizerArgs.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,10 +1106,10 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
11061106
options::OPT_fno_sanitize_link_runtime, LinkRuntimes);
11071107

11081108
// Parse -link-cxx-sanitizer flag.
1109-
LinkCXXRuntimes = Args.hasArg(options::OPT_fsanitize_link_cxx_runtime,
1110-
options::OPT_fno_sanitize_link_cxx_runtime,
1111-
LinkCXXRuntimes) ||
1112-
D.CCCIsCXX();
1109+
LinkCXXRuntimes = D.CCCIsCXX();
1110+
LinkCXXRuntimes =
1111+
Args.hasFlag(options::OPT_fsanitize_link_cxx_runtime,
1112+
options::OPT_fno_sanitize_link_cxx_runtime, LinkCXXRuntimes);
11131113

11141114
NeedsMemProfRt = Args.hasFlag(options::OPT_fmemory_profile,
11151115
options::OPT_fmemory_profile_EQ,

clang/test/Driver/sanitizer-ld.c

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,18 +132,78 @@
132132
// RUN: -resource-dir=%S/Inputs/empty_resource_dir \
133133
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
134134
// RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s
135-
//
135+
136+
// RUN: %clangxx -### %s 2>&1 \
137+
// RUN: --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
138+
// RUN: -resource-dir=%S/Inputs/empty_resource_dir \
139+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
140+
// RUN: -fsanitize-link-c++-runtime \
141+
// RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s
142+
136143
// CHECK-ASAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
137-
// CHECK-ASAN-LINUX-CXX-NOT: "-lc"
138-
// CHECK-ASAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
139-
// CHECK-ASAN-LINUX-CXX: "--whole-archive" "{{.*}}libclang_rt.asan_cxx.a" "--no-whole-archive"
144+
// CHECK-ASAN-LINUX-CXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
145+
// CHECK-ASAN-LINUX-CXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan_cxx.a" "--no-whole-archive"
140146
// CHECK-ASAN-LINUX-CXX-NOT: "--dynamic-list"
141-
// CHECK-ASAN-LINUX-CXX: "--export-dynamic"
142-
// CHECK-ASAN-LINUX-CXX: stdc++
143-
// CHECK-ASAN-LINUX-CXX: "-lpthread"
144-
// CHECK-ASAN-LINUX-CXX: "-lrt"
145-
// CHECK-ASAN-LINUX-CXX: "-ldl"
146-
// CHECK-ASAN-LINUX-CXX: "-lresolv"
147+
// CHECK-ASAN-LINUX-CXX-SAME: "--export-dynamic"
148+
// CHECK-ASAN-LINUX-CXX-SAME: "-lstdc++"
149+
// CHECK-ASAN-LINUX-CXX-SAME: "-lpthread"
150+
// CHECK-ASAN-LINUX-CXX-SAME: "-lrt"
151+
// CHECK-ASAN-LINUX-CXX-SAME: "-ldl"
152+
// CHECK-ASAN-LINUX-CXX-SAME: "-lresolv"
153+
// CHECK-ASAN-LINUX-CXX-SAME: "-lc"
154+
155+
// RUN: %clang -### %s 2>&1 \
156+
// RUN: --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
157+
// RUN: -resource-dir=%S/Inputs/empty_resource_dir \
158+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
159+
// RUN: -fno-sanitize-link-c++-runtime \
160+
// RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX-CNOCXX %s
161+
162+
// CHECK-ASAN-LINUX-CNOCXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
163+
// CHECK-ASAN-LINUX-CNOCXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
164+
// CHECK-ASAN-LINUX-CNOCXX-NOT: libclang_rt.asan_cxx
165+
// CHECK-ASAN-LINUX-CNOCXX-SAME: "--export-dynamic"
166+
// CHECK-ASAN-LINUX-CNOCXX-NOT: stdc++
167+
// CHECK-ASAN-LINUX-CNOCXX-SAME: "-lpthread"
168+
// CHECK-ASAN-LINUX-CNOCXX-SAME: "-lrt"
169+
// CHECK-ASAN-LINUX-CNOCXX-SAME: "-ldl"
170+
// CHECK-ASAN-LINUX-CNOCXX-SAME: "-lresolv"
171+
// CHECK-ASAN-LINUX-CNOCXX-SAME: "-lc"
172+
173+
// RUN: %clangxx -### %s 2>&1 \
174+
// RUN: --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
175+
// RUN: -resource-dir=%S/Inputs/empty_resource_dir \
176+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
177+
// RUN: -fno-sanitize-link-c++-runtime \
178+
// RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX-NOCXX %s
179+
180+
// CHECK-ASAN-LINUX-NOCXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
181+
// CHECK-ASAN-LINUX-NOCXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
182+
// CHECK-ASAN-LINUX-NOCXX-NOT: libclang_rt.asan_cxx
183+
// CHECK-ASAN-LINUX-NOCXX-SAME: "--export-dynamic"
184+
// CHECK-ASAN-LINUX-NOCXX-SAME: "-lstdc++"
185+
// CHECK-ASAN-LINUX-NOCXX-SAME: "-lpthread"
186+
// CHECK-ASAN-LINUX-NOCXX-SAME: "-lrt"
187+
// CHECK-ASAN-LINUX-NOCXX-SAME: "-ldl"
188+
// CHECK-ASAN-LINUX-NOCXX-SAME: "-lresolv"
189+
// CHECK-ASAN-LINUX-NOCXX-SAME: "-lc"
190+
191+
// RUN: %clangxx -### %s 2>&1 \
192+
// RUN: --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform -fsanitize=address \
193+
// RUN: -resource-dir=%S/Inputs/empty_resource_dir \
194+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
195+
// RUN: -nostdlib++ \
196+
// RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX-NOSTDCXX %s
197+
198+
// CHECK-ASAN-LINUX-NOSTDCXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
199+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: "--whole-archive" "{{.*}}libclang_rt.asan.a" "--no-whole-archive"
200+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: libclang_rt.asan_cxx
201+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: "--export-dynamic"
202+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lpthread"
203+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lrt"
204+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-ldl"
205+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lresolv"
206+
// CHECK-ASAN-LINUX-NOSTDCXX-SAME: "-lc"
147207

148208
// RUN: %clang -### %s -o /dev/null -fsanitize=address \
149209
// RUN: --target=i386-unknown-linux -fuse-ld=ld -stdlib=platform \

0 commit comments

Comments
 (0)