dbbe7e41edb80968e2b33c66b0d865dc52f381f7
[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 %try.cont
32
33 try.cont:
34   invoke void @_Z3quxv() optsize
35           to label %try.cont unwind label %bb
36 bb:
37   cleanuppad void [i7 4]
38   cleanupret i8 0 unwind label %bb
39 }
40
41 define void @cleanupret1() personality i32 (...)* @__gxx_personality_v0 {
42 entry:
43   br label %try.cont
44
45 try.cont:
46   invoke void @_Z3quxv() optsize
47           to label %try.cont unwind label %bb
48 bb:
49   cleanuppad void [i7 4]
50   cleanupret void unwind label %bb
51 }
52
53 define void @cleanupret2() personality i32 (...)* @__gxx_personality_v0 {
54 entry:
55   cleanupret i8 0 unwind to caller
56 }
57
58 define void @cleanupret3() personality i32 (...)* @__gxx_personality_v0 {
59   cleanupret void unwind to caller
60 }
61
62 define void @catchret() personality i32 (...)* @__gxx_personality_v0 {
63 entry:
64   br label %bb
65 bb:
66   catchret label %bb
67 }
68
69 define i8 @catchpad() personality i32 (...)* @__gxx_personality_v0 {
70 entry:
71   br label %try.cont
72
73 try.cont:
74   invoke void @_Z3quxv() optsize
75           to label %bb unwind label %bb2
76 bb:
77   ret i8 0
78 bb2:
79   %cbv = catchpad i8 [i7 4] to label %bb unwind label %bb2
80 }
81
82 define void @terminatepad0() personality i32 (...)* @__gxx_personality_v0 {
83 entry:
84   br label %try.cont
85
86 try.cont:
87   invoke void @_Z3quxv() optsize
88           to label %try.cont unwind label %bb
89 bb:
90   terminatepad [i7 4] unwind label %bb
91 }
92
93 define void @terminatepad1() personality i32 (...)* @__gxx_personality_v0 {
94 entry:
95   br label %try.cont
96
97 try.cont:
98   invoke void @_Z3quxv() optsize
99           to label %try.cont unwind label %bb
100 bb:
101   terminatepad [i7 4] unwind to caller
102 }
103
104 define void @cleanuppad() personality i32 (...)* @__gxx_personality_v0 {
105 entry:
106   br label %try.cont
107
108 try.cont:
109   invoke void @_Z3quxv() optsize
110           to label %try.cont unwind label %bb
111 bb:
112   cleanuppad void [i7 4]
113   ret void
114 }
115
116 define void @catchendpad0() personality i32 (...)* @__gxx_personality_v0 {
117 entry:
118   br label %try.cont
119
120 try.cont:
121   invoke void @_Z3quxv() optsize
122           to label %try.cont unwind label %bb
123 bb:
124   catchendpad unwind label %bb
125 }
126
127 define void @catchendpad1() personality i32 (...)* @__gxx_personality_v0 {
128 entry:
129   br label %try.cont
130
131 try.cont:
132   invoke void @_Z3quxv() optsize
133           to label %try.cont unwind label %bb
134 bb:
135   catchendpad unwind to caller
136 }