blob: c6c436ae83de966e0812bfde8cfa347938221f9a [file] [log] [blame]
Bill Wendlingb37db202011-08-25 01:19:13 +00001; 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
David Majnemer7fddecc2015-06-17 20:52:32 +00009define void @_Z3barv() uwtable optsize ssp personality i32 (...)* @__gxx_personality_v0 {
Bill Wendlingb37db202011-08-25 01:19:13 +000010entry:
11 invoke void @_Z3quxv() optsize
12 to label %try.cont unwind label %lpad
13
14try.cont: ; preds = %entry, %invoke.cont4
15 ret void
16
17lpad: ; preds = %entry
David Majnemer7fddecc2015-06-17 20:52:32 +000018 %exn = landingpad {i8*, i32}
Bill Wendlingb37db202011-08-25 01:19:13 +000019 cleanup
20 catch i8** @_ZTIc
21 filter [2 x i8**] [i8** @_ZTIPKc, i8** @_ZTId]
22 resume { i8*, i32 } %exn
23}
24
25declare void @_Z3quxv() optsize
26
27declare i32 @__gxx_personality_v0(...)
David Majnemer654e1302015-07-31 17:58:14 +000028
29define void @cleanupret0() personality i32 (...)* @__gxx_personality_v0 {
30entry:
David Majnemer85a549d2015-08-11 02:48:30 +000031 invoke void @_Z3quxv() optsize
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +000032 to label %exit unwind label %pad
33pad:
34 %cp = cleanuppad [i7 4]
35 cleanupret %cp unwind to caller
36exit:
37 ret void
David Majnemer654e1302015-07-31 17:58:14 +000038}
39
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +000040; forward ref by name
David Majnemer654e1302015-07-31 17:58:14 +000041define void @cleanupret1() personality i32 (...)* @__gxx_personality_v0 {
42entry:
David Majnemer85a549d2015-08-11 02:48:30 +000043 invoke void @_Z3quxv() optsize
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +000044 to label %exit unwind label %pad
45cleanup:
46 cleanupret %cp unwind label %pad
47pad:
48 %cp = cleanuppad []
49 br label %cleanup
50exit:
51 ret void
David Majnemer654e1302015-07-31 17:58:14 +000052}
53
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +000054; forward ref by ID
David Majnemer654e1302015-07-31 17:58:14 +000055define void @cleanupret2() personality i32 (...)* @__gxx_personality_v0 {
56entry:
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +000057 invoke void @_Z3quxv() optsize
58 to label %exit unwind label %pad
59cleanup:
60 cleanupret %0 unwind label %pad
61pad:
62 %0 = cleanuppad []
63 br label %cleanup
64exit:
65 ret void
David Majnemer654e1302015-07-31 17:58:14 +000066}
67
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +000068define void @catchret0() personality i32 (...)* @__gxx_personality_v0 {
David Majnemer654e1302015-07-31 17:58:14 +000069entry:
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +000070 invoke void @_Z3quxv() optsize
71 to label %exit unwind label %pad
72pad:
73 %cp = catchpad [i7 4]
74 to label %catch unwind label %endpad
75catch:
76 catchret %cp to label %exit
77endpad:
78 catchendpad unwind to caller
79exit:
80 ret void
81}
82
83; forward ref by name
84define void @catchret1() personality i32 (...)* @__gxx_personality_v0 {
85entry:
86 invoke void @_Z3quxv() optsize
87 to label %exit unwind label %pad
88catch:
89 catchret %cp to label %exit
90pad:
91 %cp = catchpad []
92 to label %catch unwind label %endpad
93endpad:
94 catchendpad unwind to caller
95exit:
96 ret void
97}
98
99; forward ref by ID
100define void @catchret2() personality i32 (...)* @__gxx_personality_v0 {
101entry:
102 invoke void @_Z3quxv() optsize
103 to label %exit unwind label %pad
104catch:
105 catchret %0 to label %exit
106pad:
107 %0 = catchpad []
108 to label %catch unwind label %endpad
109endpad:
110 catchendpad unwind to caller
111exit:
112 ret void
David Majnemer654e1302015-07-31 17:58:14 +0000113}
114
115define i8 @catchpad() personality i32 (...)* @__gxx_personality_v0 {
116entry:
David Majnemer85a549d2015-08-11 02:48:30 +0000117 invoke void @_Z3quxv() optsize
David Majnemer0bc0eef2015-08-15 02:46:08 +0000118 to label %exit unwind label %bb2
David Majnemer654e1302015-07-31 17:58:14 +0000119bb2:
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +0000120 catchpad [i7 4] to label %exit unwind label %bb3
David Majnemer0bc0eef2015-08-15 02:46:08 +0000121bb3:
122 catchendpad unwind to caller
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +0000123exit:
124 ret i8 0
David Majnemer654e1302015-07-31 17:58:14 +0000125}
126
127define void @terminatepad0() personality i32 (...)* @__gxx_personality_v0 {
128entry:
David Majnemer85a549d2015-08-11 02:48:30 +0000129 br label %try.cont
130
131try.cont:
132 invoke void @_Z3quxv() optsize
133 to label %try.cont unwind label %bb
David Majnemer654e1302015-07-31 17:58:14 +0000134bb:
135 terminatepad [i7 4] unwind label %bb
136}
137
138define void @terminatepad1() personality i32 (...)* @__gxx_personality_v0 {
139entry:
David Majnemer85a549d2015-08-11 02:48:30 +0000140 br label %try.cont
141
142try.cont:
143 invoke void @_Z3quxv() optsize
144 to label %try.cont unwind label %bb
145bb:
David Majnemer654e1302015-07-31 17:58:14 +0000146 terminatepad [i7 4] unwind to caller
147}
148
149define void @cleanuppad() personality i32 (...)* @__gxx_personality_v0 {
150entry:
David Majnemer85a549d2015-08-11 02:48:30 +0000151 br label %try.cont
152
153try.cont:
154 invoke void @_Z3quxv() optsize
155 to label %try.cont unwind label %bb
156bb:
Joseph Tremoulet8220bcc2015-08-23 00:26:33 +0000157 cleanuppad [i7 4]
David Majnemer654e1302015-07-31 17:58:14 +0000158 ret void
159}
160
161define void @catchendpad0() personality i32 (...)* @__gxx_personality_v0 {
162entry:
David Majnemer85a549d2015-08-11 02:48:30 +0000163 br label %try.cont
164
165try.cont:
166 invoke void @_Z3quxv() optsize
167 to label %try.cont unwind label %bb
David Majnemer654e1302015-07-31 17:58:14 +0000168bb:
169 catchendpad unwind label %bb
170}
171
172define void @catchendpad1() personality i32 (...)* @__gxx_personality_v0 {
173entry:
David Majnemer85a549d2015-08-11 02:48:30 +0000174 br label %try.cont
175
176try.cont:
177 invoke void @_Z3quxv() optsize
178 to label %try.cont unwind label %bb
179bb:
David Majnemer654e1302015-07-31 17:58:14 +0000180 catchendpad unwind to caller
181}
Joseph Tremoulet9ce71f72015-09-03 09:09:43 +0000182
183define void @cleanupendpad0() personality i32 (...)* @__gxx_personality_v0 {
184entry:
185 invoke void @_Z3quxv() optsize
186 to label %exit unwind label %pad
187pad:
188 %cp = cleanuppad [i7 4]
189 invoke void @_Z3quxv() optsize
190 to label %stop unwind label %endpad
191stop:
192 unreachable
193endpad:
194 cleanupendpad %cp unwind label %pad
195exit:
196 ret void
197}
198
199; forward ref by name
200define void @cleanupendpad1() personality i32 (...)* @__gxx_personality_v0 {
201entry:
202 invoke void @_Z3quxv() optsize
203 to label %exit unwind label %pad
204endpad:
205 cleanupendpad %cp unwind to caller
206pad:
207 %cp = cleanuppad []
208 invoke void @_Z3quxv() optsize
209 to label %stop unwind label %endpad
210stop:
211 unreachable
212exit:
213 ret void
214}
215
216; forward ref by ID
217define void @cleanupendpad2() personality i32 (...)* @__gxx_personality_v0 {
218entry:
219 invoke void @_Z3quxv() optsize
220 to label %exit unwind label %pad
221endpad:
222 cleanupendpad %0 unwind label %pad
223pad:
224 %0 = cleanuppad []
225 invoke void @_Z3quxv() optsize
226 to label %stop unwind label %endpad
227stop:
228 unreachable
229exit:
230 ret void
231}