From 917f97c580c3ba16faa291884d6600cf2b275c99 Mon Sep 17 00:00:00 2001 From: Nuno Lopes Date: Thu, 28 Jun 2012 22:57:00 +0000 Subject: make the verifier accept @llvm.donothing as the only intrinsic that can be invoked While at it, merge 2 tests and FileCheckize them git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159388 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Verifier/invoke-1.ll | 10 -------- test/Verifier/invoke-2.ll | 14 ---------- test/Verifier/invoke.ll | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 24 deletions(-) delete mode 100644 test/Verifier/invoke-1.ll delete mode 100644 test/Verifier/invoke-2.ll create mode 100644 test/Verifier/invoke.ll (limited to 'test/Verifier') diff --git a/test/Verifier/invoke-1.ll b/test/Verifier/invoke-1.ll deleted file mode 100644 index 427abe0..0000000 --- a/test/Verifier/invoke-1.ll +++ /dev/null @@ -1,10 +0,0 @@ -; RUN: not llvm-as < %s |& grep {not verify as correct} -; PR1042 - -define i32 @foo() { - %A = invoke i32 @foo( ) - to label %L unwind label %L ; [#uses=1] -L: ; preds = %0, %0 - ret i32 %A -} - diff --git a/test/Verifier/invoke-2.ll b/test/Verifier/invoke-2.ll deleted file mode 100644 index 0145935..0000000 --- a/test/Verifier/invoke-2.ll +++ /dev/null @@ -1,14 +0,0 @@ -; RUN: not llvm-as %s |& grep {not verify as correct} -; PR1042 - -define i32 @foo() { - br i1 false, label %L1, label %L2 -L1: ; preds = %0 - %A = invoke i32 @foo( ) - to label %L unwind label %L ; [#uses=1] -L2: ; preds = %0 - br label %L -L: ; preds = %L2, %L1, %L1 - ret i32 %A -} - diff --git a/test/Verifier/invoke.ll b/test/Verifier/invoke.ll new file mode 100644 index 0000000..2a0336b --- /dev/null +++ b/test/Verifier/invoke.ll @@ -0,0 +1,65 @@ +; RUN: not llvm-as < %s -o /dev/null |& 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 ; [#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 ; [#uses=1] +L2: ; preds = %0 + br label %L +L: ; preds = %L2, %L1, %L1 +; CHECK: The unwind destination does not have a landingpad instruction +; CHECK: Instruction does not dominate all uses + 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 %cont unwind label %cont + +cont: + %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 +} -- cgit v1.1