<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Dec 25, 2013 at 11:21 PM, 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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">On Wed, Dec 25, 2013 at 9:38 PM, <a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a> <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>

> Its generally been by design that tblgen leaks. Might be nice to fix one day<br>
> but it's been that way for a while now so don't expect it to be fixed soon.<br>
><br>
> If thats the suppression mechanism of choice (I would've expected a build<br>
> flag option) for lsan, I'd say go for it.<br>
><br>
> (Maybe there's some existing build flag handling for valgrind so as not to<br>
> leak check tblgen, but that would be a runtime flag, not build time)<br>
><br>
> On Wednesday, December 25, 2013 7:08:27 AM, Kostya Serebryany<br>
> <<a href="mailto:kcc@google.com">kcc@google.com</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> We are trying to enable LeakSanitizer on our asan/msan llvm bootstrap bot<br>
><br>
> (<a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/</a>).<br>
><br>
> In clang itself there are two leaks<br>
><br>
> (<a href="http://llvm.org/bugs/show_bug.cgi?id=18318" target="_blank">http://llvm.org/bugs/show_bug.cgi?id=18318</a>,<br>
> <a href="http://llvm-reviews.chandlerc.com/D2472" target="_blank">http://llvm-reviews.chandlerc.com/D2472</a>)<br>
><br>
> and one lsan-hostile feature (<a href="http://llvm.org/bugs/show_bug.cgi?id=18320" target="_blank">http://llvm.org/bugs/show_bug.cgi?id=18320</a>),<br>
><br>
> all of which are easy to fix.<br>
><br>
> And there are also lots of leaks in TableGen.<br>
<br>
</div>I think the problem with TableGen is that we call leak checking too<br>
late - after the global destructors,<br>
not before them. IIRC pointers to objects "leaked" in TableGen are<br>
stored in a set with static storage duration.<br>
If we're able to call __lsan_do_leak_check() right after main(), we<br>
will treat that objects as reachable.<br></blockquote><div><br></div><div>This is part of the problem. Indeed, there is code like this:</div><div><br></div><div>void foo() {</div><div>  static Pool ThePool;</div><div>   ...</div>
<div>  ThePool.Insert(new Stuff);</div><div>  ...</div><div>}</div><div><br></div><div>This static variable is destructed w/o deleting the contents and lsan complains. </div><div>I've replaced some of these objects with </div>
<div>  static Pool *ThePool = new Pool</div><div>and those leaks were gone. </div><div><br></div><div>But then there were a few other leaks of different nature, all of which I did not want to investigate. </div><div><br></div>
<div>--kcc </div><div> </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
I considered adding a call to __lsan_do_leak_check into<br>
llvm_shutdown() function, but that looks wrong -<br>
for instance, llvm_shutdown() may be called when a dynamic library is unloaded.<br></blockquote><div><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div><div class="h5"><br>
><br>
> Would anyone be interested in fixing TableGen leaks?<br>
><br>
> I'd guess not since TableGen is not a user-facing utility, leaks there are<br>
> not too harmful.<br>
><br>
> If so, I'd like to disable lsan for TableGen so that<br>
><br>
> we can enable lsan on the bootstrap bot soon. Objections?<br>
><br>
> --kcc<br>
><br>
> Index: utils/TableGen/TableGen.cpp<br>
><br>
> ===================================================================<br>
><br>
> --- utils/TableGen/TableGen.cpp (revision 198007)<br>
><br>
> +++ utils/TableGen/TableGen.cpp (working copy)<br>
><br>
> @@ -180,3 +180,7 @@<br>
><br>
><br>
><br>
>    return TableGenMain(argv[0], &LLVMTableGenMain);<br>
><br>
>  }<br>
><br>
> +<br>
><br>
> +extern "C" {<br>
><br>
> +int __lsan_is_turned_off() { return 1; }<br>
><br>
> +}  // extern "C"<br>
><br>
> Index: tools/clang/utils/TableGen/TableGen.cpp<br>
><br>
> ===================================================================<br>
><br>
> --- tools/clang/utils/TableGen/TableGen.cpp     (revision 198007)<br>
><br>
> +++ tools/clang/utils/TableGen/TableGen.cpp     (working copy)<br>
><br>
> @@ -248,3 +248,7 @@<br>
><br>
><br>
><br>
>    return TableGenMain(argv[0], &ClangTableGenMain);<br>
><br>
>  }<br>
><br>
> +<br>
><br>
> +extern "C" {<br>
><br>
> +int __lsan_is_turned_off() { return 1; }<br>
><br>
> +}  // extern "C"<br>
><br>
><br>
><br>
</div></div>> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
<span class=""><font color="#888888"><br>
<br>
<br>
--<br>
Alexey Samsonov, MSK<br>
</font></span></blockquote></div><br></div></div>