diff options
author | Adrian Prantl <aprantl@apple.com> | 2015-02-17 19:17:39 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2015-02-17 19:17:39 +0000 |
commit | ea7f1c2d192bdfd724aabea78e84de186bc327a3 (patch) | |
tree | 986bbd666b67e016587af087fe56f89ed829ea71 /llvm/lib/IR/DIBuilder.cpp | |
parent | 1d902b7cc7cfc2f08cd6ba52acd1cd44ac291b93 (diff) | |
download | bcm5719-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.cpp | 17 |
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; } |