diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 15d90c54adfc..5a2bd479f277 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -89,8 +89,7 @@ bool DIEDwarfExpression::isFrameRegister(const TargetRegisterInfo &TRI, DwarfUnit::DwarfUnit(dwarf::Tag UnitTag, const DICompileUnit *Node, AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU) - : DIEUnit(UnitTag), CUNode(Node), Asm(A), DD(DW), DU(DWU), - IndexTyDie(nullptr) {} + : DIEUnit(UnitTag), CUNode(Node), Asm(A), DD(DW), DU(DWU) {} DwarfTypeUnit::DwarfTypeUnit(DwarfCompileUnit &CU, AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU, @@ -597,8 +596,10 @@ DIE *DwarfUnit::createTypeDIE(const DIScope *Context, DIE &ContextDIE, // Skip updating the accelerator tables since this is not the full type. if (MDString *TypeId = CTy->getRawIdentifier()) DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy); - else + else { + auto X = DD->enterNonTypeUnitContext(); finishNonUnitTypeDIE(TyDIE, CTy); + } return &TyDIE; } constructTypeDIE(TyDIE, CTy); @@ -1852,23 +1853,5 @@ void DwarfTypeUnit::finishNonUnitTypeDIE(DIE& D, const DICompositeType *CTy) { addString(D, dwarf::DW_AT_name, Name); if (Name.startswith("_STN") || !Name.contains('<')) addTemplateParams(D, CTy->getTemplateParams()); - // If the type is in an anonymous namespace, we can't reference it from a TU - // (since the type would be CU local and the TU doesn't specify which TU has - // the appropriate type definition) - so flag this emission as such and skip - // the rest of the emission now since we're going to throw out all this work - // and put the outer/referencing type in the CU instead. - // FIXME: Probably good to generalize this to a DICompositeType flag populated - // by the frontend, then we could use that to have types that can have - // decl+def merged by LTO but where the definition still doesn't go in a type - // unit because the type has only one definition. - for (DIScope *S = CTy->getScope(); S; S = S->getScope()) { - if (auto *NS = dyn_cast<DINamespace>(S)) { - if (NS->getName().empty()) { - DD->seenLocalType(); - break; - } - } - } - auto X = DD->enterNonTypeUnitContext(); getCU().createTypeDIE(CTy); } |
