<div style="font-family: arial, helvetica, sans-serif; font-size: 10pt"><br><br><div class="gmail_quote">On Wed, Nov 28, 2012 at 10:28 AM, Alexey Samsonov <span dir="ltr"><<a href="mailto:samsonov@google.com" target="_blank">samsonov@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  Ok. Kostya, what is your opinion?<br></blockquote><div><br></div><div>On which part? I like the flags.</div>As for "-mllvm -asan-foo" vs createAddressSanitizerPass flags I have mixed feelings. </div><div class="gmail_quote">
If we use createAddressSanitizerPass flags, what should be the behavior when "-mllvm -asan-foo" is given separately? </div><div class="gmail_quote">What are other phases doing in similar situations (or we are doing something unique)? <br>
<div> </div><div><br></div><div>--kcc </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
<br>
================<br>
Comment at: lib/Driver/Tools.cpp:1518-1523<br>
@@ -1517,1 +1517,8 @@<br>
</div><div class="im">+<br>
+  // If -fsanitize contains extra features of ASan, it should also<br>
+  // explicitly contain -fsanitize=address.<br>
+  if (NeedsAsan && ((Kind & Address) == 0))<br>
+    D.Diag(diag::err_drv_argument_only_allowed_with)<br>
+      << describeSanitizeArg(Args, AsanArg, NeedsAsanRt)<br>
+      << "-fsanitize=address";<br>
 }<br>
</div>----------------<br>
<div class="im">Richard Smith wrote:<br>
> For argument lists like "-fsanitize=use-after-return -fsanitize=address -fno-sanitize=address", we'll say "-fsanitize=address is only allowed with -fsanitize=address". The existing diagnostic has a similar issue for "-fsanitize=address -fsanitize=alignment -fsanitize=vptr -fno-sanitize=vptr", where it says "-fsanitize=vptr not allowed with -fsanitize=address". I think we'd need to teach describeSanitizerArg to re-parse the argument list to handle this properly.<br>

</div>RIght, the logic is untrivial here. Mailed D143 to fix this.<br>
<div class="im"><br>
================<br>
Comment at: lib/Driver/SanitizerArgs.h:59-71<br>
@@ -58,1 +58,15 @@<br>
</div><div class="im">+<br>
+    // Add args for LLVM backend.<br>
+    if (Kind & InitOrder) {<br>
+      CmdArgs.push_back("-mllvm");<br>
+      CmdArgs.push_back("-asan-initialization-order");<br>
+    }<br>
+    if (Kind & UseAfterReturn) {<br>
+      CmdArgs.push_back("-mllvm");<br>
+      CmdArgs.push_back("-asan-use-after-return");<br>
+    }<br>
+    if (Kind & UseAfterScope) {<br>
+      CmdArgs.push_back("-mllvm");<br>
+      CmdArgs.push_back("-asan-use-lifetime");<br>
+    }<br>
   }<br>
</div>----------------<br>
<div class="im">Richard Smith wrote:<br>
> I would prefer this to be handled by the frontend instead of by the driver (the frontend is responsible for adding all the other IR instrumentation, including adding the ASan passes).<br>
><br>
> Have you considered passing these flags to ASan when creating the passes in addAddressSanitizerPass, rather than as command-line options?<br>
</div>Hm, passing arguments to createAddressSanitizerPass() certainly seems a better (though, more intrusive) solution than playing with -mllvm flags. I'll work on that.<br>
<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D142" target="_blank">http://llvm-reviews.chandlerc.com/D142</a><br>
</blockquote></div><br></div>