Chandler Carruth
2013-Dec-26 04:53 UTC
[LLVMdev] [cfe-dev] lsan for LLVM bootstrap; leaks in TableGen
LGTM. I think it is totally reasonable to just disable LSan directly in tablegen at least for now. I would leave some comments on the disabling to clarify: 1) What it does, the reader may not have heard about LSan. 2) Some of the high-level information from this thread as pointers for anyone who wants to go and fix this some day. -Chandler On Wed, Dec 25, 2013 at 2:26 PM, Kostya Serebryany <kcc at google.com> wrote:> > > > On Wed, Dec 25, 2013 at 11:21 PM, Alexey Samsonov <samsonov at google.com>wrote: > >> On Wed, Dec 25, 2013 at 9:38 PM, dblaikie at gmail.com <dblaikie at gmail.com> >> wrote: >> > Its generally been by design that tblgen leaks. Might be nice to fix >> one day >> > but it's been that way for a while now so don't expect it to be fixed >> soon. >> > >> > If thats the suppression mechanism of choice (I would've expected a >> build >> > flag option) for lsan, I'd say go for it. >> > >> > (Maybe there's some existing build flag handling for valgrind so as not >> to >> > leak check tblgen, but that would be a runtime flag, not build time) >> > >> > On Wednesday, December 25, 2013 7:08:27 AM, Kostya Serebryany >> > <kcc at google.com> wrote: >> > >> > Hi, >> > >> > We are trying to enable LeakSanitizer on our asan/msan llvm bootstrap >> bot >> > >> > (http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/). >> > >> > In clang itself there are two leaks >> > >> > (http://llvm.org/bugs/show_bug.cgi?id=18318, >> > http://llvm-reviews.chandlerc.com/D2472) >> > >> > and one lsan-hostile feature ( >> http://llvm.org/bugs/show_bug.cgi?id=18320), >> > >> > all of which are easy to fix. >> > >> > And there are also lots of leaks in TableGen. >> >> I think the problem with TableGen is that we call leak checking too >> late - after the global destructors, >> not before them. IIRC pointers to objects "leaked" in TableGen are >> stored in a set with static storage duration. >> If we're able to call __lsan_do_leak_check() right after main(), we >> will treat that objects as reachable. >> > > This is part of the problem. Indeed, there is code like this: > > void foo() { > static Pool ThePool; > ... > ThePool.Insert(new Stuff); > ... > } > > This static variable is destructed w/o deleting the contents and lsan > complains. > I've replaced some of these objects with > static Pool *ThePool = new Pool > and those leaks were gone. > > But then there were a few other leaks of different nature, all of which I > did not want to investigate. > > --kcc > > > >> I considered adding a call to __lsan_do_leak_check into >> llvm_shutdown() function, but that looks wrong - >> for instance, llvm_shutdown() may be called when a dynamic library is >> unloaded. >> > > > >> >> > >> > Would anyone be interested in fixing TableGen leaks? >> > >> > I'd guess not since TableGen is not a user-facing utility, leaks there >> are >> > not too harmful. >> > >> > If so, I'd like to disable lsan for TableGen so that >> > >> > we can enable lsan on the bootstrap bot soon. Objections? >> > >> > --kcc >> > >> > Index: utils/TableGen/TableGen.cpp >> > >> > ==================================================================>> > >> > --- utils/TableGen/TableGen.cpp (revision 198007) >> > >> > +++ utils/TableGen/TableGen.cpp (working copy) >> > >> > @@ -180,3 +180,7 @@ >> > >> > >> > >> > return TableGenMain(argv[0], &LLVMTableGenMain); >> > >> > } >> > >> > + >> > >> > +extern "C" { >> > >> > +int __lsan_is_turned_off() { return 1; } >> > >> > +} // extern "C" >> > >> > Index: tools/clang/utils/TableGen/TableGen.cpp >> > >> > ==================================================================>> > >> > --- tools/clang/utils/TableGen/TableGen.cpp (revision 198007) >> > >> > +++ tools/clang/utils/TableGen/TableGen.cpp (working copy) >> > >> > @@ -248,3 +248,7 @@ >> > >> > >> > >> > return TableGenMain(argv[0], &ClangTableGenMain); >> > >> > } >> > >> > + >> > >> > +extern "C" { >> > >> > +int __lsan_is_turned_off() { return 1; } >> > >> > +} // extern "C" >> > >> > >> > >> > _______________________________________________ >> > cfe-dev mailing list >> > cfe-dev at cs.uiuc.edu >> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev >> > >> >> >> >> -- >> Alexey Samsonov, MSK >> > > > _______________________________________________ > cfe-dev mailing list > cfe-dev at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131225/2177a707/attachment.html>
Kostya Serebryany
2013-Dec-26 07:40 UTC
[LLVMdev] [cfe-dev] lsan for LLVM bootstrap; leaks in TableGen
Like this? +extern "C" { +// Disable LeakSanitizer, see http://llvm.org/bugs/show_bug.cgi?id=18325. +int __lsan_is_turned_off() { return 1; } +} // extern "C" On Thu, Dec 26, 2013 at 8:53 AM, Chandler Carruth <chandlerc at google.com>wrote:> LGTM. > > I think it is totally reasonable to just disable LSan directly in tablegen > at least for now. > > I would leave some comments on the disabling to clarify: > 1) What it does, the reader may not have heard about LSan. > 2) Some of the high-level information from this thread as pointers for > anyone who wants to go and fix this some day. > > -Chandler > > > On Wed, Dec 25, 2013 at 2:26 PM, Kostya Serebryany <kcc at google.com> wrote: > >> >> >> >> On Wed, Dec 25, 2013 at 11:21 PM, Alexey Samsonov <samsonov at google.com>wrote: >> >>> On Wed, Dec 25, 2013 at 9:38 PM, dblaikie at gmail.com <dblaikie at gmail.com> >>> wrote: >>> > Its generally been by design that tblgen leaks. Might be nice to fix >>> one day >>> > but it's been that way for a while now so don't expect it to be fixed >>> soon. >>> > >>> > If thats the suppression mechanism of choice (I would've expected a >>> build >>> > flag option) for lsan, I'd say go for it. >>> > >>> > (Maybe there's some existing build flag handling for valgrind so as >>> not to >>> > leak check tblgen, but that would be a runtime flag, not build time) >>> > >>> > On Wednesday, December 25, 2013 7:08:27 AM, Kostya Serebryany >>> > <kcc at google.com> wrote: >>> > >>> > Hi, >>> > >>> > We are trying to enable LeakSanitizer on our asan/msan llvm bootstrap >>> bot >>> > >>> > (http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/). >>> > >>> > In clang itself there are two leaks >>> > >>> > (http://llvm.org/bugs/show_bug.cgi?id=18318, >>> > http://llvm-reviews.chandlerc.com/D2472) >>> > >>> > and one lsan-hostile feature ( >>> http://llvm.org/bugs/show_bug.cgi?id=18320), >>> > >>> > all of which are easy to fix. >>> > >>> > And there are also lots of leaks in TableGen. >>> >>> I think the problem with TableGen is that we call leak checking too >>> late - after the global destructors, >>> not before them. IIRC pointers to objects "leaked" in TableGen are >>> stored in a set with static storage duration. >>> If we're able to call __lsan_do_leak_check() right after main(), we >>> will treat that objects as reachable. >>> >> >> This is part of the problem. Indeed, there is code like this: >> >> void foo() { >> static Pool ThePool; >> ... >> ThePool.Insert(new Stuff); >> ... >> } >> >> This static variable is destructed w/o deleting the contents and lsan >> complains. >> I've replaced some of these objects with >> static Pool *ThePool = new Pool >> and those leaks were gone. >> >> But then there were a few other leaks of different nature, all of which I >> did not want to investigate. >> >> --kcc >> >> >> >>> I considered adding a call to __lsan_do_leak_check into >>> llvm_shutdown() function, but that looks wrong - >>> for instance, llvm_shutdown() may be called when a dynamic library is >>> unloaded. >>> >> >> >> >>> >>> > >>> > Would anyone be interested in fixing TableGen leaks? >>> > >>> > I'd guess not since TableGen is not a user-facing utility, leaks there >>> are >>> > not too harmful. >>> > >>> > If so, I'd like to disable lsan for TableGen so that >>> > >>> > we can enable lsan on the bootstrap bot soon. Objections? >>> > >>> > --kcc >>> > >>> > Index: utils/TableGen/TableGen.cpp >>> > >>> > ==================================================================>>> > >>> > --- utils/TableGen/TableGen.cpp (revision 198007) >>> > >>> > +++ utils/TableGen/TableGen.cpp (working copy) >>> > >>> > @@ -180,3 +180,7 @@ >>> > >>> > >>> > >>> > return TableGenMain(argv[0], &LLVMTableGenMain); >>> > >>> > } >>> > >>> > + >>> > >>> > +extern "C" { >>> > >>> > +int __lsan_is_turned_off() { return 1; } >>> > >>> > +} // extern "C" >>> > >>> > Index: tools/clang/utils/TableGen/TableGen.cpp >>> > >>> > ==================================================================>>> > >>> > --- tools/clang/utils/TableGen/TableGen.cpp (revision 198007) >>> > >>> > +++ tools/clang/utils/TableGen/TableGen.cpp (working copy) >>> > >>> > @@ -248,3 +248,7 @@ >>> > >>> > >>> > >>> > return TableGenMain(argv[0], &ClangTableGenMain); >>> > >>> > } >>> > >>> > + >>> > >>> > +extern "C" { >>> > >>> > +int __lsan_is_turned_off() { return 1; } >>> > >>> > +} // extern "C" >>> > >>> > >>> > >>> > _______________________________________________ >>> > cfe-dev mailing list >>> > cfe-dev at cs.uiuc.edu >>> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev >>> > >>> >>> >>> >>> -- >>> Alexey Samsonov, MSK >>> >> >> >> _______________________________________________ >> cfe-dev mailing list >> cfe-dev at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev >> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131226/3bc2673a/attachment.html>
Chandler Carruth
2013-Dec-26 07:49 UTC
[LLVMdev] [cfe-dev] lsan for LLVM bootstrap; leaks in TableGen
On Thu, Dec 26, 2013 at 2:40 AM, Kostya Serebryany <kcc at google.com> wrote:> Like this? > > +extern "C" { > +// Disable LeakSanitizer, see http://llvm.org/bugs/show_bug.cgi?id=18325. >We don't often reference bugs in comments. I would give a brief summary in the text of the comment, and mention the bug in the commit log. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131226/80334505/attachment.html>
Apparently Analagous Threads
- [LLVMdev] [cfe-dev] lsan for LLVM bootstrap; leaks in TableGen
- [LLVMdev] [cfe-dev] lsan for LLVM bootstrap; leaks in TableGen
- [LLVMdev] lsan for LLVM bootstrap; leaks in TableGen
- [LLVMdev] [cfe-dev] lsan for LLVM bootstrap; leaks in TableGen
- Trouble supressing ASAN reported leaks