diff options
Diffstat (limited to 'test/Feature')
-rw-r--r-- | test/Feature/callingconventions.ll | 31 | ||||
-rw-r--r-- | test/Feature/calltest.ll | 30 | ||||
-rw-r--r-- | test/Feature/exception.ll | 27 |
3 files changed, 62 insertions, 26 deletions
diff --git a/test/Feature/callingconventions.ll b/test/Feature/callingconventions.ll index d2e9de4..192f07a 100644 --- a/test/Feature/callingconventions.ll +++ b/test/Feature/callingconventions.ll @@ -26,25 +26,30 @@ define coldcc void @bar2() { } define cc42 void @bar3() { - invoke fastcc void @foo( ) - to label %Ok unwind label %U + invoke fastcc void @foo( ) + to label %Ok unwind label %U -Ok: ; preds = %0 - ret void +Ok: + ret void -U: ; preds = %0 - unwind +U: + %exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0 + cleanup + resume { i8*, i32 } %exn } define void @bar4() { - call cc42 void @bar( ) - invoke cc42 void @bar3( ) - to label %Ok unwind label %U + call cc42 void @bar( ) + invoke cc42 void @bar3( ) + to label %Ok unwind label %U -Ok: ; preds = %0 - ret void +Ok: + ret void -U: ; preds = %0 - unwind +U: + %exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0 + cleanup + resume { i8*, i32 } %exn } +declare i32 @__gxx_personality_v0(...) diff --git a/test/Feature/calltest.ll b/test/Feature/calltest.ll index dcdb1a0..e7d8e8d 100644 --- a/test/Feature/calltest.ll +++ b/test/Feature/calltest.ll @@ -5,26 +5,30 @@ %FunTy = type i32 (i32) define void @invoke(%FunTy* %x) { - %foo = call i32 %x( i32 123 ) ; <i32> [#uses=0] - %foo2 = tail call i32 %x( i32 123 ) ; <i32> [#uses=0] - ret void + %foo = call i32 %x( i32 123 ) ; <i32> [#uses=0] + %foo2 = tail call i32 %x( i32 123 ) ; <i32> [#uses=0] + ret void } define i32 @main(i32 %argc) { - %retval = call i32 @test( i32 %argc ) ; <i32> [#uses=2] - %two = add i32 %retval, %retval ; <i32> [#uses=1] - %retval2 = invoke i32 @test( i32 %argc ) - to label %Next unwind label %Error ; <i32> [#uses=1] + %retval = call i32 @test( i32 %argc ) ; <i32> [#uses=2] + %two = add i32 %retval, %retval ; <i32> [#uses=1] + %retval2 = invoke i32 @test( i32 %argc ) + to label %Next unwind label %Error ; <i32> [#uses=1] -Next: ; preds = %0 - %two2 = add i32 %two, %retval2 ; <i32> [#uses=1] - call void @invoke( %FunTy* @test ) - ret i32 %two2 +Next: + %two2 = add i32 %two, %retval2 ; <i32> [#uses=1] + call void @invoke( %FunTy* @test ) + ret i32 %two2 -Error: ; preds = %0 - ret i32 -1 +Error: + %exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0 + cleanup + ret i32 -1 } define i32 @test(i32 %i0) { ret i32 %i0 } + +declare i32 @__gxx_personality_v0(...) diff --git a/test/Feature/exception.ll b/test/Feature/exception.ll new file mode 100644 index 0000000..6e18a81 --- /dev/null +++ b/test/Feature/exception.ll @@ -0,0 +1,27 @@ +; RUN: llvm-as < %s | llvm-dis > %t1.ll +; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll +; RUN: diff %t1.ll %t2.ll + +@_ZTIc = external constant i8* +@_ZTId = external constant i8* +@_ZTIPKc = external constant i8* + +define void @_Z3barv() uwtable optsize ssp { +entry: + invoke void @_Z3quxv() optsize + to label %try.cont unwind label %lpad + +try.cont: ; preds = %entry, %invoke.cont4 + ret void + +lpad: ; preds = %entry + %exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0 + cleanup + catch i8** @_ZTIc + filter [2 x i8**] [i8** @_ZTIPKc, i8** @_ZTId] + resume { i8*, i32 } %exn +} + +declare void @_Z3quxv() optsize + +declare i32 @__gxx_personality_v0(...) |