80 lines · plain
1; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s2 3; PR10424define i32 @foo() {5; CHECK: The unwind destination does not have an exception handling instruction6 %A = invoke i32 @foo( )7 to label %L unwind label %L ; <i32> [#uses=1]8L: ; preds = %0, %09 ret i32 %A10}11 12; PR104213define i32 @bar() {14 br i1 false, label %L1, label %L215L1: ; preds = %016 %A = invoke i32 @bar( )17 to label %L unwind label %L ; <i32> [#uses=1]18L2: ; preds = %019 br label %L20L: ; preds = %L2, %L1, %L121; CHECK: The unwind destination does not have an exception handling instruction22 ret i32 %A23}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(ptr)31 32define void @f1() personality ptr @__gxx_personality_v0 {33entry:34; OK35 invoke void @llvm.donothing()36 to label %conta unwind label %contb37 38conta:39 ret void40 41contb:42 %0 = landingpad { ptr, i32 }43 filter [0 x ptr] zeroinitializer44 ret void45}46 47define i8 @f2() personality ptr @__gxx_personality_v0 {48entry:49; CHECK: Cannot invoke an intrinsic other than donothing, patchpoint, statepoint, coro_resume, coro_destroy, clang.arc.attachedcall or wasm.(re)throw50 invoke void @llvm.trap()51 to label %cont unwind label %lpad52 53cont:54 ret i8 355 56lpad:57 %0 = landingpad { ptr, i32 }58 filter [0 x ptr] zeroinitializer59 ret i8 260}61 62define i32 @f3() {63entry:64; CHECK: Cannot take the address of an intrinsic65 %call = call i32 @fn(ptr @llvm.expect.i8)66 ret i32 %call67}68 69define void @f4() personality ptr @__gxx_personality_v0 {70entry:71 invoke void @llvm.donothing()72 to label %cont unwind label %cont73 74cont:75; CHECK: Block containing LandingPadInst must be jumped to only by the unwind edge of an invoke.76 %0 = landingpad { ptr, i32 }77 filter [0 x ptr] zeroinitializer78 ret void79}80