I don't think so. "No default libs" should mean "no default libs", not "some default libs". Maybe you're using an alternate sanitizer lib or something, hence usage of that flag.<div><br></div><div>Thank you,</div><div><br></div><div> Filipe<span></span><br><br>On Tuesday, 30 August 2016, Chris Bieneman via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">beanz created this revision.<br>
beanz added reviewers: zaks.anna, kubabrecka, bogner.<br>
beanz added a subscriber: cfe-commits.<br>
<br>
The -nodefaultlibs and -nostdlib flags suppress all the runtime libraries that the driver puts on the link line. This feels wrong. If a user specifies "-fsanitize=<blah>" I think it is expected that the sanitizer library would be included on the link line.<br>
<br>
<a href="https://reviews.llvm.org/D24048" target="_blank">https://reviews.llvm.org/<wbr>D24048</a><br>
<br>
Files:<br>
lib/Driver/ToolChains.cpp<br>
lib/Driver/ToolChains.h<br>
lib/Driver/Tools.cpp<br>
<br>
Index: lib/Driver/Tools.cpp<br>
==============================<wbr>==============================<wbr>=======<br>
--- lib/Driver/Tools.cpp<br>
+++ lib/Driver/Tools.cpp<br>
@@ -8032,6 +8032,8 @@<br>
<br>
// Let the tool chain choose which runtime library to link.<br>
getMachOToolChain().<wbr>AddLinkRuntimeLibArgs(Args, CmdArgs);<br>
+ } else {<br>
+ getMachOToolChain().<wbr>AddLinkSanitizerLibArgs(Args, CmdArgs);<br>
}<br>
<br>
if (!Args.hasArg(options::OPT_<wbr>nostdlib, options::OPT_nostartfiles)) {<br>
Index: lib/Driver/ToolChains.h<br>
==============================<wbr>==============================<wbr>=======<br>
--- lib/Driver/ToolChains.h<br>
+++ lib/Driver/ToolChains.h<br>
@@ -282,6 +282,10 @@<br>
virtual void AddLinkRuntimeLibArgs(const llvm::opt::ArgList &Args,<br>
llvm::opt::ArgStringList &CmdArgs) const;<br>
<br>
+ virtual void<br>
+ AddLinkSanitizerLibArgs(const llvm::opt::ArgList &Args,<br>
+ llvm::opt::ArgStringList &CmdArgs) const {}<br>
+<br>
virtual void addStartObjectFileArgs(const llvm::opt::ArgList &Args,<br>
llvm::opt::ArgStringList &CmdArgs) const {<br>
}<br>
@@ -571,6 +575,10 @@<br>
<br>
RuntimeLibType GetRuntimeLibType(const llvm::opt::ArgList &Args) const override;<br>
<br>
+ void<br>
+ AddLinkSanitizerLibArgs(const llvm::opt::ArgList &Args,<br>
+ llvm::opt::ArgStringList &CmdArgs) const override;<br>
+<br>
void AddLinkRuntimeLibArgs(const llvm::opt::ArgList &Args,<br>
llvm::opt::ArgStringList &CmdArgs) const override;<br>
<br>
Index: lib/Driver/ToolChains.cpp<br>
==============================<wbr>==============================<wbr>=======<br>
--- lib/Driver/ToolChains.cpp<br>
+++ lib/Driver/ToolChains.cpp<br>
@@ -425,22 +425,7 @@<br>
return;<br>
}<br>
<br>
- const SanitizerArgs &Sanitize = getSanitizerArgs();<br>
- if (Sanitize.needsAsanRt())<br>
- AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");<br>
- if (Sanitize.needsUbsanRt())<br>
- AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan");<br>
- if (Sanitize.needsTsanRt())<br>
- AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");<br>
- if (Sanitize.needsStatsRt()) {<br>
- StringRef OS = isTargetMacOS() ? "osx" : "iossim";<br>
- AddLinkRuntimeLib(Args, CmdArgs,<br>
- (Twine("libclang_rt.stats_<wbr>client_") + OS + ".a").str(),<br>
- /*AlwaysLink=*/true);<br>
- AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");<br>
- }<br>
- if (Sanitize.needsEsanRt())<br>
- AddLinkSanitizerLibArgs(Args, CmdArgs, "esan");<br>
+ AddLinkSanitizerLibArgs(Args, CmdArgs);<br>
<br>
// Otherwise link libSystem, then the dynamic runtime library, and finally any<br>
// target specific static runtime library.<br>
@@ -495,6 +480,26 @@<br>
}<br>
}<br>
<br>
+void DarwinClang::<wbr>AddLinkSanitizerLibArgs(<br>
+ const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const {<br>
+ const SanitizerArgs &Sanitize = getSanitizerArgs();<br>
+ if (Sanitize.needsAsanRt())<br>
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");<br>
+ if (Sanitize.needsUbsanRt())<br>
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan");<br>
+ if (Sanitize.needsTsanRt())<br>
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");<br>
+ if (Sanitize.needsStatsRt()) {<br>
+ StringRef OS = isTargetMacOS() ? "osx" : "iossim";<br>
+ AddLinkRuntimeLib(Args, CmdArgs,<br>
+ (Twine("libclang_rt.stats_<wbr>client_") + OS + ".a").str(),<br>
+ /*AlwaysLink=*/true);<br>
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");<br>
+ }<br>
+ if (Sanitize.needsEsanRt())<br>
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "esan");<br>
+}<br>
+<br>
void Darwin::AddDeploymentTarget(<wbr>DerivedArgList &Args) const {<br>
const OptTable &Opts = getDriver().getOpts();<br>
<br>
<br>
<br>
</blockquote></div>