From 502ffc7e2d86f9b553ff0ab77a81a470aa777e67 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Tue, 27 May 2014 19:34:32 +0000 Subject: [PATCH] DebugInfo: Simplify solution to avoid DW_AT_artificial on inlined parameters. Originally committed in r207717, I clearly didn't look very closely at the code to understand how existing things were working... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209680 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 7 +------ lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 22 +++++++++------------- lib/CodeGen/AsmPrinter/DwarfUnit.h | 6 ++---- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index c0badde3685..967c7b1b596 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -448,12 +448,7 @@ static std::unique_ptr constructVariableDIE(DwarfCompileUnit &TheCU, DbgVariable &DV, const LexicalScope &Scope, DIE *&ObjectPointer) { - AbstractOrInlined AOI = AOI_None; - if (Scope.isAbstractScope()) - AOI = AOI_Abstract; - else if (Scope.getInlinedAt()) - AOI = AOI_Inlined; - auto Var = TheCU.constructVariableDIE(DV, AOI); + auto Var = TheCU.constructVariableDIE(DV, Scope.isAbstractScope()); if (DV.isObjectPointer()) ObjectPointer = Var.get(); return Var; diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 2707f8b73d8..4bf0b187847 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1769,34 +1769,30 @@ void DwarfUnit::constructContainingTypeDIEs() { /// constructVariableDIE - Construct a DIE for the given DbgVariable. std::unique_ptr DwarfUnit::constructVariableDIE(DbgVariable &DV, - AbstractOrInlined AbsIn) { - auto D = constructVariableDIEImpl(DV, AbsIn); + bool Abstract) { + auto D = constructVariableDIEImpl(DV, Abstract); DV.setDIE(*D); return D; } -std::unique_ptr -DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV, - AbstractOrInlined AbsIn) { +std::unique_ptr DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV, + bool Abstract) { StringRef Name = DV.getName(); // Define variable debug information entry. auto VariableDie = make_unique(DV.getTag()); - DbgVariable *AbsVar = DV.getAbstractVariable(); - DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : nullptr; - if (AbsDIE) - addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, *AbsDIE); + if (DbgVariable *AbsVar = DV.getAbstractVariable()) + addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, *AbsVar->getDIE()); else { if (!Name.empty()) addString(*VariableDie, dwarf::DW_AT_name, Name); addSourceLine(*VariableDie, DV.getVariable()); addType(*VariableDie, DV.getType()); + if (DV.isArtificial()) + addFlag(*VariableDie, dwarf::DW_AT_artificial); } - if (AbsIn != AOI_Inlined && DV.isArtificial()) - addFlag(*VariableDie, dwarf::DW_AT_artificial); - - if (AbsIn == AOI_Abstract) + if (Abstract) return VariableDie; // Add variable address. diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index 7025b712f0e..acb75283530 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -61,8 +61,6 @@ public: void addRange(RangeSpan Range) { Ranges.push_back(Range); } }; -enum AbstractOrInlined { AOI_None, AOI_Inlined, AOI_Abstract }; - //===----------------------------------------------------------------------===// /// Unit - This dwarf writer support class manages information associated /// with a source file. @@ -419,7 +417,7 @@ public: /// constructVariableDIE - Construct a DIE for the given DbgVariable. std::unique_ptr constructVariableDIE(DbgVariable &DV, - AbstractOrInlined AbsIn = AOI_None); + bool Abstract = false); /// constructSubprogramArguments - Construct function argument DIEs. void constructSubprogramArguments(DIE &Buffer, DIArray Args); @@ -457,7 +455,7 @@ private: /// \brief Construct a DIE for the given DbgVariable without initializing the /// DbgVariable's DIE reference. std::unique_ptr constructVariableDIEImpl(const DbgVariable &DV, - AbstractOrInlined AbsIn); + bool Abstract); /// constructTypeDIE - Construct basic type die from DIBasicType. void constructTypeDIE(DIE &Buffer, DIBasicType BTy);