[PATCH] D144672: [Sanitizers] Error when attempting to use `static-lsan` with `tsan` or `asan` on darwin
Dave MacLachlan via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 23 13:02:09 PST 2023
dmaclach created this revision.
dmaclach added reviewers: usama54321, yln, trybka.
dmaclach added a project: Sanitizers.
Herald added a project: All.
dmaclach requested review of this revision.
Herald added subscribers: llvm-commits, MaskRay.
Herald added a project: LLVM.
darwin platforms do not support `static-lsan` with `tsan` or `asan` but were "silently failing" in that they would just ignore the flag and link in the dynamic runtimes instead.
This matches the pre-existing `ubsan` failure path.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D144672
Files:
b/llvm/llvm-project/clang/include/clang/Basic/DiagnosticDriverKinds.td
b/llvm/llvm-project/clang/include/clang/Driver/Options.td
b/llvm/llvm-project/clang/lib/Driver/ToolChains/Darwin.cpp
b/llvm/llvm-project/clang/test/Driver/sanitizer-ld.c
Index: b/llvm/llvm-project/clang/test/Driver/sanitizer-ld.c
===================================================================
--- b/llvm/llvm-project/clang/test/Driver/sanitizer-ld.c
+++ b/llvm/llvm-project/clang/test/Driver/sanitizer-ld.c
@@ -457,6 +457,18 @@
// RUN: | FileCheck --check-prefix=CHECK-UBSAN-STATIC-DARWIN %s
// CHECK-UBSAN-STATIC-DARWIN: {{.*}}error: static UndefinedBehaviorSanitizer runtime is not supported on darwin
+// RUN: %clang -fsanitize=address -### %s 2>&1 \
+// RUN: --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN: | FileCheck --check-prefix=CHECK-ASAN-STATIC-DARWIN %s
+// CHECK-ASAN-STATIC-DARWIN: {{.*}}error: static AddressSanitizer runtime is not supported on darwin
+
+// RUN: %clang -fsanitize=thread -### %s 2>&1 \
+// RUN: --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN: | FileCheck --check-prefix=CHECK-TSAN-STATIC-DARWIN %s
+// CHECK-TSAN-STATIC-DARWIN: {{.*}}error: static ThreadSanitizer runtime is not supported on darwin
+
// RUN: %clang -fsanitize=address,undefined -### %s 2>&1 \
// RUN: --target=i386-unknown-linux -fuse-ld=ld \
// RUN: -resource-dir=%S/Inputs/resource_dir \
Index: b/llvm/llvm-project/clang/lib/Driver/ToolChains/Darwin.cpp
===================================================================
--- b/llvm/llvm-project/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/llvm/llvm-project/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -1426,9 +1426,17 @@
const SanitizerArgs &Sanitize = getSanitizerArgs(Args);
- if (!Sanitize.needsSharedRt() && Sanitize.needsUbsanRt()) {
+ if (!Sanitize.needsSharedRt()) {
+ if (Sanitize.needsUbsanRt()) {
getDriver().Diag(diag::err_drv_unsupported_static_ubsan_darwin);
return;
+ } else if (Sanitize.needsAsanRt()) {
+ getDriver().Diag(diag::err_drv_unsupported_static_asan_darwin);
+ return;
+ } else if (Sanitize.needsTsanRt()) {
+ getDriver().Diag(diag::err_drv_unsupported_static_tsan_darwin);
+ return;
+ }
}
if (Sanitize.linkRuntimes()) {
Index: b/llvm/llvm-project/clang/include/clang/Driver/Options.td
===================================================================
--- b/llvm/llvm-project/clang/include/clang/Driver/Options.td
+++ b/llvm/llvm-project/clang/include/clang/Driver/Options.td
@@ -1215,7 +1215,7 @@
def shared_libsan : Flag<["-"], "shared-libsan">,
HelpText<"Dynamically link the sanitizer runtime">;
def static_libsan : Flag<["-"], "static-libsan">,
- HelpText<"Statically link the sanitizer runtime">;
+ HelpText<"Statically link the sanitizer runtime (Not supported for asan, tsan or ubsan on Apple platforms)">;
def : Flag<["-"], "shared-libasan">, Alias<shared_libsan>;
def fasm : Flag<["-"], "fasm">, Group<f_Group>;
Index: b/llvm/llvm-project/clang/include/clang/Basic/DiagnosticDriverKinds.td
===================================================================
--- b/llvm/llvm-project/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/llvm/llvm-project/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -222,6 +222,10 @@
"malformed sanitizer metadata ignorelist: '%0'">;
def err_drv_unsupported_static_ubsan_darwin : Error<
"static UndefinedBehaviorSanitizer runtime is not supported on darwin">;
+def err_drv_unsupported_static_tsan_darwin : Error<
+ "static ThreadSanitizer runtime is not supported on darwin">;
+def err_drv_unsupported_static_asan_darwin : Error<
+ "static AddressSanitizer runtime is not supported on darwin">;
def err_drv_duplicate_config : Error<
"no more than one option '--config' is allowed">;
def err_drv_cannot_open_config_file : Error<
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D144672.499961.patch
Type: text/x-patch
Size: 3811 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230223/7399def8/attachment.bin>
More information about the llvm-commits
mailing list