Mercurial > hg > CbC > CbC_llvm
diff test/Verifier/invoke.ll @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 60c9769439b8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/Verifier/invoke.ll Thu Dec 12 13:56:28 2013 +0900 @@ -0,0 +1,79 @@ +; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s + +; PR1042 +define i32 @foo() { +; CHECK: The unwind destination does not have a landingpad instruction + %A = invoke i32 @foo( ) + to label %L unwind label %L ; <i32> [#uses=1] +L: ; preds = %0, %0 + ret i32 %A +} + +; PR1042 +define i32 @bar() { + br i1 false, label %L1, label %L2 +L1: ; preds = %0 + %A = invoke i32 @bar( ) + to label %L unwind label %L ; <i32> [#uses=1] +L2: ; preds = %0 + br label %L +L: ; preds = %L2, %L1, %L1 +; CHECK: The unwind destination does not have a landingpad instruction + ret i32 %A +} + + +declare i32 @__gxx_personality_v0(...) +declare void @llvm.donothing() +declare void @llvm.trap() +declare i8 @llvm.expect.i8(i8,i8) +declare i32 @fn(i8 (i8, i8)*) + +define void @f1() { +entry: +; OK + invoke void @llvm.donothing() + to label %conta unwind label %contb + +conta: + ret void + +contb: + %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) + filter [0 x i8*] zeroinitializer + ret void +} + +define i8 @f2() { +entry: +; CHECK: Cannot invoke an intrinsinc other than donothing + invoke void @llvm.trap() + to label %cont unwind label %lpad + +cont: + ret i8 3 + +lpad: + %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) + filter [0 x i8*] zeroinitializer + ret i8 2 +} + +define i32 @f3() { +entry: +; CHECK: Cannot take the address of an intrinsic + %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 +}