Include ubsan runtime even when building a shared library. We don't require the executable to be linked with UBSan.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172856 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 3fbcd94..3132e75 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -1587,17 +1587,15 @@
/// (Linux).
static void addUbsanRTLinux(const ToolChain &TC, const ArgList &Args,
ArgStringList &CmdArgs) {
- if (!Args.hasArg(options::OPT_shared)) {
- // LibUbsan is "libclang_rt.ubsan-<ArchName>.a" in the Linux library
- // resource directory.
- SmallString<128> LibUbsan(TC.getDriver().ResourceDir);
- llvm::sys::path::append(LibUbsan, "lib", "linux",
- (Twine("libclang_rt.ubsan-") +
- TC.getArchName() + ".a"));
- CmdArgs.push_back(Args.MakeArgString(LibUbsan));
- CmdArgs.push_back("-lpthread");
- CmdArgs.push_back("-export-dynamic");
- }
+ // LibUbsan is "libclang_rt.ubsan-<ArchName>.a" in the Linux library
+ // resource directory.
+ SmallString<128> LibUbsan(TC.getDriver().ResourceDir);
+ llvm::sys::path::append(LibUbsan, "lib", "linux",
+ (Twine("libclang_rt.ubsan-") +
+ TC.getArchName() + ".a"));
+ CmdArgs.push_back(Args.MakeArgString(LibUbsan));
+ CmdArgs.push_back("-lpthread");
+ CmdArgs.push_back("-export-dynamic");
}
static bool shouldUseFramePointer(const ArgList &Args,
diff --git a/test/Driver/ubsan-ld.c b/test/Driver/ubsan-ld.c
index 4a17e7c..133d7a3 100644
--- a/test/Driver/ubsan-ld.c
+++ b/test/Driver/ubsan-ld.c
@@ -9,6 +9,16 @@
// CHECK-LINUX: libclang_rt.ubsan-i386.a"
// CHECK-LINUX: "-lpthread"
+// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN: -shared \
+// RUN: | FileCheck --check-prefix=CHECK-LINUX-SHARED %s
+// CHECK-LINUX-SHARED: "{{.*}}ld{{(.exe)?}}"
+// CHECK-LINUX-SHARED-NOT: "-lc"
+// CHECK-LINUX-SHARED: libclang_rt.ubsan-i386.a"
+// CHECK-LINUX-SHARED: "-lpthread"
+
// RUN: %clang -fsanitize=bounds %s -### -o %t.o 2>&1 \
// RUN: -target i386-unknown-linux \
// RUN: --sysroot=%S/Inputs/basic_linux_tree \