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