summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2014-03-18 02:35:03 +0000
committerAdrian Prantl <aprantl@apple.com>2014-03-18 02:35:03 +0000
commitff5abbb4d3948fbac154e38e4412d2b93f969846 (patch)
tree00fdd7015ac5512741c3ef566272f0a8e9efcb19 /lib
parent5e8144df32cad1bf29cf7cc27f53870302826256 (diff)
downloadllvm-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.cpp9
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.cpp5
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;