diff options
| author | Alexey Samsonov <samsonov@google.com> | 2012-11-21 14:17:42 +0000 |
|---|---|---|
| committer | Alexey Samsonov <samsonov@google.com> | 2012-11-21 14:17:42 +0000 |
| commit | 8368b376ad88208a98496cab6000e5585dbc973a (patch) | |
| tree | 81f2f7a3f56cf796fddaf635a0b21ac69e903ec9 /clang/lib/Driver/ToolChains.cpp | |
| parent | ff571cce2f1b3afc6b839dd9a87828ff15ac5e41 (diff) | |
| download | bcm5719-llvm-8368b376ad88208a98496cab6000e5585dbc973a.tar.gz bcm5719-llvm-8368b376ad88208a98496cab6000e5585dbc973a.zip | |
[Sanitizer] force linking with static sanitizer runtimes on Darwin even if they are not found in resource directory. Add test checking sanitizer linker flags on Darwin.
llvm-svn: 168428
Diffstat (limited to 'clang/lib/Driver/ToolChains.cpp')
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index a56d37bde17..94e30123293 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -261,16 +261,18 @@ void DarwinClang::AddLinkARCArgs(const ArgList &Args, void DarwinClang::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, - const char *DarwinStaticLib) const { + const char *DarwinStaticLib, + bool AlwaysLink) const { llvm::sys::Path P(getDriver().ResourceDir); P.appendComponent("lib"); P.appendComponent("darwin"); P.appendComponent(DarwinStaticLib); // For now, allow missing resource libraries to support developers who may - // not have compiler-rt checked out or integrated into their build. + // not have compiler-rt checked out or integrated into their build (unless + // we explicitly force linking with this library). bool Exists; - if (!llvm::sys::fs::exists(P.str(), Exists) && Exists) + if (AlwaysLink || (!llvm::sys::fs::exists(P.str(), Exists) && Exists)) CmdArgs.push_back(Args.MakeArgString(P.str())); } @@ -326,7 +328,7 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, getDriver().Diag(diag::err_drv_clang_unsupported_per_platform) << "-fsanitize=undefined"; } else { - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.ubsan_osx.a"); + AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.ubsan_osx.a", true); // The Ubsan runtime library requires C++. AddCXXStdlibLibArgs(Args, CmdArgs); @@ -343,7 +345,7 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, getDriver().Diag(diag::err_drv_clang_unsupported_per_platform) << "-fsanitize=address"; } else { - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.asan_osx.a"); + AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.asan_osx.a", true); // The ASAN runtime library requires C++ and CoreFoundation. AddCXXStdlibLibArgs(Args, CmdArgs); |

