Don't assume that the clause is a GlobalVariable. It could be a constant.

llvm-svn: 140123
This commit is contained in:
Bill Wendling 2011-09-20 00:40:19 +00:00
parent 36d8c92105
commit 5d7469e3e4
1 changed files with 11 additions and 13 deletions

View File

@ -249,8 +249,7 @@ static bool PersonalityHasOnlyCXXUses(llvm::Constant *Fn) {
llvm::Value *Val = LPI->getClause(I)->stripPointerCasts();
if (LPI->isCatch(I)) {
// Check if the catch value has the ObjC prefix.
llvm::GlobalVariable *GV = cast<llvm::GlobalVariable>(Val);
if (llvm::GlobalVariable *GV = dyn_cast<llvm::GlobalVariable>(Val))
// ObjC EH selector entries are always global variables with
// names starting like this.
if (GV->getName().startswith("OBJC_EHTYPE"))
@ -260,9 +259,8 @@ static bool PersonalityHasOnlyCXXUses(llvm::Constant *Fn) {
llvm::Constant *CVal = cast<llvm::Constant>(Val);
for (llvm::User::op_iterator
II = CVal->op_begin(), IE = CVal->op_end(); II != IE; ++II) {
llvm::GlobalVariable *GV =
cast<llvm::GlobalVariable>((*II)->stripPointerCasts());
if (llvm::GlobalVariable *GV =
cast<llvm::GlobalVariable>((*II)->stripPointerCasts()))
// ObjC EH selector entries are always global variables with
// names starting like this.
if (GV->getName().startswith("OBJC_EHTYPE"))