================
@@ -50,6 +53,12 @@ class Symbol : public SymbolContextScope {
 
   Symbol(const Symbol &rhs);
 
+  ~Symbol() {
+    if (m_type != lldb::eSymbolTypeReExported &&
----------------
rupprecht wrote:

I don't fully understand it, but this patch introduces a leak (caught by asan 
w/ leak sanitizer enabled). DWARFASTParserClangTests.cpp and 
TestDWARFCallFrameInfo.cpp catch the leak.

Changing this line to just `if (m_type != lldb::eSymbolTypeReExported)` (i.e. 
dropping the `m_type != lldb::eSymbolTypeInvalid` case) resolves the leak. Does 
that change make sense to you?

Sample stack trace, extracted from downstream test logs:

```
SanitizerError
AddressSanitizer: 2760 byte(s) leaked in 15 allocation(s).
Details

=================================================================
==6162==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 1472 byte(s) in 8 object(s) allocated from:
...
    #8 0x7f4d08980c00 in 
ObjectFileELF::CreateSections(lldb_private::SectionList&) 
lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp:2168:28
    #9 0x7f4d085c5651 in lldb_private::Module::GetSectionList() 
lldb/source/Core/Module.cpp:1226:17
    #10 0x7f4d08af4f6f in 
lldb_private::plugin::dwarf::SymbolFileDWARF::SymbolFileDWARF(std::__u::shared_ptr<lldb_private::ObjectFile>,
 lldb_private::SectionList*) 
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:490:44
    #11 0x7f4d08af331e in 
lldb_private::plugin::dwarf::SymbolFileDWARF::CreateInstance(std::__u::shared_ptr<lldb_private::ObjectFile>)
 lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:347:14
    #12 0x7f4d08cc36af in 
lldb_private::SymbolFile::FindPlugin(std::__u::shared_ptr<lldb_private::ObjectFile>)
 lldb/source/Symbol/SymbolFile.cpp:64:51
    #13 0x7f4d08cd2dc9 in 
lldb_private::SymbolVendor::AddSymbolFileRepresentation(std::__u::shared_ptr<lldb_private::ObjectFile>
 const&) lldb/source/Symbol/SymbolVendor.cpp:65:27
    #14 0x7f4d08cd2ba0 in 
lldb_private::SymbolVendor::FindPlugin(std::__u::shared_ptr<lldb_private::Module>
 const&, lldb_private::Stream*) lldb/source/Symbol/SymbolVendor.cpp:51:16
    #15 0x7f4d085c1d9f in lldb_private::Module::GetSymbolFile(bool, 
lldb_private::Stream*) lldb/source/Core/Module.cpp:991:13
    #16 0x7f50eadaf896 in 
lldb_private::YAMLModuleTester::YAMLModuleTester(llvm::StringRef, unsigned 
long) lldb/unittests/TestingSupport/Symbol/YAMLModuleTester.cpp:24:61
    #17 0x7f50eb471eea in DWARFASTParserClangYAMLTester 
lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp:53:9
    #18 0x7f50eb471eea in 
DWARFASTParserClangTests_TestRustVariantMember_Test::TestBody() 
lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp:2128:33
...

Direct leak of 1288 byte(s) in 7 object(s) allocated from:
...
    #8 0x7f4d08980c00 in 
ObjectFileELF::CreateSections(lldb_private::SectionList&) 
lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp:2168:28
    #9 0x7f4d085c5651 in lldb_private::Module::GetSectionList() 
lldb/source/Core/Module.cpp:1226:17
    #10 0x7f4d08af4f6f in 
lldb_private::plugin::dwarf::SymbolFileDWARF::SymbolFileDWARF(std::__u::shared_ptr<lldb_private::ObjectFile>,
 lldb_private::SectionList*) 
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:490:44
    #11 0x7f4d08af331e in 
lldb_private::plugin::dwarf::SymbolFileDWARF::CreateInstance(std::__u::shared_ptr<lldb_private::ObjectFile>)
 lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:347:14
    #12 0x7f4d08cc36af in 
lldb_private::SymbolFile::FindPlugin(std::__u::shared_ptr<lldb_private::ObjectFile>)
 lldb/source/Symbol/SymbolFile.cpp:64:51
    #13 0x7f4d08cd2dc9 in 
lldb_private::SymbolVendor::AddSymbolFileRepresentation(std::__u::shared_ptr<lldb_private::ObjectFile>
 const&) lldb/source/Symbol/SymbolVendor.cpp:65:27
    #14 0x7f4d08cd2ba0 in 
lldb_private::SymbolVendor::FindPlugin(std::__u::shared_ptr<lldb_private::Module>
 const&, lldb_private::Stream*) lldb/source/Symbol/SymbolVendor.cpp:51:16
    #15 0x7f4d085c1d9f in lldb_private::Module::GetSymbolFile(bool, 
lldb_private::Stream*) lldb/source/Core/Module.cpp:991:13
    #16 0x7f50eadaf896 in 
lldb_private::YAMLModuleTester::YAMLModuleTester(llvm::StringRef, unsigned 
long) lldb/unittests/TestingSupport/Symbol/YAMLModuleTester.cpp:24:61
    #17 0x7f50eb461ba2 in DWARFASTParserClangYAMLTester 
lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp:53:9
    #18 0x7f50eb461ba2 in 
DWARFASTParserClangTests_TestDefaultTemplateParamParsing_Test::TestBody() 
lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp:587:33
...
```

https://github.com/llvm/llvm-project/pull/213356
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to