summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2016-07-08 00:37:31 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2016-07-08 00:37:31 +0000
commitc61723f73e48475fdd31db3f0eca07985580e346 (patch)
treea34bc38a990d2cbae0e0925b4334e09e1d4b9d57
parent3387074ae94a7b6babc25591a8e7716592cb220b (diff)
downloadbcm5719-llvm-c61723f73e48475fdd31db3f0eca07985580e346.tar.gz
bcm5719-llvm-c61723f73e48475fdd31db3f0eca07985580e346.zip
Revert "Driver: Stop linking to C++ when using sanitizers on Darwin"
This reverts SVN r274797. It broke the Green Dragon bot. Revert it until the failure can be addressed. llvm-svn: 274814
-rw-r--r--clang/lib/Driver/ToolChains.cpp12
-rw-r--r--clang/test/Driver/darwin-sanitizer-ld.c24
2 files changed, 20 insertions, 16 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index 4ecbf2bac3c..89e973a1209 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -392,12 +392,24 @@ void Darwin::addProfileRTLibs(const ArgList &Args,
void DarwinClang::AddLinkSanitizerLibArgs(const ArgList &Args,
ArgStringList &CmdArgs,
StringRef Sanitizer) const {
+ if (!Args.hasArg(options::OPT_dynamiclib) &&
+ !Args.hasArg(options::OPT_bundle)) {
+ // Sanitizer runtime libraries requires C++.
+ AddCXXStdlibLibArgs(Args, CmdArgs);
+ }
+
AddLinkRuntimeLib(
Args, CmdArgs,
(Twine("libclang_rt.") + Sanitizer + "_" +
getOSLibraryNameSuffix() + "_dynamic.dylib").str(),
/*AlwaysLink*/ true, /*IsEmbedded*/ false,
/*AddRPath*/ true);
+
+ if (GetCXXStdlibType(Args) == ToolChain::CST_Libcxx) {
+ // Add explicit dependcy on -lc++abi, as -lc++ doesn't re-export
+ // all RTTI-related symbols that UBSan uses.
+ CmdArgs.push_back("-lc++abi");
+ }
}
void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args,
diff --git a/clang/test/Driver/darwin-sanitizer-ld.c b/clang/test/Driver/darwin-sanitizer-ld.c
index 53c7fce115e..3cf8779f510 100644
--- a/clang/test/Driver/darwin-sanitizer-ld.c
+++ b/clang/test/Driver/darwin-sanitizer-ld.c
@@ -5,8 +5,7 @@
// RUN: | FileCheck --check-prefix=CHECK-ASAN %s
// CHECK-ASAN: "{{.*}}ld{{(.exe)?}}"
-// CHECK-ASAN-NOT: "-lstdc++"
-// CHECK-ASAN-NOT: "-lc++"
+// CHECK-ASAN: stdc++
// CHECK-ASAN: libclang_rt.asan_osx_dynamic.dylib"
// CHECK-ASAN: "-rpath" "@executable_path"
// CHECK-ASAN: "-rpath" "{{.*}}lib{{.*}}darwin"
@@ -26,8 +25,7 @@
// RUN: | FileCheck --check-prefix=CHECK-UBSAN %s
// CHECK-UBSAN: "{{.*}}ld{{(.exe)?}}"
-// CHECK-UBSAN-NOT: "-lstdc++"
-// CHECK-UBSAN-NOT: "-lc++"
+// CHECK-UBSAN: stdc++
// CHECK-UBSAN: libclang_rt.ubsan_osx_dynamic.dylib"
// CHECK-UBSAN: "-rpath" "@executable_path"
// CHECK-UBSAN: "-rpath" "{{.*}}lib{{.*}}darwin"
@@ -63,8 +61,7 @@
// RUN: %s -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-ASAN-IOSSIM %s
// CHECK-ASAN-IOSSIM: "{{.*}}ld{{(.exe)?}}"
-// CHECK-ASAN-IOSSIM-NOT: "-lstdc++"
-// CHECK-ASAN-IOSSIM-NOT: "-lc++"
+// CHECK-ASAN-IOSSIM: lc++
// CHECK-ASAN-IOSSIM: libclang_rt.asan_iossim_dynamic.dylib"
// CHECK-ASAN-IOSSIM: "-rpath" "@executable_path"
// CHECK-ASAN-IOSSIM: "-rpath" "{{.*}}lib{{.*}}darwin"
@@ -75,8 +72,7 @@
// RUN: | FileCheck --check-prefix=CHECK-ASAN-TVOSSIM %s
// CHECK-ASAN-TVOSSIM: "{{.*}}ld{{(.exe)?}}"
-// CHECK-ASAN-TVOSSIM-NOT: "-lstdc++"
-// CHECK-ASAN-TVOSSIM-NOT: "-lc++"
+// CHECK-ASAN-TVOSSIM: lc++
// CHECK-ASAN-TVOSSIM: libclang_rt.asan_tvossim_dynamic.dylib"
// CHECK-ASAN-TVOSSIM: "-rpath" "@executable_path"
// CHECK-ASAN-TVOSSIM: "-rpath" "{{.*}}lib{{.*}}darwin"
@@ -87,8 +83,7 @@
// RUN: | FileCheck --check-prefix=CHECK-ASAN-WATCHOSSIM %s
// CHECK-ASAN-WATCHOSSIM: "{{.*}}ld{{(.exe)?}}"
-// CHECK-ASAN-WATCHOSSIM-NOT: "-lstdc++"
-// CHECK-ASAN-WATCHOSSIM-NOT: "-lc++"
+// CHECK-ASAN-WATCHOSSIM: lc++
// CHECK-ASAN-WATCHOSSIM: libclang_rt.asan_watchossim_dynamic.dylib"
// CHECK-ASAN-WATCHOSSIM: "-rpath" "@executable_path"
// CHECK-ASAN-WATCHOSSIM: "-rpath" "{{.*}}lib{{.*}}darwin"
@@ -98,8 +93,7 @@
// RUN: %s -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-ASAN-IOS %s
// CHECK-ASAN-IOS: "{{.*}}ld{{(.exe)?}}"
-// CHECK-ASAN-IOS-NOT: "-lstdc++"
-// CHECK-ASAN-IOS-NOT: "-lc++"
+// CHECK-ASAN-IOS: lc++
// CHECK-ASAN-IOS: libclang_rt.asan_ios_dynamic.dylib"
// CHECK-ASAN-IOS: "-rpath" "@executable_path"
// CHECK-ASAN-IOS: "-rpath" "{{.*}}lib{{.*}}darwin"
@@ -109,8 +103,7 @@
// RUN: %s -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-ASAN-TVOS %s
// CHECK-ASAN-TVOS: "{{.*}}ld{{(.exe)?}}"
-// CHECK-ASAN-TVOS-NOT: "-lstdc++"
-// CHECK-ASAN-TVOS-NOT: "-lc++"
+// CHECK-ASAN-TVOS: lc++
// CHECK-ASAN-TVOS: libclang_rt.asan_tvos_dynamic.dylib"
// CHECK-ASAN-TVOS: "-rpath" "@executable_path"
// CHECK-ASAN-TVOS: "-rpath" "{{.*}}lib{{.*}}darwin"
@@ -120,8 +113,7 @@
// RUN: %s -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-ASAN-WATCHOS %s
// CHECK-ASAN-WATCHOS: "{{.*}}ld{{(.exe)?}}"
-// CHECK-ASAN-WATCHOS-NOT: "-lstdc++"
-// CHECK-ASAN-WATCHOS-NOT: "-lc++"
+// CHECK-ASAN-WATCHOS: lc++
// CHECK-ASAN-WATCHOS: libclang_rt.asan_watchos_dynamic.dylib"
// CHECK-ASAN-WATCHOS: "-rpath" "@executable_path"
// CHECK-ASAN-WATCHOS: "-rpath" "{{.*}}lib{{.*}}darwin"
OpenPOWER on IntegriCloud