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>