summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/DIBuilder.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-03-27 17:29:58 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-03-27 17:29:58 +0000
commit3d2afaa29ea78b6170da9852ce5d57480720d1e0 (patch)
tree898d287e9f2cd9a4a0eb3081725093a0b4d2466d /llvm/lib/IR/DIBuilder.cpp
parentb4499078d1b5e159d03cf51011ea71027716cfff (diff)
downloadbcm5719-llvm-3d2afaa29ea78b6170da9852ce5d57480720d1e0.tar.gz
bcm5719-llvm-3d2afaa29ea78b6170da9852ce5d57480720d1e0.zip
Verifier: Check fields of MDVariable subclasses
Check fields from `MDLocalVariable` and `MDGlobalVariable` and change the accessors to downcast to the right types. `getType()` still returns `Metadata*` since it could be an `MDString`-based reference. Since local variables require non-null scopes, I also updated `LLParser` to require a `scope:` field. A number of testcases had grown bitrot and started failing with this patch; I committed them separately in r233349. If I just broke your out-of-tree testcases, you're probably hitting similar problems (so have a look there). llvm-svn: 233389
Diffstat (limited to 'llvm/lib/IR/DIBuilder.cpp')
-rw-r--r--llvm/lib/IR/DIBuilder.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp
index 9677de47f7b..ec5ee7da5cb 100644
--- a/llvm/lib/IR/DIBuilder.cpp
+++ b/llvm/lib/IR/DIBuilder.cpp
@@ -582,9 +582,10 @@ DIGlobalVariable DIBuilder::createGlobalVariable(
MDNode *Decl) {
checkGlobalVariableScope(Context);
- auto *N = MDGlobalVariable::get(VMContext, Context, Name, LinkageName, F,
- LineNumber, Ty, isLocalToUnit, true,
- getConstantOrNull(Val), Decl);
+ auto *N = MDGlobalVariable::get(
+ VMContext, cast_or_null<MDScope>(Context.get()), Name, LinkageName, F,
+ LineNumber, Ty, isLocalToUnit, true, getConstantOrNull(Val),
+ cast_or_null<MDDerivedType>(Decl));
AllGVs.push_back(N);
return N;
}
@@ -595,9 +596,10 @@ DIGlobalVariable DIBuilder::createTempGlobalVariableFwdDecl(
MDNode *Decl) {
checkGlobalVariableScope(Context);
- return MDGlobalVariable::getTemporary(VMContext, Context, Name, LinkageName,
- F, LineNumber, Ty, isLocalToUnit, false,
- getConstantOrNull(Val), Decl).release();
+ return MDGlobalVariable::getTemporary(
+ VMContext, cast_or_null<MDScope>(Context.get()), Name, LinkageName,
+ F, LineNumber, Ty, isLocalToUnit, false, getConstantOrNull(Val),
+ cast_or_null<MDDerivedType>(Decl)).release();
}
DIVariable DIBuilder::createLocalVariable(unsigned Tag, DIDescriptor Scope,
@@ -613,9 +615,9 @@ DIVariable DIBuilder::createLocalVariable(unsigned Tag, DIDescriptor Scope,
assert((!Context || Context.isScope()) &&
"createLocalVariable should be called with a valid Context");
- auto *Node =
- MDLocalVariable::get(VMContext, Tag, getNonCompileUnitScope(Scope), Name,
- File, LineNo, Ty, ArgNo, Flags);
+ auto *Node = MDLocalVariable::get(VMContext, Tag,
+ cast_or_null<MDLocalScope>(Context.get()),
+ Name, File, LineNo, Ty, ArgNo, Flags);
if (AlwaysPreserve) {
// The optimizer may remove local variable. If there is an interest
// to preserve variable info in such situation then stash it in a
OpenPOWER on IntegriCloud