blob: cbe2d0353cc322b0f23c85299758c2671c53f367 [file] [log] [blame]
Bill Wendlingc5fb9d82011-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 Majnemercc714e22015-06-17 20:52:32 +00009define void @_Z3barv() uwtable optsize ssp personality i32 (...)* @__gxx_personality_v0 {
Bill Wendlingc5fb9d82011-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 Majnemercc714e22015-06-17 20:52:32 +000018 %exn = landingpad {i8*, i32}
Bill Wendlingc5fb9d82011-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 Majnemer4a45f082015-07-31 17:58:14 +000028
29define void @cleanupret0() personality i32 (...)* @__gxx_personality_v0 {
30entry:
David Majnemer106f7b52015-08-11 02:48:30 +000031 invoke void @_Z3quxv() optsize
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000032 to label %exit unwind label %pad
33pad:
David Majnemer8cec2f22015-12-12 05:38:55 +000034 %cp = cleanuppad within none [i7 4]
35 cleanupret from %cp unwind to caller
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000036exit:
37 ret void
David Majnemer4a45f082015-07-31 17:58:14 +000038}
39
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000040; forward ref by name
David Majnemer4a45f082015-07-31 17:58:14 +000041define void @cleanupret1() personality i32 (...)* @__gxx_personality_v0 {
42entry:
David Majnemer106f7b52015-08-11 02:48:30 +000043 invoke void @_Z3quxv() optsize
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000044 to label %exit unwind label %pad
45cleanup:
Joseph Tremouletfe9953a2016-01-10 04:28:38 +000046 cleanupret from %cp unwind to caller
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000047pad:
David Majnemer8cec2f22015-12-12 05:38:55 +000048 %cp = cleanuppad within none []
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000049 br label %cleanup
50exit:
51 ret void
David Majnemer4a45f082015-07-31 17:58:14 +000052}
53
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000054; forward ref by ID
David Majnemer4a45f082015-07-31 17:58:14 +000055define void @cleanupret2() personality i32 (...)* @__gxx_personality_v0 {
56entry:
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000057 invoke void @_Z3quxv() optsize
58 to label %exit unwind label %pad
59cleanup:
Joseph Tremouletfe9953a2016-01-10 04:28:38 +000060 cleanupret from %0 unwind to caller
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000061pad:
David Majnemer8cec2f22015-12-12 05:38:55 +000062 %0 = cleanuppad within none []
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000063 br label %cleanup
64exit:
65 ret void
David Majnemer4a45f082015-07-31 17:58:14 +000066}
67
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000068define void @catchret0() personality i32 (...)* @__gxx_personality_v0 {
David Majnemer4a45f082015-07-31 17:58:14 +000069entry:
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000070 invoke void @_Z3quxv() optsize
71 to label %exit unwind label %pad
72pad:
David Majnemer8cec2f22015-12-12 05:38:55 +000073 %cs1 = catchswitch within none [label %catch] unwind to caller
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000074catch:
David Majnemer8cec2f22015-12-12 05:38:55 +000075 %cp = catchpad within %cs1 [i7 4]
76 catchret from %cp to label %exit
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000077exit:
78 ret void
79}
80
81; forward ref by name
82define void @catchret1() personality i32 (...)* @__gxx_personality_v0 {
83entry:
84 invoke void @_Z3quxv() optsize
85 to label %exit unwind label %pad
David Majnemer8cec2f22015-12-12 05:38:55 +000086catchret:
87 catchret from %cp to label %exit
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000088pad:
David Majnemer8cec2f22015-12-12 05:38:55 +000089 %cs1 = catchswitch within none [label %catch] unwind to caller
90catch:
91 %cp = catchpad within %cs1 [i7 4]
92 br label %catchret
Joseph Tremouletd4a765f2015-08-23 00:26:33 +000093exit:
94 ret void
95}
96
97; forward ref by ID
98define void @catchret2() personality i32 (...)* @__gxx_personality_v0 {
99entry:
100 invoke void @_Z3quxv() optsize
101 to label %exit unwind label %pad
David Majnemer8cec2f22015-12-12 05:38:55 +0000102catchret:
103 catchret from %0 to label %exit
Joseph Tremouletd4a765f2015-08-23 00:26:33 +0000104pad:
David Majnemer8cec2f22015-12-12 05:38:55 +0000105 %cs1 = catchswitch within none [label %catch] unwind to caller
106catch:
107 %0 = catchpad within %cs1 [i7 4]
108 br label %catchret
Joseph Tremouletd4a765f2015-08-23 00:26:33 +0000109exit:
110 ret void
David Majnemer4a45f082015-07-31 17:58:14 +0000111}
112
113define i8 @catchpad() personality i32 (...)* @__gxx_personality_v0 {
114entry:
David Majnemer106f7b52015-08-11 02:48:30 +0000115 invoke void @_Z3quxv() optsize
David Majnemerde17e772015-08-15 02:46:08 +0000116 to label %exit unwind label %bb2
David Majnemer4a45f082015-07-31 17:58:14 +0000117bb2:
David Majnemer8cec2f22015-12-12 05:38:55 +0000118 %cs1 = catchswitch within none [label %catch] unwind to caller
119catch:
120 catchpad within %cs1 [i7 4]
121 br label %exit
Joseph Tremouletd4a765f2015-08-23 00:26:33 +0000122exit:
123 ret i8 0
David Majnemer4a45f082015-07-31 17:58:14 +0000124}
125
David Majnemer4a45f082015-07-31 17:58:14 +0000126define void @cleanuppad() personality i32 (...)* @__gxx_personality_v0 {
127entry:
David Majnemer106f7b52015-08-11 02:48:30 +0000128 br label %try.cont
129
130try.cont:
131 invoke void @_Z3quxv() optsize
132 to label %try.cont unwind label %bb
133bb:
David Majnemer8cec2f22015-12-12 05:38:55 +0000134 cleanuppad within none [i7 4]
Joseph Tremoulet226889e2015-09-03 09:09:43 +0000135 ret void
136}