summaryrefslogtreecommitdiffstats
path: root/test/Feature
diff options
context:
space:
mode:
Diffstat (limited to 'test/Feature')
-rw-r--r--test/Feature/callingconventions.ll31
-rw-r--r--test/Feature/calltest.ll30
-rw-r--r--test/Feature/exception.ll27
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(...)
OpenPOWER on IntegriCloud