Index: llvm/lib/DebugInfo/LogicalView/Readers/LVBinaryReader.cpp =================================================================== --- llvm/lib/DebugInfo/LogicalView/Readers/LVBinaryReader.cpp +++ llvm/lib/DebugInfo/LogicalView/Readers/LVBinaryReader.cpp @@ -562,7 +562,7 @@ size_t Index = 0; dbgs() << "\nSectionIndex: " << format_decimal(SectionIndex, 3) << " Scope DIE: " << hexValue(Scope->getOffset()) << "\n" - << format("Process instructions lines: %d\n", + << format("Process instruction lines: %d\n", InstructionLines.size()); for (const LVLine *Line : InstructionLines) dbgs() << format_decimal(++Index, 5) << ": " @@ -640,8 +640,6 @@ if (DebugLines->empty()) { if (const LVScopes *Scopes = CompileUnit->getScopes()) for (LVScope *Scope : *Scopes) { - if (Scope->getIsArtificial()) - continue; LVLines *Lines = ScopeInstructions.find(Scope); if (Lines) { @@ -649,14 +647,20 @@ size_t Index = 0; dbgs() << "\nSectionIndex: " << format_decimal(SectionIndex, 3) << " Scope DIE: " << hexValue(Scope->getOffset()) << "\n" - << format("Instructions lines: %d\n", Lines->size()); + << format("Instruction lines: %d\n", Lines->size()); for (const LVLine *Line : *Lines) dbgs() << format_decimal(++Index, 5) << ": " << hexValue(Line->getOffset()) << ", (" << Line->getName() << ")\n"; }); - DebugLines->append(*Lines); + if (Scope->getIsArtificial()) { + // Add the instruction lines to their artificial scope. + for (LVLine *Line : *Lines) + Scope->addElement(Line); + } else { + DebugLines->append(*Lines); + } Lines->clear(); } } Index: llvm/lib/DebugInfo/LogicalView/Readers/LVELFReader.cpp =================================================================== --- llvm/lib/DebugInfo/LogicalView/Readers/LVELFReader.cpp +++ llvm/lib/DebugInfo/LogicalView/Readers/LVELFReader.cpp @@ -726,9 +726,8 @@ // In DWARF5 the file indexes start at 0; bool IncrementIndex = Lines->Prologue.getVersion() >= 5; - // Get the source lines. - if ((options().getAttributeRange() || options().getPrintLines()) && - Lines->Rows.size()) + // Get the source lines if requested by command line option. + if (options().getPrintLines() && Lines->Rows.size()) for (const DWARFDebugLine::Row &Row : Lines->Rows) { // Here we collect logical debug lines in CULines. Later on, // the 'processLines()' function will move each created logical line Index: llvm/test/tools/llvm-debuginfo-analyzer/DWARF/pr-incorrect-logical-instructions.test =================================================================== --- llvm/test/tools/llvm-debuginfo-analyzer/DWARF/pr-incorrect-logical-instructions.test +++ llvm/test/tools/llvm-debuginfo-analyzer/DWARF/pr-incorrect-logical-instructions.test @@ -1,8 +1,5 @@ ; REQUIRES: x86-registered-target -; FIXME: Memory leak https://reviews.llvm.org/D125783 -; UNSUPPORTED: asan - ; * Added incorrect logical instructions for: --print=lines,instructions ; 'bar' and 'foo' showing extra instruction from compiler generated functions: ; '_cxx_global_var_init' and '_GLOBAL_sub_l_suite_lexical_01.cpp' Index: llvm/unittests/DebugInfo/LogicalView/ELFReaderTest.cpp =================================================================== --- llvm/unittests/DebugInfo/LogicalView/ELFReaderTest.cpp +++ llvm/unittests/DebugInfo/LogicalView/ELFReaderTest.cpp @@ -330,9 +330,7 @@ llvm::sys::InitializeCOMRAII COM(llvm::sys::COMThreadingMode::MultiThreaded); - SmallString<128> InputsDir = unittest::getInputFileDirectory(TestMainArgv0); - - // This test requires a x86-registered-target + // This test requires a x86-registered-target. Triple TT; TT.setArch(Triple::x86_64); TT.setVendor(Triple::UnknownVendor); @@ -342,6 +340,8 @@ if (!TargetRegistry::lookupTarget(std::string(TT.str()), TargetLookupError)) return; + SmallString<128> InputsDir = unittest::getInputFileDirectory(TestMainArgv0); + // Logical elements general properties and selection. elementProperties(InputsDir); elementSelection(InputsDir);