In GlobalVariable::setInitializer, assert that the initializer has the

right type.

llvm-svn: 89014
This commit is contained in:
Jeffrey Yasskin 2009-11-17 00:43:13 +00:00
parent 382a91041b
commit 135f2adcbb
2 changed files with 19 additions and 12 deletions

View File

@ -99,18 +99,10 @@ public:
assert(hasInitializer() && "GV doesn't have initializer!"); assert(hasInitializer() && "GV doesn't have initializer!");
return static_cast<Constant*>(Op<0>().get()); return static_cast<Constant*>(Op<0>().get());
} }
inline void setInitializer(Constant *CPV) { /// setInitializer - Sets the initializer for this global variable, removing
if (CPV == 0) { /// any existing initializer if InitVal==NULL. If this GV has type T*, the
if (hasInitializer()) { /// initializer must have type T.
Op<0>().set(0); void setInitializer(Constant *InitVal);
NumOperands = 0;
}
} else {
if (!hasInitializer())
NumOperands = 1;
Op<0>().set(CPV);
}
}
/// If the value is a global constant, its value is immutable throughout the /// If the value is a global constant, its value is immutable throughout the
/// runtime execution of the program. Assigning a value into the constant /// runtime execution of the program. Assigning a value into the constant

View File

@ -171,6 +171,21 @@ void GlobalVariable::replaceUsesOfWithOnConstant(Value *From, Value *To,
this->setOperand(0, cast<Constant>(To)); this->setOperand(0, cast<Constant>(To));
} }
void GlobalVariable::setInitializer(Constant *InitVal) {
if (InitVal == 0) {
if (hasInitializer()) {
Op<0>().set(0);
NumOperands = 0;
}
} else {
assert(InitVal->getType() == getType()->getElementType() &&
"Initializer type must match GlobalVariable type");
if (!hasInitializer())
NumOperands = 1;
Op<0>().set(InitVal);
}
}
/// copyAttributesFrom - copy all additional attributes (those not needed to /// copyAttributesFrom - copy all additional attributes (those not needed to
/// create a GlobalVariable) from the GlobalVariable Src to this one. /// create a GlobalVariable) from the GlobalVariable Src to this one.
void GlobalVariable::copyAttributesFrom(const GlobalValue *Src) { void GlobalVariable::copyAttributesFrom(const GlobalValue *Src) {