diff options
Diffstat (limited to 'clang/lib/Driver')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 17 | 
1 files changed, 11 insertions, 6 deletions
| diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index ec870aff155..e2bb0b12cd4 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1972,7 +1972,7 @@ static void addSanitizerRTLinkFlags(const ToolChain &TC, const ArgList &Args,  /// If AddressSanitizer is enabled, add appropriate linker flags (Linux).  /// This needs to be called before we add the C run-time (malloc, etc).  static void addAsanRT(const ToolChain &TC, const ArgList &Args, -                      ArgStringList &CmdArgs, bool Shared) { +                      ArgStringList &CmdArgs, bool Shared, bool IsCXX) {    if (Shared) {      // Link dynamic runtime if necessary.      SmallString<128> LibSanitizer = @@ -1985,10 +1985,15 @@ static void addAsanRT(const ToolChain &TC, const ArgList &Args,        (TC.getTriple().getEnvironment() == llvm::Triple::Android))      return; -  const char *LibAsanStaticPart = Shared ? "asan-preinit" : "asan"; -  addSanitizerRTLinkFlags(TC, Args, CmdArgs, LibAsanStaticPart, -                          /*BeforeLibStdCXX*/ true, /*ExportSymbols*/ !Shared, -                          /*LinkDeps*/ !Shared); +  if (Shared) { +    addSanitizerRTLinkFlags(TC, Args, CmdArgs, "asan-preinit", +                            /*BeforeLibStdCXX*/ true, /*ExportSymbols*/ false, +                            /*LinkDeps*/ false); +  } else { +    addSanitizerRTLinkFlags(TC, Args, CmdArgs, "asan", true); +    if (IsCXX) +      addSanitizerRTLinkFlags(TC, Args, CmdArgs, "asan_cxx", true); +  }  }  /// If ThreadSanitizer is enabled, add appropriate linker flags (Linux). @@ -2049,7 +2054,7 @@ static void addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args,                      Sanitize.needsAsanRt() || Sanitize.needsTsanRt() ||                      Sanitize.needsMsanRt() || Sanitize.needsLsanRt());    if (Sanitize.needsAsanRt()) -    addAsanRT(TC, Args, CmdArgs, Sanitize.needsSharedAsanRt()); +    addAsanRT(TC, Args, CmdArgs, Sanitize.needsSharedAsanRt(), D.CCCIsCXX());    if (Sanitize.needsTsanRt())      addTsanRT(TC, Args, CmdArgs);    if (Sanitize.needsMsanRt()) | 

