summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-08-01 18:06:34 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-08-01 18:06:34 +0000
commitba6665d88a09b5e4ecdae88e14acae41732c1e3f (patch)
tree138bf397dd5214cfded9bc502d6f0b1c668e177c
parent235008b3d4fcc81e08f473e1bfb376fb14de0c51 (diff)
downloadbcm5719-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.cpp16
-rw-r--r--llvm/test/Transforms/ObjCARC/path-overflow.ll2
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
OpenPOWER on IntegriCloud