|
161 | 161 | ;; CHECK: (export "func" (func $func)) |
162 | 162 |
|
163 | 163 | ;; CHECK: (func $func (type $1) |
164 | | - ;; CHECK-NEXT: (try |
165 | | - ;; CHECK-NEXT: (do |
166 | | - ;; CHECK-NEXT: (call $throw |
167 | | - ;; CHECK-NEXT: (i32.const 1) |
168 | | - ;; CHECK-NEXT: ) |
169 | | - ;; CHECK-NEXT: ) |
170 | | - ;; CHECK-NEXT: (catch $tag |
171 | | - ;; CHECK-NEXT: (drop |
172 | | - ;; CHECK-NEXT: (pop i32) |
| 164 | + ;; CHECK-NEXT: (drop |
| 165 | + ;; CHECK-NEXT: (block $block (result i32) |
| 166 | + ;; CHECK-NEXT: (try_table (catch $tag $block) |
| 167 | + ;; CHECK-NEXT: (call $throw |
| 168 | + ;; CHECK-NEXT: (i32.const 1) |
| 169 | + ;; CHECK-NEXT: ) |
173 | 170 | ;; CHECK-NEXT: ) |
| 171 | + ;; CHECK-NEXT: (return) |
174 | 172 | ;; CHECK-NEXT: ) |
175 | 173 | ;; CHECK-NEXT: ) |
176 | 174 | ;; CHECK-NEXT: ) |
177 | 175 | (func $func (export "func") |
178 | | - (try |
179 | | - (do |
180 | | - (call $throw |
181 | | - (i32.const 1) |
182 | | - ) |
183 | | - ) |
184 | | - (catch $tag |
185 | | - ;; If we thought no value was possible to pop here (if no exception were |
186 | | - ;; created of this tag) then we'd put an unreachable after it. As it is |
187 | | - ;; imported, a value might be there, so we do not. |
188 | | - (drop |
189 | | - (pop i32) |
| 176 | + (drop |
| 177 | + ;; If we thought no i32 value could arrive here (if no exception were |
| 178 | + ;; created of this tag) then we'd put an unreachable after it. As it is |
| 179 | + ;; imported, a value might be there, so we do not. |
| 180 | + (block $block (result i32) |
| 181 | + (try_table (catch $tag $block) |
| 182 | + (call $throw |
| 183 | + (i32.const 1) |
| 184 | + ) |
190 | 185 | ) |
| 186 | + (return) |
191 | 187 | ) |
192 | 188 | ) |
193 | 189 | ) |
194 | 190 | ) |
195 | 191 |
|
196 | 192 | ;; As above, but with an exported tag. Also test a tag with multiple params. |
197 | 193 | (module |
198 | | - ;; CHECK: (type $0 (func (param i32 f64))) |
| 194 | + ;; CHECK: (type $0 (func (result i32 f64))) |
| 195 | + |
| 196 | + ;; CHECK: (type $1 (func (param i32 f64))) |
199 | 197 |
|
200 | | - ;; CHECK: (type $1 (func (param i32))) |
| 198 | + ;; CHECK: (type $2 (func (param i32))) |
201 | 199 |
|
202 | | - ;; CHECK: (type $2 (func)) |
| 200 | + ;; CHECK: (type $3 (func)) |
203 | 201 |
|
204 | | - ;; CHECK: (import "fuzzing-support" "throw" (func $throw (type $1) (param i32))) |
| 202 | + ;; CHECK: (import "fuzzing-support" "throw" (func $throw (type $2) (param i32))) |
205 | 203 | (import "fuzzing-support" "throw" (func $throw (param i32))) |
206 | 204 |
|
207 | | - ;; CHECK: (tag $tag (type $0) (param i32 f64)) |
| 205 | + ;; CHECK: (tag $tag (type $1) (param i32 f64)) |
208 | 206 | (tag $tag (param i32 f64)) |
209 | 207 |
|
210 | 208 | ;; CHECK: (export "func" (func $func)) |
211 | 209 |
|
212 | 210 | ;; CHECK: (export "tag" (tag $tag)) |
213 | 211 | (export "tag" (tag $tag)) |
214 | 212 |
|
215 | | - ;; CHECK: (func $func (type $2) |
216 | | - ;; CHECK-NEXT: (try |
217 | | - ;; CHECK-NEXT: (do |
218 | | - ;; CHECK-NEXT: (call $throw |
219 | | - ;; CHECK-NEXT: (i32.const 1) |
220 | | - ;; CHECK-NEXT: ) |
221 | | - ;; CHECK-NEXT: ) |
222 | | - ;; CHECK-NEXT: (catch $tag |
223 | | - ;; CHECK-NEXT: (tuple.drop 2 |
224 | | - ;; CHECK-NEXT: (pop (tuple i32 f64)) |
| 213 | + ;; CHECK: (func $func (type $3) |
| 214 | + ;; CHECK-NEXT: (tuple.drop 2 |
| 215 | + ;; CHECK-NEXT: (block $block (type $0) (result i32 f64) |
| 216 | + ;; CHECK-NEXT: (try_table (catch $tag $block) |
| 217 | + ;; CHECK-NEXT: (call $throw |
| 218 | + ;; CHECK-NEXT: (i32.const 1) |
| 219 | + ;; CHECK-NEXT: ) |
225 | 220 | ;; CHECK-NEXT: ) |
| 221 | + ;; CHECK-NEXT: (return) |
226 | 222 | ;; CHECK-NEXT: ) |
227 | 223 | ;; CHECK-NEXT: ) |
228 | 224 | ;; CHECK-NEXT: ) |
229 | 225 | (func $func (export "func") |
230 | | - (try |
231 | | - (do |
232 | | - (call $throw |
233 | | - (i32.const 1) |
234 | | - ) |
235 | | - ) |
236 | | - (catch $tag |
237 | | - ;; Once more, we do not optimize to unreachable here. |
238 | | - (tuple.drop 2 |
239 | | - (pop (tuple i32 f64)) |
| 226 | + ;; Once more, we do not optimize to unreachable here. |
| 227 | + (tuple.drop 2 |
| 228 | + (block $block (result i32 f64) |
| 229 | + (try_table (catch $tag $block) |
| 230 | + (call $throw |
| 231 | + (i32.const 1) |
| 232 | + ) |
240 | 233 | ) |
| 234 | + (return) |
241 | 235 | ) |
242 | 236 | ) |
243 | 237 | ) |
|
258 | 252 | ;; CHECK: (export "func" (func $func)) |
259 | 253 |
|
260 | 254 | ;; CHECK: (func $func (type $1) |
261 | | - ;; CHECK-NEXT: (local $0 i32) |
262 | | - ;; CHECK-NEXT: (try |
263 | | - ;; CHECK-NEXT: (do |
264 | | - ;; CHECK-NEXT: (call $throw |
265 | | - ;; CHECK-NEXT: (i32.const 1) |
266 | | - ;; CHECK-NEXT: ) |
267 | | - ;; CHECK-NEXT: ) |
268 | | - ;; CHECK-NEXT: (catch $tag |
269 | | - ;; CHECK-NEXT: (local.set $0 |
270 | | - ;; CHECK-NEXT: (pop i32) |
271 | | - ;; CHECK-NEXT: ) |
| 255 | + ;; CHECK-NEXT: (drop |
| 256 | + ;; CHECK-NEXT: (block |
272 | 257 | ;; CHECK-NEXT: (drop |
273 | | - ;; CHECK-NEXT: (block |
274 | | - ;; CHECK-NEXT: (drop |
275 | | - ;; CHECK-NEXT: (local.get $0) |
| 258 | + ;; CHECK-NEXT: (block $block (result i32) |
| 259 | + ;; CHECK-NEXT: (try_table (catch $tag $block) |
| 260 | + ;; CHECK-NEXT: (call $throw |
| 261 | + ;; CHECK-NEXT: (i32.const 1) |
| 262 | + ;; CHECK-NEXT: ) |
276 | 263 | ;; CHECK-NEXT: ) |
277 | | - ;; CHECK-NEXT: (unreachable) |
| 264 | + ;; CHECK-NEXT: (return) |
278 | 265 | ;; CHECK-NEXT: ) |
279 | 266 | ;; CHECK-NEXT: ) |
| 267 | + ;; CHECK-NEXT: (unreachable) |
280 | 268 | ;; CHECK-NEXT: ) |
281 | 269 | ;; CHECK-NEXT: ) |
282 | 270 | ;; CHECK-NEXT: ) |
283 | 271 | (func $func (export "func") |
284 | | - (try |
285 | | - (do |
286 | | - (call $throw |
287 | | - (i32.const 1) |
288 | | - ) |
289 | | - ) |
290 | | - (catch $tag |
291 | | - ;; The tag is neither imported nor exported, so we can optimize to |
292 | | - ;; unreachable. |
293 | | - (drop |
294 | | - (pop i32) |
| 272 | + ;; The tag is neither imported nor exported, so we can optimize to |
| 273 | + ;; unreachable. |
| 274 | + (drop |
| 275 | + (block $block (result i32) |
| 276 | + (try_table (catch $tag $block) |
| 277 | + (call $throw |
| 278 | + (i32.const 1) |
| 279 | + ) |
295 | 280 | ) |
| 281 | + (return) |
296 | 282 | ) |
297 | 283 | ) |
298 | 284 | ) |
|
0 commit comments