From 5d7469e3e4d745bf955c6f6a387e853d54b8583f Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Tue, 20 Sep 2011 00:40:19 +0000 Subject: [PATCH] Don't assume that the clause is a GlobalVariable. It could be a constant. llvm-svn: 140123 --- clang/lib/CodeGen/CGException.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp index a8d7c5a78d29..bd5ae7582e06 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -249,24 +249,22 @@ 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(Val); - - // ObjC EH selector entries are always global variables with - // names starting like this. - if (GV->getName().startswith("OBJC_EHTYPE")) - return false; + if (llvm::GlobalVariable *GV = dyn_cast(Val)) + // ObjC EH selector entries are always global variables with + // names starting like this. + if (GV->getName().startswith("OBJC_EHTYPE")) + return false; } else { // Check if any of the filter values have the ObjC prefix. llvm::Constant *CVal = cast(Val); for (llvm::User::op_iterator II = CVal->op_begin(), IE = CVal->op_end(); II != IE; ++II) { - llvm::GlobalVariable *GV = - cast((*II)->stripPointerCasts()); - - // ObjC EH selector entries are always global variables with - // names starting like this. - if (GV->getName().startswith("OBJC_EHTYPE")) - return false; + if (llvm::GlobalVariable *GV = + cast((*II)->stripPointerCasts())) + // ObjC EH selector entries are always global variables with + // names starting like this. + if (GV->getName().startswith("OBJC_EHTYPE")) + return false; } } } -- GitLab