diff options
author | Eric Christopher <echristo@apple.com> | 2012-04-23 19:00:11 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2012-04-23 19:00:11 +0000 |
commit | 216432df5ac897327a0cb6323f08811910481038 (patch) | |
tree | d7d724e25a201502fc9f16809ae0081c9c9753a6 | |
parent | e3fd2a36d93ed65fabe9cd8e1c98edd8d4f7ec62 (diff) | |
download | external_llvm-216432df5ac897327a0cb6323f08811910481038.tar.gz external_llvm-216432df5ac897327a0cb6323f08811910481038.tar.bz2 external_llvm-216432df5ac897327a0cb6323f08811910481038.zip |
Allow forward declarations to take a context. This helps the debugger
find forward declarations in the context that the actual definition
will occur.
rdar://11291658
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155380 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Analysis/DIBuilder.h | 4 | ||||
-rw-r--r-- | lib/Analysis/DIBuilder.cpp | 15 |
2 files changed, 10 insertions, 9 deletions
diff --git a/include/llvm/Analysis/DIBuilder.h b/include/llvm/Analysis/DIBuilder.h index 2d109cdbf0..d79c2d5c2a 100644 --- a/include/llvm/Analysis/DIBuilder.h +++ b/include/llvm/Analysis/DIBuilder.h @@ -348,8 +348,8 @@ namespace llvm { DIType createTemporaryType(DIFile F); /// createForwardDecl - Create a temporary forward-declared type. - DIType createForwardDecl(unsigned Tag, StringRef Name, DIFile F, - unsigned Line, unsigned RuntimeLang = 0); + DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope, + DIFile F, unsigned Line, unsigned RuntimeLang = 0); /// retainType - Retain DIType in a module even if it is not referenced /// through debug info anchors. diff --git a/lib/Analysis/DIBuilder.cpp b/lib/Analysis/DIBuilder.cpp index 85913b11be..a227a3b555 100644 --- a/lib/Analysis/DIBuilder.cpp +++ b/lib/Analysis/DIBuilder.cpp @@ -47,16 +47,16 @@ void DIBuilder::finalize() { DIType(TempSubprograms).replaceAllUsesWith(SPs); for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i) { DISubprogram SP(SPs.getElement(i)); + SmallVector<Value *, 4> Variables; if (NamedMDNode *NMD = getFnSpecificMDNode(M, SP)) { - SmallVector<Value *, 4> Variables; for (unsigned ii = 0, ee = NMD->getNumOperands(); ii != ee; ++ii) Variables.push_back(NMD->getOperand(ii)); - if (MDNode *Temp = SP.getVariablesNodes()) { - DIArray AV = getOrCreateArray(Variables); - DIType(Temp).replaceAllUsesWith(AV); - } NMD->eraseFromParent(); } + if (MDNode *Temp = SP.getVariablesNodes()) { + DIArray AV = getOrCreateArray(Variables); + DIType(Temp).replaceAllUsesWith(AV); + } } DIArray GVs = getOrCreateArray(AllGVs); @@ -677,12 +677,13 @@ DIType DIBuilder::createTemporaryType(DIFile F) { /// createForwardDecl - Create a temporary forward-declared type that /// can be RAUW'd if the full type is seen. -DIType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name, DIFile F, +DIType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name, + DIDescriptor Scope, DIFile F, unsigned Line, unsigned RuntimeLang) { // Create a temporary MDNode. Value *Elts[] = { GetTagConstant(VMContext, Tag), - NULL, // TheCU + getNonCompileUnitScope(Scope), MDString::get(VMContext, Name), F, ConstantInt::get(Type::getInt32Ty(VMContext), Line), |