]> granicus.if.org Git - clang/commitdiff
[Driver] Fix -static-libsan / -shared-libsan on Darwin
authorVedant Kumar <vsk@apple.com>
Sat, 7 Oct 2017 01:42:09 +0000 (01:42 +0000)
committerVedant Kumar <vsk@apple.com>
Sat, 7 Oct 2017 01:42:09 +0000 (01:42 +0000)
Don't ignore these flags on Darwin. The old behavior of using the
dynamic runtime when neither flag is passed is preserved.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315142 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/SanitizerArgs.cpp
lib/Driver/ToolChains/Darwin.cpp
test/Driver/sanitizer-ld.c

index ceb5bbad7efe920b20b9369519f024a186f8fef3..7e9ee023098bea83d31fa21191e851cd7b574409 100644 (file)
@@ -612,7 +612,8 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
 
   SharedRuntime =
       Args.hasFlag(options::OPT_shared_libsan, options::OPT_static_libsan,
-                   TC.getTriple().isAndroid() || TC.getTriple().isOSFuchsia());
+                   TC.getTriple().isAndroid() || TC.getTriple().isOSFuchsia() ||
+                       TC.getTriple().isOSDarwin());
 
   if (AllAddedKinds & Address) {
     NeedPIE |= TC.getTriple().isAndroid() || TC.getTriple().isOSFuchsia();
index 29fae0019ae53d4d7bcd1cf77158a393e109305a..78d7bf4b3dc7129d1e1003a4345572d3ea31b809 100644 (file)
@@ -1049,7 +1049,8 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args,
   if (Sanitize.needsUbsanRt())
     AddLinkSanitizerLibArgs(Args, CmdArgs,
                             Sanitize.requiresMinimalRuntime() ? "ubsan_minimal"
-                                                              : "ubsan");
+                                                              : "ubsan",
+                            Sanitize.needsSharedRt());
   if (Sanitize.needsTsanRt())
     AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");
   if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) {
index 52e7bdeadb17e029f2ddf25ef78d7dfe4b8943ea..6f9ee052c3ce4d8421e1c5104f12c1011dcb0bb9 100644 (file)
 // CHECK-UBSAN-MINIMAL-DARWIN: "{{.*}}ld{{(.exe)?}}"
 // CHECK-UBSAN-MINIMAL-DARWIN: "{{.*}}libclang_rt.ubsan_minimal_osx_dynamic.dylib"
 
+// RUN: %clang -fsanitize=undefined %s -### -o %t.o 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-UBSAN-STATIC-DARWIN %s
+// CHECK-UBSAN-STATIC-DARWIN: "{{.*}}ld{{(.exe)?}}"
+// CHECK-UBSAN-STATIC-DARWIN: "{{.*}}libclang_rt.ubsan_osx.a"
+
 // RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
 // RUN:     -target i386-unknown-linux -fuse-ld=ld \
 // RUN:     --sysroot=%S/Inputs/basic_linux_tree \