From e1ea4faca159ff8e6fba39d00fee8ea5b4b5efe8 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Tue, 18 Mar 2014 17:41:15 +0000 Subject: [PATCH] Debug info: Remove OdrMemberMap from DwarfDebug, it's not necessary. Follow-up to r203982. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204162 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 4 ++-- lib/CodeGen/AsmPrinter/DwarfDebug.h | 8 -------- lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 22 +++------------------- lib/CodeGen/AsmPrinter/DwarfUnit.h | 22 ---------------------- 4 files changed, 5 insertions(+), 51 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 87f1878e865..5fb603c143b 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -369,7 +369,6 @@ bool DwarfDebug::isSubprogramContext(const MDNode *Context) { // scope then create and insert DIEs for these variables. DIE *DwarfDebug::updateSubprogramScopeDIE(DwarfCompileUnit *SPCU, DISubprogram SP) { - SP = SPCU->getOdrUniqueSubprogram(resolve(SP.getContext()), SP); DIE *SPDie = SPCU->getDIE(SP); assert(SPDie && "Unable to find subprogram DIE!"); @@ -604,7 +603,8 @@ DIE *DwarfDebug::constructScopeDIE(DwarfCompileUnit *TheCU, if (!Scope || !Scope->getScopeNode()) return NULL; - DIScope DS(Scope->getScopeNode()); + // Unique scope where applicable. + DIScope DS(resolve(DIScope(Scope->getScopeNode()).getRef())); SmallVector Children; DIE *ObjectPointer = NULL; diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 2f6c2546ed4..b4a1cdde11b 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -346,9 +346,6 @@ class DwarfDebug : public AsmPrinterHandler { /// of in DwarfCompileUnit. DenseMap MDTypeNodeToDieMap; - // Used to unique C++ member function declarations. - StringMap OdrMemberMap; - // List of all labels used in aranges generation. std::vector ArangeLabels; @@ -700,11 +697,6 @@ public: return MDTypeNodeToDieMap.lookup(TypeMD); } - /// \brief Look up or create an entry in the OdrMemberMap. - const MDNode *&getOrCreateOdrMember(StringRef Key) { - return OdrMemberMap.GetOrCreateValue(Key).getValue(); - } - /// \brief Emit all Dwarf sections that should come prior to the /// content. void beginModule(); diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index be21d633e54..bf377f52d41 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1427,24 +1427,6 @@ DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) { return NDie; } -/// Unique C++ member function declarations based on their -/// context and mangled name. -DISubprogram -DwarfUnit::getOdrUniqueSubprogram(DIScope Context, DISubprogram SP) const { - if (!hasODR() || - !Context.isCompositeType() || - SP.getLinkageName().empty() || - SP.isDefinition()) - return SP; - // Create a key with the UID of the parent class and this SP's name. - Twine Key = SP.getContext().getName() + SP.getLinkageName(); - const MDNode *&Entry = DD->getOrCreateOdrMember(Key.str()); - if (!Entry) - Entry = &*SP; - - return DISubprogram(Entry); -} - /// getOrCreateSubprogramDIE - Create new DIE using SP. DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) { // Construct the context before querying for the existence of the DIE in case @@ -1452,8 +1434,10 @@ DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) { // declarations). DIScope Context = resolve(SP.getContext()); DIE *ContextDIE = getOrCreateContextDIE(Context); + // Unique declarations based on the ODR, where applicable. - SP = getOdrUniqueSubprogram(Context, SP); + SP = DISubprogram(DD->resolve(SP.getRef())); + assert(SP.Verify()); DIE *SPDie = getDIE(SP); if (SPDie) diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index 1c4e0e552f5..6f8e55edc91 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -487,28 +487,6 @@ public: virtual DwarfCompileUnit &getCU() = 0; - /// \brief Return whether this compilation unit has the - /// one-definition-rule (ODR). In C++ this allows the compiler to - /// perform type unique during LTO. - bool hasODR() const { - switch (getLanguage()) { - case dwarf::DW_LANG_C_plus_plus: - case dwarf::DW_LANG_C_plus_plus_03: - case dwarf::DW_LANG_C_plus_plus_11: - // For all we care, the C++ part of the language has the ODR and - // ObjC methods are not represented in a way that they could be - // confused with C++ member functions. - case dwarf::DW_LANG_ObjC_plus_plus: - return true; - default: - return false; - } - } - - /// \brief Unique C++ member function declarations based on their - /// context+mangled name. - DISubprogram getOdrUniqueSubprogram(DIScope Context, DISubprogram SP) const; - protected: /// getOrCreateStaticMemberDIE - Create new static data member DIE. DIE *getOrCreateStaticMemberDIE(DIDerivedType DT); -- 2.34.1