summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/DIBuilder.cpp
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2015-02-17 19:17:39 +0000
committerAdrian Prantl <aprantl@apple.com>2015-02-17 19:17:39 +0000
commitea7f1c2d192bdfd724aabea78e84de186bc327a3 (patch)
tree986bbd666b67e016587af087fe56f89ed829ea71 /llvm/lib/IR/DIBuilder.cpp
parent1d902b7cc7cfc2f08cd6ba52acd1cd44ac291b93 (diff)
downloadbcm5719-llvm-ea7f1c2d192bdfd724aabea78e84de186bc327a3.tar.gz
bcm5719-llvm-ea7f1c2d192bdfd724aabea78e84de186bc327a3.zip
DIBuilder: add trackIfUnresolved() to all nodes that may be cyclic.
Tested in clang/test/CodeGenObjCCXX/debug-info-cyclic.mm rdar://problem/19839612 llvm-svn: 229521
Diffstat (limited to 'llvm/lib/IR/DIBuilder.cpp')
-rw-r--r--llvm/lib/IR/DIBuilder.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp
index 7ff7c3848b2..f193e5331dd 100644
--- a/llvm/lib/IR/DIBuilder.cpp
+++ b/llvm/lib/IR/DIBuilder.cpp
@@ -414,7 +414,6 @@ DIDerivedType DIBuilder::createInheritance(DIType Ty, DIType BaseTy,
.get(VMContext),
nullptr, Ty.getRef(), BaseTy.getRef()};
auto R = DIDerivedType(MDNode::get(VMContext, Elts));
- trackIfUnresolved(R);
return R;
}
@@ -581,6 +580,7 @@ DICompositeType DIBuilder::createClassType(DIDescriptor Context, StringRef Name,
"createClassType should return a DICompositeType");
if (!UniqueIdentifier.empty())
retainType(R);
+ trackIfUnresolved(R);
return R;
}
@@ -614,6 +614,7 @@ DICompositeType DIBuilder::createStructType(DIDescriptor Context,
"createStructType should return a DICompositeType");
if (!UniqueIdentifier.empty())
retainType(R);
+ trackIfUnresolved(R);
return R;
}
@@ -642,6 +643,7 @@ DICompositeType DIBuilder::createUnionType(DIDescriptor Scope, StringRef Name,
DICompositeType R(MDNode::get(VMContext, Elts));
if (!UniqueIdentifier.empty())
retainType(R);
+ trackIfUnresolved(R);
return R;
}
@@ -688,6 +690,7 @@ DICompositeType DIBuilder::createEnumerationType(
AllEnumTypes.push_back(CTy);
if (!UniqueIdentifier.empty())
retainType(CTy);
+ trackIfUnresolved(CTy);
return CTy;
}
@@ -709,7 +712,9 @@ DICompositeType DIBuilder::createArrayType(uint64_t Size, uint64_t AlignInBits,
Ty.getRef(), Subscripts, nullptr, nullptr,
nullptr // Type Identifer
};
- return DICompositeType(MDNode::get(VMContext, Elts));
+ DICompositeType R(MDNode::get(VMContext, Elts));
+ trackIfUnresolved(R);
+ return R;
}
DICompositeType DIBuilder::createVectorType(uint64_t Size, uint64_t AlignInBits,
@@ -730,7 +735,9 @@ DICompositeType DIBuilder::createVectorType(uint64_t Size, uint64_t AlignInBits,
Ty.getRef(), Subscripts, nullptr, nullptr,
nullptr // Type Identifer
};
- return DICompositeType(MDNode::get(VMContext, Elts));
+ DICompositeType R(MDNode::get(VMContext, Elts));
+ trackIfUnresolved(R);
+ return R;
}
static HeaderBuilder setTypeFlagsInHeader(StringRef Header,
@@ -807,6 +814,7 @@ DIBuilder::createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope,
"createForwardDecl result should be a DIType");
if (!UniqueIdentifier.empty())
retainType(RetTy);
+ trackIfUnresolved(RetTy);
return RetTy;
}
@@ -835,6 +843,7 @@ DICompositeType DIBuilder::createReplaceableCompositeType(
"createReplaceableForwardDecl result should be a DIType");
if (!UniqueIdentifier.empty())
retainType(RetTy);
+ trackIfUnresolved(RetTy);
return RetTy;
}
@@ -1025,6 +1034,7 @@ DISubprogram DIBuilder::createFunction(DIDescriptor Context, StringRef Name,
// do not lose this mdnode.
if (isDefinition)
AllSubprograms.push_back(Node);
+ trackIfUnresolved(Node);
return Node;
});
}
@@ -1080,6 +1090,7 @@ DISubprogram DIBuilder::createMethod(DIDescriptor Context, StringRef Name,
AllSubprograms.push_back(Node);
DISubprogram S(Node);
assert(S.isSubprogram() && "createMethod should return a valid DISubprogram");
+ trackIfUnresolved(S);
return S;
}
OpenPOWER on IntegriCloud