New EH representation for MSVC compatibility
[oota-llvm.git] / test / Feature / exception.ll
1 ; RUN: llvm-as < %s | llvm-dis > %t1.ll
2 ; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
3 ; RUN: diff %t1.ll %t2.ll
4
5 @_ZTIc = external constant i8*
6 @_ZTId = external constant i8*
7 @_ZTIPKc = external constant i8*
8
9 define void @_Z3barv() uwtable optsize ssp personality i32 (...)* @__gxx_personality_v0 {
10 entry:
11   invoke void @_Z3quxv() optsize
12           to label %try.cont unwind label %lpad
13
14 try.cont:                                         ; preds = %entry, %invoke.cont4
15   ret void
16
17 lpad:                                             ; preds = %entry
18   %exn = landingpad {i8*, i32}
19             cleanup
20             catch i8** @_ZTIc
21             filter [2 x i8**] [i8** @_ZTIPKc, i8** @_ZTId]
22   resume { i8*, i32 } %exn
23 }
24
25 declare void @_Z3quxv() optsize
26
27 declare i32 @__gxx_personality_v0(...)
28
29 define void @cleanupret0() personality i32 (...)* @__gxx_personality_v0 {
30 entry:
31   br label %bb
32 bb:
33   cleanuppad void [i7 4]
34   cleanupret i8 0 unwind label %bb
35 }
36
37 define void @cleanupret1() personality i32 (...)* @__gxx_personality_v0 {
38 entry:
39   br label %bb
40 bb:
41   cleanuppad void [i7 4]
42   cleanupret void unwind label %bb
43 }
44
45 define void @cleanupret2() personality i32 (...)* @__gxx_personality_v0 {
46 entry:
47   cleanupret i8 0 unwind to caller
48 }
49
50 define void @cleanupret3() personality i32 (...)* @__gxx_personality_v0 {
51   cleanupret void unwind to caller
52 }
53
54 define void @catchret() personality i32 (...)* @__gxx_personality_v0 {
55 entry:
56   br label %bb
57 bb:
58   catchret label %bb
59 }
60
61 define i8 @catchpad() personality i32 (...)* @__gxx_personality_v0 {
62 entry:
63   br label %bb2
64 bb:
65   ret i8 %cbv
66 bb2:
67   %cbv = catchpad i8 [i7 4] to label %bb unwind label %bb2
68 }
69
70 define void @terminatepad0() personality i32 (...)* @__gxx_personality_v0 {
71 entry:
72   br label %bb
73 bb:
74   terminatepad [i7 4] unwind label %bb
75 }
76
77 define void @terminatepad1() personality i32 (...)* @__gxx_personality_v0 {
78 entry:
79   terminatepad [i7 4] unwind to caller
80 }
81
82 define void @cleanuppad() personality i32 (...)* @__gxx_personality_v0 {
83 entry:
84   cleanuppad void [i7 4]
85   ret void
86 }
87
88 define void @catchendpad0() personality i32 (...)* @__gxx_personality_v0 {
89 entry:
90   br label %bb
91 bb:
92   catchendpad unwind label %bb
93 }
94
95 define void @catchendpad1() personality i32 (...)* @__gxx_personality_v0 {
96 entry:
97   catchendpad unwind to caller
98 }