diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-08-01 18:06:34 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-08-01 18:06:34 +0000 |
commit | ba6665d88a09b5e4ecdae88e14acae41732c1e3f (patch) | |
tree | 138bf397dd5214cfded9bc502d6f0b1c668e177c | |
parent | 235008b3d4fcc81e08f473e1bfb376fb14de0c51 (diff) | |
download | bcm5719-llvm-ba6665d88a09b5e4ecdae88e14acae41732c1e3f.tar.gz bcm5719-llvm-ba6665d88a09b5e4ecdae88e14acae41732c1e3f.zip |
[Verifier] Resume instructions can only be in functions w/ a personality
This fixes PR28799.
llvm-svn: 277360
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 16 | ||||
-rw-r--r-- | llvm/test/Transforms/ObjCARC/path-overflow.ll | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index d675ab98bf0..fd78fa3bb51 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -428,6 +428,7 @@ private: void visitInsertValueInst(InsertValueInst &IVI); void visitEHPadPredecessors(Instruction &I); void visitLandingPadInst(LandingPadInst &LPI); + void visitResumeInst(ResumeInst &RI); void visitCatchPadInst(CatchPadInst &CPI); void visitCatchReturnInst(CatchReturnInst &CatchReturn); void visitCleanupPadInst(CleanupPadInst &CPI); @@ -3298,6 +3299,21 @@ void Verifier::visitLandingPadInst(LandingPadInst &LPI) { visitInstruction(LPI); } +void Verifier::visitResumeInst(ResumeInst &RI) { + Assert(RI.getFunction()->hasPersonalityFn(), + "ResumeInst needs to be in a function with a personality.", &RI); + + if (!LandingPadResultTy) + LandingPadResultTy = RI.getValue()->getType(); + else + Assert(LandingPadResultTy == RI.getValue()->getType(), + "The resume instruction should have a consistent result type " + "inside a function.", + &RI); + + visitTerminatorInst(RI); +} + void Verifier::visitCatchPadInst(CatchPadInst &CPI) { BasicBlock *BB = CPI.getParent(); diff --git a/llvm/test/Transforms/ObjCARC/path-overflow.ll b/llvm/test/Transforms/ObjCARC/path-overflow.ll index 21fcc86f946..82c9fbe31b9 100644 --- a/llvm/test/Transforms/ObjCARC/path-overflow.ll +++ b/llvm/test/Transforms/ObjCARC/path-overflow.ll @@ -341,7 +341,7 @@ msgSend.cont507: ; preds = %msgSend.nullinit506 } ; Function Attrs: optsize ssp uwtable -define void @test2() unnamed_addr align 2 { +define void @test2() unnamed_addr align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) { bb: br i1 undef, label %bb3, label %bb2 |