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 /lib/Analysis/DIBuilder.cpp | |
parent | e3fd2a36d93ed65fabe9cd8e1c98edd8d4f7ec62 (diff) | |
download | external_llvm-216432df5ac897327a0cb6323f08811910481038.zip external_llvm-216432df5ac897327a0cb6323f08811910481038.tar.gz external_llvm-216432df5ac897327a0cb6323f08811910481038.tar.bz2 |
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
Diffstat (limited to 'lib/Analysis/DIBuilder.cpp')
-rw-r--r-- | lib/Analysis/DIBuilder.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/Analysis/DIBuilder.cpp b/lib/Analysis/DIBuilder.cpp index 85913b1..a227a3b 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), |