diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-11-14 00:35:50 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-11-14 00:35:50 +0000 |
commit | 283bc2ed28f423c29ab57a2b491d2ebdb53a4b12 (patch) | |
tree | b3a1978d772d25c68d2a8b3a9829c74f4abb6f24 /llvm/lib/CodeGen/Analysis.cpp | |
parent | d318df403a123ac3afe8eecf3bd53cd0c588c8dc (diff) | |
download | bcm5719-llvm-283bc2ed28f423c29ab57a2b491d2ebdb53a4b12.tar.gz bcm5719-llvm-283bc2ed28f423c29ab57a2b491d2ebdb53a4b12.zip |
Allow the use of functions as typeinfo in landingpad clauses
This is one step towards supporting SEH filter functions in LLVM.
llvm-svn: 221954
Diffstat (limited to 'llvm/lib/CodeGen/Analysis.cpp')
-rw-r--r-- | llvm/lib/CodeGen/Analysis.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/Analysis.cpp b/llvm/lib/CodeGen/Analysis.cpp index 02036352433..9a3b7905e4a 100644 --- a/llvm/lib/CodeGen/Analysis.cpp +++ b/llvm/lib/CodeGen/Analysis.cpp @@ -109,15 +109,16 @@ void llvm::ComputeValueVTs(const TargetLowering &TLI, Type *Ty, } /// ExtractTypeInfo - Returns the type info, possibly bitcast, encoded in V. -GlobalVariable *llvm::ExtractTypeInfo(Value *V) { +GlobalValue *llvm::ExtractTypeInfo(Value *V) { V = V->stripPointerCasts(); - GlobalVariable *GV = dyn_cast<GlobalVariable>(V); + GlobalValue *GV = dyn_cast<GlobalValue>(V); + GlobalVariable *Var = dyn_cast<GlobalVariable>(V); - if (GV && GV->getName() == "llvm.eh.catch.all.value") { - assert(GV->hasInitializer() && + if (Var && Var->getName() == "llvm.eh.catch.all.value") { + assert(Var->hasInitializer() && "The EH catch-all value must have an initializer"); - Value *Init = GV->getInitializer(); - GV = dyn_cast<GlobalVariable>(Init); + Value *Init = Var->getInitializer(); + GV = dyn_cast<GlobalValue>(Init); if (!GV) V = cast<ConstantPointerNull>(Init); } |