1; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s 2 3; PR1042 4define i32 @foo() { 5; CHECK: The unwind destination does not have an exception handling instruction 6 %A = invoke i32 @foo( ) 7 to label %L unwind label %L ; <i32> [#uses=1] 8L: ; preds = %0, %0 9 ret i32 %A 10} 11 12; PR1042 13define i32 @bar() { 14 br i1 false, label %L1, label %L2 15L1: ; preds = %0 16 %A = invoke i32 @bar( ) 17 to label %L unwind label %L ; <i32> [#uses=1] 18L2: ; preds = %0 19 br label %L 20L: ; preds = %L2, %L1, %L1 21; CHECK: The unwind destination does not have an exception handling instruction 22 ret i32 %A 23} 24 25 26declare i32 @__gxx_personality_v0(...) 27declare void @llvm.donothing() 28declare void @llvm.trap() 29declare i8 @llvm.expect.i8(i8,i8) 30declare i32 @fn(i8 (i8, i8)*) 31 32define void @f1() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 33entry: 34; OK 35 invoke void @llvm.donothing() 36 to label %conta unwind label %contb 37 38conta: 39 ret void 40 41contb: 42 %0 = landingpad { i8*, i32 } 43 filter [0 x i8*] zeroinitializer 44 ret void 45} 46 47define i8 @f2() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 48entry: 49; CHECK: Cannot invoke an intrinsic other than donothing, patchpoint or statepoint 50 invoke void @llvm.trap() 51 to label %cont unwind label %lpad 52 53cont: 54 ret i8 3 55 56lpad: 57 %0 = landingpad { i8*, i32 } 58 filter [0 x i8*] zeroinitializer 59 ret i8 2 60} 61 62define i32 @f3() { 63entry: 64; CHECK: Cannot take the address of an intrinsic 65 %call = call i32 @fn(i8 (i8, i8)* @llvm.expect.i8) 66 ret i32 %call 67} 68 69define void @f4() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 70entry: 71 invoke void @llvm.donothing() 72 to label %cont unwind label %cont 73 74cont: 75; CHECK: Block containing LandingPadInst must be jumped to only by the unwind edge of an invoke. 76 %0 = landingpad { i8*, i32 } 77 filter [0 x i8*] zeroinitializer 78 ret void 79} 80