The normal edge of an invoke is not allowed to branch to a block with a

landingpad.  Enforce it in the verifier, and fix the regression tests to match.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161697 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman
2012-08-10 20:55:20 +00:00
parent d9b4512593
commit 6b951b25c3
9 changed files with 25 additions and 1205 deletions

View File

@@ -34,9 +34,12 @@ define void @f1() {
entry:
; OK
invoke void @llvm.donothing()
to label %cont unwind label %cont
to label %conta unwind label %contb
cont:
conta:
ret void
contb:
%0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
filter [0 x i8*] zeroinitializer
ret void
@@ -63,3 +66,15 @@ entry:
%call = call i32 @fn(i8 (i8, i8)* @llvm.expect.i8)
ret i32 %call
}
define void @f4() {
entry:
invoke void @llvm.donothing()
to label %cont unwind label %cont
cont:
; CHECK: Block containing LandingPadInst must be jumped to only by the unwind edge of an invoke.
%0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
filter [0 x i8*] zeroinitializer
ret void
}