150
|
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
|
252
|
5 @_ZTIc = external constant ptr
|
|
6 @_ZTId = external constant ptr
|
|
7 @_ZTIPKc = external constant ptr
|
150
|
8
|
252
|
9 define void @_Z3barv() uwtable optsize ssp personality ptr @__gxx_personality_v0 {
|
150
|
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
|
252
|
18 %exn = landingpad {ptr, i32}
|
150
|
19 cleanup
|
252
|
20 catch ptr @_ZTIc
|
|
21 filter [2 x ptr] [ptr @_ZTIPKc, ptr @_ZTId]
|
|
22 resume { ptr, i32 } %exn
|
150
|
23 }
|
|
24
|
|
25 declare void @_Z3quxv() optsize
|
|
26
|
|
27 declare i32 @__gxx_personality_v0(...)
|
|
28
|
252
|
29 define void @cleanupret0() personality ptr @__gxx_personality_v0 {
|
150
|
30 entry:
|
|
31 invoke void @_Z3quxv() optsize
|
|
32 to label %exit unwind label %pad
|
|
33 pad:
|
|
34 %cp = cleanuppad within none [i7 4]
|
|
35 cleanupret from %cp unwind to caller
|
|
36 exit:
|
|
37 ret void
|
|
38 }
|
|
39
|
|
40 ; forward ref by name
|
252
|
41 define void @cleanupret1() personality ptr @__gxx_personality_v0 {
|
150
|
42 entry:
|
|
43 invoke void @_Z3quxv() optsize
|
|
44 to label %exit unwind label %pad
|
|
45 cleanup:
|
|
46 cleanupret from %cp unwind to caller
|
|
47 pad:
|
|
48 %cp = cleanuppad within none []
|
|
49 br label %cleanup
|
|
50 exit:
|
|
51 ret void
|
|
52 }
|
|
53
|
|
54 ; forward ref by ID
|
252
|
55 define void @cleanupret2() personality ptr @__gxx_personality_v0 {
|
150
|
56 entry:
|
|
57 invoke void @_Z3quxv() optsize
|
|
58 to label %exit unwind label %pad
|
|
59 cleanup:
|
|
60 cleanupret from %0 unwind to caller
|
|
61 pad:
|
|
62 %0 = cleanuppad within none []
|
|
63 br label %cleanup
|
|
64 exit:
|
|
65 ret void
|
|
66 }
|
|
67
|
252
|
68 define void @catchret0() personality ptr @__gxx_personality_v0 {
|
150
|
69 entry:
|
|
70 invoke void @_Z3quxv() optsize
|
|
71 to label %exit unwind label %pad
|
|
72 pad:
|
|
73 %cs1 = catchswitch within none [label %catch] unwind to caller
|
|
74 catch:
|
|
75 %cp = catchpad within %cs1 [i7 4]
|
|
76 catchret from %cp to label %exit
|
|
77 exit:
|
|
78 ret void
|
|
79 }
|
|
80
|
|
81 ; forward ref by name
|
252
|
82 define void @catchret1() personality ptr @__gxx_personality_v0 {
|
150
|
83 entry:
|
|
84 invoke void @_Z3quxv() optsize
|
|
85 to label %exit unwind label %pad
|
|
86 catchret:
|
|
87 catchret from %cp to label %exit
|
|
88 pad:
|
|
89 %cs1 = catchswitch within none [label %catch] unwind to caller
|
|
90 catch:
|
|
91 %cp = catchpad within %cs1 [i7 4]
|
|
92 br label %catchret
|
|
93 exit:
|
|
94 ret void
|
|
95 }
|
|
96
|
|
97 ; forward ref by ID
|
252
|
98 define void @catchret2() personality ptr @__gxx_personality_v0 {
|
150
|
99 entry:
|
|
100 invoke void @_Z3quxv() optsize
|
|
101 to label %exit unwind label %pad
|
|
102 catchret:
|
|
103 catchret from %0 to label %exit
|
|
104 pad:
|
|
105 %cs1 = catchswitch within none [label %catch] unwind to caller
|
|
106 catch:
|
|
107 %0 = catchpad within %cs1 [i7 4]
|
|
108 br label %catchret
|
|
109 exit:
|
|
110 ret void
|
|
111 }
|
|
112
|
252
|
113 define i8 @catchpad() personality ptr @__gxx_personality_v0 {
|
150
|
114 entry:
|
|
115 invoke void @_Z3quxv() optsize
|
|
116 to label %exit unwind label %bb2
|
|
117 bb2:
|
|
118 %cs1 = catchswitch within none [label %catch] unwind to caller
|
|
119 catch:
|
|
120 catchpad within %cs1 [i7 4]
|
|
121 br label %exit
|
|
122 exit:
|
|
123 ret i8 0
|
|
124 }
|
|
125
|
252
|
126 define void @cleanuppad() personality ptr @__gxx_personality_v0 {
|
150
|
127 entry:
|
|
128 br label %try.cont
|
|
129
|
|
130 try.cont:
|
|
131 invoke void @_Z3quxv() optsize
|
|
132 to label %try.cont unwind label %bb
|
|
133 bb:
|
|
134 cleanuppad within none [i7 4]
|
|
135 ret void
|
|
136 }
|