diff options
author | Adrian Prantl <aprantl@apple.com> | 2014-03-18 02:35:03 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2014-03-18 02:35:03 +0000 |
commit | ff5abbb4d3948fbac154e38e4412d2b93f969846 (patch) | |
tree | 00fdd7015ac5512741c3ef566272f0a8e9efcb19 /lib | |
parent | 5e8144df32cad1bf29cf7cc27f53870302826256 (diff) | |
download | llvm-ff5abbb4d3948fbac154e38e4412d2b93f969846.tar.gz llvm-ff5abbb4d3948fbac154e38e4412d2b93f969846.tar.bz2 llvm-ff5abbb4d3948fbac154e38e4412d2b93f969846.tar.xz |
DwarfDebug: Only unique retained types instead of all types.
This is a follow-up to r203983 based on feedback from dblaikie and mren (Thanks!)
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204107 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 9 | ||||
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 5 |
2 files changed, 9 insertions, 5 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index ecd10460a5..87f1878e86 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -846,8 +846,13 @@ void DwarfDebug::beginModule() { for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i) CU->getOrCreateTypeDIE(EnumTypes.getElement(i)); DIArray RetainedTypes = CUNode.getRetainedTypes(); - for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i) - CU->getOrCreateTypeDIE(RetainedTypes.getElement(i)); + for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i) { + DIType Ty(RetainedTypes.getElement(i)); + // The retained types array by design contains pointers to + // MDNodes rather than DIRefs. Unique them here. + DIType UniqueTy(resolve(Ty.getRef())); + CU->getOrCreateTypeDIE(UniqueTy); + } // Emit imported_modules last so that the relevant context is already // available. for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i) diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index a7b43d8032..be21d633e5 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -971,6 +971,8 @@ DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) { DIType Ty(TyNode); assert(Ty.isType()); + assert(*&Ty == resolve(Ty.getRef()) && + "type was not uniqued, possible ODR violation."); // Construct the context before querying for the existence of the DIE in case // such construction creates the DIE. @@ -978,9 +980,6 @@ DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) { DIE *ContextDIE = getOrCreateContextDIE(Context); assert(ContextDIE); - // Unique the type. This is a noop if the type has no unique identifier. - Ty = DIType(resolve(Ty.getRef())); - DIE *TyDIE = getDIE(Ty); if (TyDIE) return TyDIE; |