...
1;; Test `if` operator
2
3(module
4 ;; Auxiliary definition
5 (memory 1)
6
7 (func $dummy)
8
9 (func (export "empty") (param i32)
10 (if (local.get 0) (then))
11 (if (local.get 0) (then) (else))
12 (if $l (local.get 0) (then))
13 (if $l (local.get 0) (then) (else))
14 )
15
16 (func (export "singular") (param i32) (result i32)
17 (if (local.get 0) (then (nop)))
18 (if (local.get 0) (then (nop)) (else (nop)))
19 (if (result i32) (local.get 0) (then (i32.const 7)) (else (i32.const 8)))
20 )
21
22 (func (export "multi") (param i32) (result i32 i32)
23 (if (local.get 0) (then (call $dummy) (call $dummy) (call $dummy)))
24 (if (local.get 0) (then) (else (call $dummy) (call $dummy) (call $dummy)))
25 (if (result i32) (local.get 0)
26 (then (call $dummy) (call $dummy) (i32.const 8) (call $dummy))
27 (else (call $dummy) (call $dummy) (i32.const 9) (call $dummy))
28 )
29 (if (result i32 i64 i32) (local.get 0)
30 (then
31 (call $dummy) (call $dummy) (i32.const 1) (call $dummy)
32 (call $dummy) (call $dummy) (i64.const 2) (call $dummy)
33 (call $dummy) (call $dummy) (i32.const 3) (call $dummy)
34 )
35 (else
36 (call $dummy) (call $dummy) (i32.const -1) (call $dummy)
37 (call $dummy) (call $dummy) (i64.const -2) (call $dummy)
38 (call $dummy) (call $dummy) (i32.const -3) (call $dummy)
39 )
40 )
41 (drop) (drop)
42 )
43
44 (func (export "nested") (param i32 i32) (result i32)
45 (if (result i32) (local.get 0)
46 (then
47 (if (local.get 1) (then (call $dummy) (block) (nop)))
48 (if (local.get 1) (then) (else (call $dummy) (block) (nop)))
49 (if (result i32) (local.get 1)
50 (then (call $dummy) (i32.const 9))
51 (else (call $dummy) (i32.const 10))
52 )
53 )
54 (else
55 (if (local.get 1) (then (call $dummy) (block) (nop)))
56 (if (local.get 1) (then) (else (call $dummy) (block) (nop)))
57 (if (result i32) (local.get 1)
58 (then (call $dummy) (i32.const 10))
59 (else (call $dummy) (i32.const 11))
60 )
61 )
62 )
63 )
64
65 (func (export "as-select-first") (param i32) (result i32)
66 (select
67 (if (result i32) (local.get 0)
68 (then (call $dummy) (i32.const 1))
69 (else (call $dummy) (i32.const 0))
70 )
71 (i32.const 2) (i32.const 3)
72 )
73 )
74 (func (export "as-select-mid") (param i32) (result i32)
75 (select
76 (i32.const 2)
77 (if (result i32) (local.get 0)
78 (then (call $dummy) (i32.const 1))
79 (else (call $dummy) (i32.const 0))
80 )
81 (i32.const 3)
82 )
83 )
84 (func (export "as-select-last") (param i32) (result i32)
85 (select
86 (i32.const 2) (i32.const 3)
87 (if (result i32) (local.get 0)
88 (then (call $dummy) (i32.const 1))
89 (else (call $dummy) (i32.const 0))
90 )
91 )
92 )
93
94 (func (export "as-loop-first") (param i32) (result i32)
95 (loop (result i32)
96 (if (result i32) (local.get 0)
97 (then (call $dummy) (i32.const 1))
98 (else (call $dummy) (i32.const 0))
99 )
100 (call $dummy) (call $dummy)
101 )
102 )
103 (func (export "as-loop-mid") (param i32) (result i32)
104 (loop (result i32)
105 (call $dummy)
106 (if (result i32) (local.get 0)
107 (then (call $dummy) (i32.const 1))
108 (else (call $dummy) (i32.const 0))
109 )
110 (call $dummy)
111 )
112 )
113 (func (export "as-loop-last") (param i32) (result i32)
114 (loop (result i32)
115 (call $dummy) (call $dummy)
116 (if (result i32) (local.get 0)
117 (then (call $dummy) (i32.const 1))
118 (else (call $dummy) (i32.const 0))
119 )
120 )
121 )
122
123 (func (export "as-if-condition") (param i32) (result i32)
124 (if (result i32)
125 (if (result i32) (local.get 0)
126 (then (i32.const 1)) (else (i32.const 0))
127 )
128 (then (call $dummy) (i32.const 2))
129 (else (call $dummy) (i32.const 3))
130 )
131 )
132
133 (func (export "as-br_if-first") (param i32) (result i32)
134 (block (result i32)
135 (br_if 0
136 (if (result i32) (local.get 0)
137 (then (call $dummy) (i32.const 1))
138 (else (call $dummy) (i32.const 0))
139 )
140 (i32.const 2)
141 )
142 (return (i32.const 3))
143 )
144 )
145 (func (export "as-br_if-last") (param i32) (result i32)
146 (block (result i32)
147 (br_if 0
148 (i32.const 2)
149 (if (result i32) (local.get 0)
150 (then (call $dummy) (i32.const 1))
151 (else (call $dummy) (i32.const 0))
152 )
153 )
154 (return (i32.const 3))
155 )
156 )
157
158 (func (export "as-br_table-first") (param i32) (result i32)
159 (block (result i32)
160 (if (result i32) (local.get 0)
161 (then (call $dummy) (i32.const 1))
162 (else (call $dummy) (i32.const 0))
163 )
164 (i32.const 2)
165 (br_table 0 0)
166 )
167 )
168 (func (export "as-br_table-last") (param i32) (result i32)
169 (block (result i32)
170 (i32.const 2)
171 (if (result i32) (local.get 0)
172 (then (call $dummy) (i32.const 1))
173 (else (call $dummy) (i32.const 0))
174 )
175 (br_table 0 0)
176 )
177 )
178
179 (func $func (param i32 i32) (result i32) (local.get 0))
180 (type $check (func (param i32 i32) (result i32)))
181 (table funcref (elem $func))
182 (func (export "as-call_indirect-first") (param i32) (result i32)
183 (block (result i32)
184 (call_indirect (type $check)
185 (if (result i32) (local.get 0)
186 (then (call $dummy) (i32.const 1))
187 (else (call $dummy) (i32.const 0))
188 )
189 (i32.const 2) (i32.const 0)
190 )
191 )
192 )
193 (func (export "as-call_indirect-mid") (param i32) (result i32)
194 (block (result i32)
195 (call_indirect (type $check)
196 (i32.const 2)
197 (if (result i32) (local.get 0)
198 (then (call $dummy) (i32.const 1))
199 (else (call $dummy) (i32.const 0))
200 )
201 (i32.const 0)
202 )
203 )
204 )
205 (func (export "as-call_indirect-last") (param i32) (result i32)
206 (block (result i32)
207 (call_indirect (type $check)
208 (i32.const 2) (i32.const 0)
209 (if (result i32) (local.get 0)
210 (then (call $dummy) (i32.const 1))
211 (else (call $dummy) (i32.const 0))
212 )
213 )
214 )
215 )
216
217 (func (export "as-store-first") (param i32)
218 (if (result i32) (local.get 0)
219 (then (call $dummy) (i32.const 1))
220 (else (call $dummy) (i32.const 0))
221 )
222 (i32.const 2)
223 (i32.store)
224 )
225 (func (export "as-store-last") (param i32)
226 (i32.const 2)
227 (if (result i32) (local.get 0)
228 (then (call $dummy) (i32.const 1))
229 (else (call $dummy) (i32.const 0))
230 )
231 (i32.store)
232 )
233
234 (func (export "as-memory.grow-value") (param i32) (result i32)
235 (memory.grow
236 (if (result i32) (local.get 0)
237 (then (i32.const 1))
238 (else (i32.const 0))
239 )
240 )
241 )
242
243 (func $f (param i32) (result i32) (local.get 0))
244
245 (func (export "as-call-value") (param i32) (result i32)
246 (call $f
247 (if (result i32) (local.get 0)
248 (then (i32.const 1))
249 (else (i32.const 0))
250 )
251 )
252 )
253 (func (export "as-return-value") (param i32) (result i32)
254 (if (result i32) (local.get 0)
255 (then (i32.const 1))
256 (else (i32.const 0)))
257 (return)
258 )
259 (func (export "as-drop-operand") (param i32)
260 (drop
261 (if (result i32) (local.get 0)
262 (then (i32.const 1))
263 (else (i32.const 0))
264 )
265 )
266 )
267 (func (export "as-br-value") (param i32) (result i32)
268 (block (result i32)
269 (br 0
270 (if (result i32) (local.get 0)
271 (then (i32.const 1))
272 (else (i32.const 0))
273 )
274 )
275 )
276 )
277 (func (export "as-local.set-value") (param i32) (result i32)
278 (local i32)
279 (local.set 0
280 (if (result i32) (local.get 0)
281 (then (i32.const 1))
282 (else (i32.const 0))
283 )
284 )
285 (local.get 0)
286 )
287 (func (export "as-local.tee-value") (param i32) (result i32)
288 (local.tee 0
289 (if (result i32) (local.get 0)
290 (then (i32.const 1))
291 (else (i32.const 0))
292 )
293 )
294 )
295 (global $a (mut i32) (i32.const 10))
296 (func (export "as-global.set-value") (param i32) (result i32)
297 (global.set $a
298 (if (result i32) (local.get 0)
299 (then (i32.const 1))
300 (else (i32.const 0))
301 )
302 ) (global.get $a)
303 )
304 (func (export "as-load-operand") (param i32) (result i32)
305 (i32.load
306 (if (result i32) (local.get 0)
307 (then (i32.const 11))
308 (else (i32.const 10))
309 )
310 )
311 )
312
313 (func (export "as-unary-operand") (param i32) (result i32)
314 (i32.ctz
315 (if (result i32) (local.get 0)
316 (then (call $dummy) (i32.const 13))
317 (else (call $dummy) (i32.const -13))
318 )
319 )
320 )
321 (func (export "as-binary-operand") (param i32 i32) (result i32)
322 (i32.mul
323 (if (result i32) (local.get 0)
324 (then (call $dummy) (i32.const 3))
325 (else (call $dummy) (i32.const -3))
326 )
327 (if (result i32) (local.get 1)
328 (then (call $dummy) (i32.const 4))
329 (else (call $dummy) (i32.const -5))
330 )
331 )
332 )
333 (func (export "as-test-operand") (param i32) (result i32)
334 (i32.eqz
335 (if (result i32) (local.get 0)
336 (then (call $dummy) (i32.const 13))
337 (else (call $dummy) (i32.const 0))
338 )
339 )
340 )
341 (func (export "as-compare-operand") (param i32 i32) (result i32)
342 (f32.gt
343 (if (result f32) (local.get 0)
344 (then (call $dummy) (f32.const 3))
345 (else (call $dummy) (f32.const -3))
346 )
347 (if (result f32) (local.get 1)
348 (then (call $dummy) (f32.const 4))
349 (else (call $dummy) (f32.const -4))
350 )
351 )
352 )
353 (func (export "as-binary-operands") (param i32) (result i32)
354 (i32.mul
355 (if (result i32 i32) (local.get 0)
356 (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4))
357 (else (call $dummy) (i32.const 3) (call $dummy) (i32.const -4))
358 )
359 )
360 )
361 (func (export "as-compare-operands") (param i32) (result i32)
362 (f32.gt
363 (if (result f32 f32) (local.get 0)
364 (then (call $dummy) (f32.const 3) (call $dummy) (f32.const 3))
365 (else (call $dummy) (f32.const -2) (call $dummy) (f32.const -3))
366 )
367 )
368 )
369 (func (export "as-mixed-operands") (param i32) (result i32)
370 (if (result i32 i32) (local.get 0)
371 (then (call $dummy) (i32.const 3) (call $dummy) (i32.const 4))
372 (else (call $dummy) (i32.const -3) (call $dummy) (i32.const -4))
373 )
374 (i32.const 5)
375 (i32.add)
376 (i32.mul)
377 )
378
379 (func (export "break-bare") (result i32)
380 (if (i32.const 1) (then (br 0) (unreachable)))
381 (if (i32.const 1) (then (br 0) (unreachable)) (else (unreachable)))
382 (if (i32.const 0) (then (unreachable)) (else (br 0) (unreachable)))
383 (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)))
384 (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)) (else (unreachable)))
385 (if (i32.const 0) (then (unreachable)) (else (br_if 0 (i32.const 1)) (unreachable)))
386 (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)))
387 (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)) (else (unreachable)))
388 (if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable)))
389 (i32.const 19)
390 )
391
392 (func (export "break-value") (param i32) (result i32)
393 (if (result i32) (local.get 0)
394 (then (br 0 (i32.const 18)) (i32.const 19))
395 (else (br 0 (i32.const 21)) (i32.const 20))
396 )
397 )
398 (func (export "break-multi-value") (param i32) (result i32 i32 i64)
399 (if (result i32 i32 i64) (local.get 0)
400 (then
401 (br 0 (i32.const 18) (i32.const -18) (i64.const 18))
402 (i32.const 19) (i32.const -19) (i64.const 19)
403 )
404 (else
405 (br 0 (i32.const -18) (i32.const 18) (i64.const -18))
406 (i32.const -19) (i32.const 19) (i64.const -19)
407 )
408 )
409 )
410
411 (func (export "param") (param i32) (result i32)
412 (i32.const 1)
413 (if (param i32) (result i32) (local.get 0)
414 (then (i32.const 2) (i32.add))
415 (else (i32.const -2) (i32.add))
416 )
417 )
418 (func (export "params") (param i32) (result i32)
419 (i32.const 1)
420 (i32.const 2)
421 (if (param i32 i32) (result i32) (local.get 0)
422 (then (i32.add))
423 (else (i32.sub))
424 )
425 )
426 (func (export "params-id") (param i32) (result i32)
427 (i32.const 1)
428 (i32.const 2)
429 (if (param i32 i32) (result i32 i32) (local.get 0) (then))
430 (i32.add)
431 )
432 (func (export "param-break") (param i32) (result i32)
433 (i32.const 1)
434 (if (param i32) (result i32) (local.get 0)
435 (then (i32.const 2) (i32.add) (br 0))
436 (else (i32.const -2) (i32.add) (br 0))
437 )
438 )
439 (func (export "params-break") (param i32) (result i32)
440 (i32.const 1)
441 (i32.const 2)
442 (if (param i32 i32) (result i32) (local.get 0)
443 (then (i32.add) (br 0))
444 (else (i32.sub) (br 0))
445 )
446 )
447 (func (export "params-id-break") (param i32) (result i32)
448 (i32.const 1)
449 (i32.const 2)
450 (if (param i32 i32) (result i32 i32) (local.get 0) (then (br 0)))
451 (i32.add)
452 )
453
454 (func (export "effects") (param i32) (result i32)
455 (local i32)
456 (if
457 (block (result i32) (local.set 1 (i32.const 1)) (local.get 0))
458 (then
459 (local.set 1 (i32.mul (local.get 1) (i32.const 3)))
460 (local.set 1 (i32.sub (local.get 1) (i32.const 5)))
461 (local.set 1 (i32.mul (local.get 1) (i32.const 7)))
462 (br 0)
463 (local.set 1 (i32.mul (local.get 1) (i32.const 100)))
464 )
465 (else
466 (local.set 1 (i32.mul (local.get 1) (i32.const 5)))
467 (local.set 1 (i32.sub (local.get 1) (i32.const 7)))
468 (local.set 1 (i32.mul (local.get 1) (i32.const 3)))
469 (br 0)
470 (local.set 1 (i32.mul (local.get 1) (i32.const 1000)))
471 )
472 )
473 (local.get 1)
474 )
475
476 ;; Examples
477
478 (func $add64_u_with_carry (export "add64_u_with_carry")
479 (param $i i64) (param $j i64) (param $c i32) (result i64 i32)
480 (local $k i64)
481 (local.set $k
482 (i64.add
483 (i64.add (local.get $i) (local.get $j))
484 (i64.extend_i32_u (local.get $c))
485 )
486 )
487 (return (local.get $k) (i64.lt_u (local.get $k) (local.get $i)))
488 )
489
490 (func $add64_u_saturated (export "add64_u_saturated")
491 (param i64 i64) (result i64)
492 (call $add64_u_with_carry (local.get 0) (local.get 1) (i32.const 0))
493 (if (param i64) (result i64)
494 (then (drop) (i64.const -1))
495 )
496 )
497
498 ;; Block signature syntax
499
500 (type $block-sig-1 (func))
501 (type $block-sig-2 (func (result i32)))
502 (type $block-sig-3 (func (param $x i32)))
503 (type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32)))
504
505 (func (export "type-use")
506 (if (type $block-sig-1) (i32.const 1) (then))
507 (if (type $block-sig-2) (i32.const 1)
508 (then (i32.const 0)) (else (i32.const 2))
509 )
510 (if (type $block-sig-3) (i32.const 1) (then (drop)) (else (drop)))
511 (i32.const 0) (f64.const 0) (i32.const 0)
512 (if (type $block-sig-4) (i32.const 1) (then))
513 (drop) (drop) (drop)
514 (if (type $block-sig-2) (result i32) (i32.const 1)
515 (then (i32.const 0)) (else (i32.const 2))
516 )
517 (if (type $block-sig-3) (param i32) (i32.const 1)
518 (then (drop)) (else (drop))
519 )
520 (i32.const 0) (f64.const 0) (i32.const 0)
521 (if (type $block-sig-4)
522 (param i32) (param f64 i32) (result i32 f64) (result i32)
523 (i32.const 1) (then)
524 )
525 (drop) (drop) (drop)
526 )
527)
528
529(assert_return (invoke "empty" (i32.const 0)))
530(assert_return (invoke "empty" (i32.const 1)))
531(assert_return (invoke "empty" (i32.const 100)))
532(assert_return (invoke "empty" (i32.const -2)))
533
534(assert_return (invoke "singular" (i32.const 0)) (i32.const 8))
535(assert_return (invoke "singular" (i32.const 1)) (i32.const 7))
536(assert_return (invoke "singular" (i32.const 10)) (i32.const 7))
537(assert_return (invoke "singular" (i32.const -10)) (i32.const 7))
538
539(assert_return (invoke "multi" (i32.const 0)) (i32.const 9) (i32.const -1))
540(assert_return (invoke "multi" (i32.const 1)) (i32.const 8) (i32.const 1))
541(assert_return (invoke "multi" (i32.const 13)) (i32.const 8) (i32.const 1))
542(assert_return (invoke "multi" (i32.const -5)) (i32.const 8) (i32.const 1))
543
544(assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11))
545(assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10))
546(assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10))
547(assert_return (invoke "nested" (i32.const 3) (i32.const 2)) (i32.const 9))
548(assert_return (invoke "nested" (i32.const 0) (i32.const -100)) (i32.const 10))
549(assert_return (invoke "nested" (i32.const 10) (i32.const 10)) (i32.const 9))
550(assert_return (invoke "nested" (i32.const 0) (i32.const -1)) (i32.const 10))
551(assert_return (invoke "nested" (i32.const -111) (i32.const -2)) (i32.const 9))
552
553(assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 0))
554(assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 1))
555(assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2))
556(assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2))
557(assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 3))
558(assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 2))
559
560(assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 0))
561(assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 1))
562(assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 0))
563(assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 1))
564(assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 0))
565(assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 1))
566
567(assert_return (invoke "as-if-condition" (i32.const 0)) (i32.const 3))
568(assert_return (invoke "as-if-condition" (i32.const 1)) (i32.const 2))
569
570(assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 0))
571(assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 1))
572(assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 3))
573(assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2))
574
575(assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 0))
576(assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 1))
577(assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2))
578(assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2))
579
580(assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 0))
581(assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 1))
582(assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 2))
583(assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 2))
584(assert_return (invoke "as-call_indirect-last" (i32.const 0)) (i32.const 2))
585(assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element")
586
587(assert_return (invoke "as-store-first" (i32.const 0)))
588(assert_return (invoke "as-store-first" (i32.const 1)))
589(assert_return (invoke "as-store-last" (i32.const 0)))
590(assert_return (invoke "as-store-last" (i32.const 1)))
591
592(assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1))
593(assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 1))
594
595(assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 0))
596(assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1))
597
598(assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 0))
599(assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1))
600
601(assert_return (invoke "as-drop-operand" (i32.const 0)))
602(assert_return (invoke "as-drop-operand" (i32.const 1)))
603
604(assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 0))
605(assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1))
606
607(assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 0))
608(assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1))
609
610(assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 0))
611(assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1))
612
613(assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 0))
614(assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1))
615
616(assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 0))
617(assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 0))
618
619(assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0))
620(assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 0))
621(assert_return (invoke "as-unary-operand" (i32.const -1)) (i32.const 0))
622
623(assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 0)) (i32.const 15))
624(assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 1)) (i32.const -12))
625(assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 0)) (i32.const -15))
626(assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 1)) (i32.const 12))
627
628(assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 1))
629(assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 0))
630
631(assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 0)) (i32.const 1))
632(assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 1)) (i32.const 0))
633(assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 0)) (i32.const 1))
634(assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 1)) (i32.const 0))
635
636(assert_return (invoke "as-binary-operands" (i32.const 0)) (i32.const -12))
637(assert_return (invoke "as-binary-operands" (i32.const 1)) (i32.const 12))
638
639(assert_return (invoke "as-compare-operands" (i32.const 0)) (i32.const 1))
640(assert_return (invoke "as-compare-operands" (i32.const 1)) (i32.const 0))
641
642(assert_return (invoke "as-mixed-operands" (i32.const 0)) (i32.const -3))
643(assert_return (invoke "as-mixed-operands" (i32.const 1)) (i32.const 27))
644
645(assert_return (invoke "break-bare") (i32.const 19))
646(assert_return (invoke "break-value" (i32.const 1)) (i32.const 18))
647(assert_return (invoke "break-value" (i32.const 0)) (i32.const 21))
648(assert_return (invoke "break-multi-value" (i32.const 0))
649 (i32.const -18) (i32.const 18) (i64.const -18)
650)
651(assert_return (invoke "break-multi-value" (i32.const 1))
652 (i32.const 18) (i32.const -18) (i64.const 18)
653)
654
655(assert_return (invoke "param" (i32.const 0)) (i32.const -1))
656(assert_return (invoke "param" (i32.const 1)) (i32.const 3))
657(assert_return (invoke "params" (i32.const 0)) (i32.const -1))
658(assert_return (invoke "params" (i32.const 1)) (i32.const 3))
659(assert_return (invoke "params-id" (i32.const 0)) (i32.const 3))
660(assert_return (invoke "params-id" (i32.const 1)) (i32.const 3))
661(assert_return (invoke "param-break" (i32.const 0)) (i32.const -1))
662(assert_return (invoke "param-break" (i32.const 1)) (i32.const 3))
663(assert_return (invoke "params-break" (i32.const 0)) (i32.const -1))
664(assert_return (invoke "params-break" (i32.const 1)) (i32.const 3))
665(assert_return (invoke "params-id-break" (i32.const 0)) (i32.const 3))
666(assert_return (invoke "params-id-break" (i32.const 1)) (i32.const 3))
667
668(assert_return (invoke "effects" (i32.const 1)) (i32.const -14))
669(assert_return (invoke "effects" (i32.const 0)) (i32.const -6))
670
671(assert_return
672 (invoke "add64_u_with_carry" (i64.const 0) (i64.const 0) (i32.const 0))
673 (i64.const 0) (i32.const 0)
674)
675(assert_return
676 (invoke "add64_u_with_carry" (i64.const 100) (i64.const 124) (i32.const 0))
677 (i64.const 224) (i32.const 0)
678)
679(assert_return
680 (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 0))
681 (i64.const -1) (i32.const 0)
682)
683(assert_return
684 (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 0))
685 (i64.const 0) (i32.const 1)
686)
687(assert_return
688 (invoke "add64_u_with_carry" (i64.const -1) (i64.const -1) (i32.const 0))
689 (i64.const -2) (i32.const 1)
690)
691(assert_return
692 (invoke "add64_u_with_carry" (i64.const -1) (i64.const 0) (i32.const 1))
693 (i64.const 0) (i32.const 1)
694)
695(assert_return
696 (invoke "add64_u_with_carry" (i64.const -1) (i64.const 1) (i32.const 1))
697 (i64.const 1) (i32.const 1)
698)
699(assert_return
700 (invoke "add64_u_with_carry" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000) (i32.const 0))
701 (i64.const 0) (i32.const 1)
702)
703
704(assert_return
705 (invoke "add64_u_saturated" (i64.const 0) (i64.const 0)) (i64.const 0)
706)
707(assert_return
708 (invoke "add64_u_saturated" (i64.const 1230) (i64.const 23)) (i64.const 1253)
709)
710(assert_return
711 (invoke "add64_u_saturated" (i64.const -1) (i64.const 0)) (i64.const -1)
712)
713(assert_return
714 (invoke "add64_u_saturated" (i64.const -1) (i64.const 1)) (i64.const -1)
715)
716(assert_return
717 (invoke "add64_u_saturated" (i64.const -1) (i64.const -1)) (i64.const -1)
718)
719(assert_return
720 (invoke "add64_u_saturated" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const -1)
721)
722
723(assert_return (invoke "type-use"))
724
725(assert_malformed
726 (module quote
727 "(type $sig (func (param i32) (result i32)))"
728 "(func (i32.const 0)"
729 " (if (type $sig) (result i32) (param i32) (i32.const 1) (then))"
730 ")"
731 )
732 "unexpected token"
733)
734(assert_malformed
735 (module quote
736 "(type $sig (func (param i32) (result i32)))"
737 "(func (i32.const 0)"
738 " (if (param i32) (type $sig) (result i32) (i32.const 1) (then))"
739 ")"
740 )
741 "unexpected token"
742)
743(assert_malformed
744 (module quote
745 "(type $sig (func (param i32) (result i32)))"
746 "(func (i32.const 0)"
747 " (if (param i32) (result i32) (type $sig) (i32.const 1) (then))"
748 ")"
749 )
750 "unexpected token"
751)
752(assert_malformed
753 (module quote
754 "(type $sig (func (param i32) (result i32)))"
755 "(func (i32.const 0)"
756 " (if (result i32) (type $sig) (param i32) (i32.const 1) (then))"
757 ")"
758 )
759 "unexpected token"
760)
761(assert_malformed
762 (module quote
763 "(type $sig (func (param i32) (result i32)))"
764 "(func (i32.const 0)"
765 " (if (result i32) (param i32) (type $sig) (i32.const 1) (then))"
766 ")"
767 )
768 "unexpected token"
769)
770(assert_malformed
771 (module quote
772 "(func (i32.const 0) (if (result i32) (param i32) (i32.const 1) (then)))"
773 )
774 "unexpected token"
775)
776
777(assert_malformed
778 (module quote
779 "(func (i32.const 0) (i32.const 1)"
780 " (if (param $x i32) (then (drop)) (else (drop)))"
781 ")"
782 )
783 "unexpected token"
784)
785(assert_malformed
786 (module quote
787 "(type $sig (func))"
788 "(func (i32.const 1)"
789 " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))"
790 " (unreachable)"
791 ")"
792 )
793 "inline function type"
794)
795(assert_malformed
796 (module quote
797 "(type $sig (func (param i32) (result i32)))"
798 "(func (i32.const 1)"
799 " (if (type $sig) (result i32) (then (i32.const 0)) (else (i32.const 2)))"
800 " (unreachable)"
801 ")"
802 )
803 "inline function type"
804)
805(assert_malformed
806 (module quote
807 "(type $sig (func (param i32) (result i32)))"
808 "(func (i32.const 0) (i32.const 1)"
809 " (if (type $sig) (param i32) (then (drop)) (else (drop)))"
810 " (unreachable)"
811 ")"
812 )
813 "inline function type"
814)
815(assert_malformed
816 (module quote
817 "(type $sig (func (param i32 i32) (result i32)))"
818 "(func (i32.const 0) (i32.const 1)"
819 " (if (type $sig) (param i32) (result i32) (then)) (unreachable)"
820 ")"
821 )
822 "inline function type"
823)
824
825(assert_invalid
826 (module
827 (type $sig (func))
828 (func (i32.const 1) (if (type $sig) (i32.const 0) (then)))
829 )
830 "type mismatch"
831)
832
833(assert_invalid
834 (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then))))
835 "type mismatch"
836)
837(assert_invalid
838 (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then))))
839 "type mismatch"
840)
841(assert_invalid
842 (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then))))
843 "type mismatch"
844)
845(assert_invalid
846 (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then))))
847 "type mismatch"
848)
849
850(assert_invalid
851 (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then) (else))))
852 "type mismatch"
853)
854(assert_invalid
855 (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then) (else))))
856 "type mismatch"
857)
858(assert_invalid
859 (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then) (else))))
860 "type mismatch"
861)
862(assert_invalid
863 (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then) (else))))
864 "type mismatch"
865)
866
867(assert_invalid
868 (module (func $type-then-value-num-vs-void
869 (if (i32.const 1) (then (i32.const 1)))
870 ))
871 "type mismatch"
872)
873(assert_invalid
874 (module (func $type-then-value-num-vs-void-else
875 (if (i32.const 1) (then (i32.const 1)) (else))
876 ))
877 "type mismatch"
878)
879(assert_invalid
880 (module (func $type-else-value-num-vs-void
881 (if (i32.const 1) (then) (else (i32.const 1)))
882 ))
883 "type mismatch"
884)
885(assert_invalid
886 (module (func $type-both-value-num-vs-void
887 (if (i32.const 1) (then (i32.const 1)) (else (i32.const 1)))
888 ))
889 "type mismatch"
890)
891
892(assert_invalid
893 (module (func $type-then-value-nums-vs-void
894 (if (i32.const 1) (then (i32.const 1) (i32.const 2)))
895 ))
896 "type mismatch"
897)
898(assert_invalid
899 (module (func $type-then-value-nums-vs-void-else
900 (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else))
901 ))
902 "type mismatch"
903)
904(assert_invalid
905 (module (func $type-else-value-nums-vs-void
906 (if (i32.const 1) (then) (else (i32.const 1) (i32.const 2)))
907 ))
908 "type mismatch"
909)
910(assert_invalid
911 (module (func $type-both-value-nums-vs-void
912 (if (i32.const 1) (then (i32.const 1) (i32.const 2)) (else (i32.const 2) (i32.const 1)))
913 ))
914 "type mismatch"
915)
916
917(assert_invalid
918 (module (func $type-then-value-empty-vs-num (result i32)
919 (if (result i32) (i32.const 1) (then) (else (i32.const 0)))
920 ))
921 "type mismatch"
922)
923(assert_invalid
924 (module (func $type-else-value-empty-vs-num (result i32)
925 (if (result i32) (i32.const 1) (then (i32.const 0)) (else))
926 ))
927 "type mismatch"
928)
929(assert_invalid
930 (module (func $type-both-value-empty-vs-num (result i32)
931 (if (result i32) (i32.const 1) (then) (else))
932 ))
933 "type mismatch"
934)
935
936(assert_invalid
937 (module (func $type-then-value-empty-vs-nums (result i32 i32)
938 (if (result i32 i32) (i32.const 1) (then) (else (i32.const 0) (i32.const 2)))
939 ))
940 "type mismatch"
941)
942(assert_invalid
943 (module (func $type-else-value-empty-vs-nums (result i32 i32)
944 (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 1)) (else))
945 ))
946 "type mismatch"
947)
948(assert_invalid
949 (module (func $type-both-value-empty-vs-nums (result i32 i32)
950 (if (result i32 i32) (i32.const 1) (then) (else))
951 ))
952 "type mismatch"
953)
954
955(assert_invalid
956 (module (func $type-no-else-vs-num (result i32)
957 (if (result i32) (i32.const 1) (then (i32.const 1)))
958 ))
959 "type mismatch"
960)
961(assert_invalid
962 (module (func $type-no-else-vs-nums (result i32 i32)
963 (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)))
964 ))
965 "type mismatch"
966)
967
968(assert_invalid
969 (module (func $type-then-value-void-vs-num (result i32)
970 (if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0)))
971 ))
972 "type mismatch"
973)
974(assert_invalid
975 (module (func $type-else-value-void-vs-num (result i32)
976 (if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop)))
977 ))
978 "type mismatch"
979)
980(assert_invalid
981 (module (func $type-both-value-void-vs-num (result i32)
982 (if (result i32) (i32.const 1) (then (nop)) (else (nop)))
983 ))
984 "type mismatch"
985)
986
987(assert_invalid
988 (module (func $type-then-value-void-vs-nums (result i32 i32)
989 (if (result i32 i32) (i32.const 1) (then (nop)) (else (i32.const 0) (i32.const 0)))
990 ))
991 "type mismatch"
992)
993(assert_invalid
994 (module (func $type-else-value-void-vs-nums (result i32 i32)
995 (if (result i32 i32) (i32.const 1) (then (i32.const 0) (i32.const 0)) (else (nop)))
996 ))
997 "type mismatch"
998)
999(assert_invalid
1000 (module (func $type-both-value-void-vs-nums (result i32 i32)
1001 (if (result i32 i32) (i32.const 1) (then (nop)) (else (nop)))
1002 ))
1003 "type mismatch"
1004)
1005
1006(assert_invalid
1007 (module (func $type-then-value-num-vs-num (result i32)
1008 (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1)))
1009 ))
1010 "type mismatch"
1011)
1012(assert_invalid
1013 (module (func $type-else-value-num-vs-num (result i32)
1014 (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1)))
1015 ))
1016 "type mismatch"
1017)
1018(assert_invalid
1019 (module (func $type-both-value-num-vs-num (result i32)
1020 (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1)))
1021 ))
1022 "type mismatch"
1023)
1024
1025(assert_invalid
1026 (module (func $type-then-value-num-vs-nums (result i32 i32)
1027 (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1)))
1028 ))
1029 "type mismatch"
1030)
1031(assert_invalid
1032 (module (func $type-else-value-num-vs-nums (result i32 i32)
1033 (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1)))
1034 ))
1035 "type mismatch"
1036)
1037(assert_invalid
1038 (module (func $type-both-value-num-vs-nums (result i32 i32)
1039 (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1)))
1040 ))
1041 "type mismatch"
1042)
1043
1044(assert_invalid
1045 (module (func $type-then-value-partial-vs-nums (result i32 i32)
1046 (i32.const 0)
1047 (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1)))
1048 ))
1049 "type mismatch"
1050)
1051(assert_invalid
1052 (module (func $type-else-value-partial-vs-nums (result i32 i32)
1053 (i32.const 0)
1054 (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1)))
1055 ))
1056 "type mismatch"
1057)
1058(assert_invalid
1059 (module (func $type-both-value-partial-vs-nums (result i32 i32)
1060 (i32.const 0)
1061 (if (result i32 i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1)))
1062 ))
1063 "type mismatch"
1064)
1065
1066(assert_invalid
1067 (module (func $type-then-value-nums-vs-num (result i32)
1068 (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1)))
1069 ))
1070 "type mismatch"
1071)
1072(assert_invalid
1073 (module (func $type-else-value-nums-vs-num (result i32)
1074 (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i32.const 1) (i32.const 1)))
1075 ))
1076 "type mismatch"
1077)
1078(assert_invalid
1079 (module (func $type-both-value-nums-vs-num (result i32)
1080 (if (result i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (i32.const 1) (i32.const 1)))
1081 ))
1082 "type mismatch"
1083)
1084
1085(assert_invalid
1086 (module (func $type-both-different-value-num-vs-num (result i32)
1087 (if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1)))
1088 ))
1089 "type mismatch"
1090)
1091(assert_invalid
1092 (module (func $type-both-different-value-nums-vs-nums (result i32 i32)
1093 (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1) (i32.const 1)) (else (i32.const 1)))
1094 ))
1095 "type mismatch"
1096)
1097
1098(assert_invalid
1099 (module (func $type-then-value-unreached-select (result i32)
1100 (if (result i64)
1101 (i32.const 0)
1102 (then (select (unreachable) (unreachable) (unreachable)))
1103 (else (i64.const 0))
1104 )
1105 ))
1106 "type mismatch"
1107)
1108(assert_invalid
1109 (module (func $type-else-value-unreached-select (result i32)
1110 (if (result i64)
1111 (i32.const 1)
1112 (then (i64.const 0))
1113 (else (select (unreachable) (unreachable) (unreachable)))
1114 )
1115 ))
1116 "type mismatch"
1117)
1118(assert_invalid
1119 (module (func $type-else-value-unreached-select (result i32)
1120 (if (result i64)
1121 (i32.const 1)
1122 (then (select (unreachable) (unreachable) (unreachable)))
1123 (else (select (unreachable) (unreachable) (unreachable)))
1124 )
1125 ))
1126 "type mismatch"
1127)
1128
1129(assert_invalid
1130 (module (func $type-then-break-last-void-vs-num (result i32)
1131 (if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1)))
1132 ))
1133 "type mismatch"
1134)
1135(assert_invalid
1136 (module (func $type-else-break-last-void-vs-num (result i32)
1137 (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0)))
1138 ))
1139 "type mismatch"
1140)
1141(assert_invalid
1142 (module (func $type-then-break-last-void-vs-nums (result i32 i32)
1143 (if (result i32 i32) (i32.const 1) (then (br 0)) (else (i32.const 1) (i32.const 1)))
1144 ))
1145 "type mismatch"
1146)
1147(assert_invalid
1148 (module (func $type-else-break-last-void-vs-nums (result i32 i32)
1149 (if (result i32 i32) (i32.const 1) (then (i32.const 1) (i32.const 1)) (else (br 0)))
1150 ))
1151 "type mismatch"
1152)
1153
1154(assert_invalid
1155 (module (func $type-then-break-empty-vs-num (result i32)
1156 (if (result i32) (i32.const 1)
1157 (then (br 0) (i32.const 1))
1158 (else (i32.const 1))
1159 )
1160 ))
1161 "type mismatch"
1162)
1163(assert_invalid
1164 (module (func $type-else-break-empty-vs-num (result i32)
1165 (if (result i32) (i32.const 1)
1166 (then (i32.const 1))
1167 (else (br 0) (i32.const 1))
1168 )
1169 ))
1170 "type mismatch"
1171)
1172(assert_invalid
1173 (module (func $type-then-break-empty-vs-nums (result i32 i32)
1174 (if (result i32 i32) (i32.const 1)
1175 (then (br 0) (i32.const 1) (i32.const 1))
1176 (else (i32.const 1) (i32.const 1))
1177 )
1178 ))
1179 "type mismatch"
1180)
1181(assert_invalid
1182 (module (func $type-else-break-empty-vs-nums (result i32 i32)
1183 (if (result i32 i32) (i32.const 1)
1184 (then (i32.const 1) (i32.const 1))
1185 (else (br 0) (i32.const 1) (i32.const 1))
1186 )
1187 ))
1188 "type mismatch"
1189)
1190
1191(assert_invalid
1192 (module (func $type-then-break-void-vs-num (result i32)
1193 (if (result i32) (i32.const 1)
1194 (then (br 0 (nop)) (i32.const 1))
1195 (else (i32.const 1))
1196 )
1197 ))
1198 "type mismatch"
1199)
1200(assert_invalid
1201 (module (func $type-else-break-void-vs-num (result i32)
1202 (if (result i32) (i32.const 1)
1203 (then (i32.const 1))
1204 (else (br 0 (nop)) (i32.const 1))
1205 )
1206 ))
1207 "type mismatch"
1208)
1209(assert_invalid
1210 (module (func $type-then-break-void-vs-nums (result i32 i32)
1211 (if (result i32 i32) (i32.const 1)
1212 (then (br 0 (nop)) (i32.const 1) (i32.const 1))
1213 (else (i32.const 1) (i32.const 1))
1214 )
1215 ))
1216 "type mismatch"
1217)
1218(assert_invalid
1219 (module (func $type-else-break-void-vs-nums (result i32 i32)
1220 (if (result i32 i32) (i32.const 1)
1221 (then (i32.const 1) (i32.const 1))
1222 (else (br 0 (nop)) (i32.const 1) (i32.const 1))
1223 )
1224 ))
1225 "type mismatch"
1226)
1227
1228(assert_invalid
1229 (module (func $type-then-break-num-vs-num (result i32)
1230 (if (result i32) (i32.const 1)
1231 (then (br 0 (i64.const 1)) (i32.const 1))
1232 (else (i32.const 1))
1233 )
1234 ))
1235 "type mismatch"
1236)
1237(assert_invalid
1238 (module (func $type-else-break-num-vs-num (result i32)
1239 (if (result i32) (i32.const 1)
1240 (then (i32.const 1))
1241 (else (br 0 (i64.const 1)) (i32.const 1))
1242 )
1243 ))
1244 "type mismatch"
1245)
1246(assert_invalid
1247 (module (func $type-then-break-num-vs-nums (result i32 i32)
1248 (if (result i32 i32) (i32.const 1)
1249 (then (br 0 (i64.const 1)) (i32.const 1) (i32.const 1))
1250 (else (i32.const 1) (i32.const 1))
1251 )
1252 ))
1253 "type mismatch"
1254)
1255(assert_invalid
1256 (module (func $type-else-break-num-vs-nums (result i32 i32)
1257 (if (result i32 i32) (i32.const 1)
1258 (then (i32.const 1) (i32.const 1))
1259 (else (br 0 (i64.const 1)) (i32.const 1) (i32.const 1))
1260 )
1261 ))
1262 "type mismatch"
1263)
1264(assert_invalid
1265 (module (func $type-then-break-partial-vs-nums (result i32 i32)
1266 (i32.const 1)
1267 (if (result i32 i32) (i32.const 1)
1268 (then (br 0 (i64.const 1)) (i32.const 1))
1269 (else (i32.const 1))
1270 )
1271 ))
1272 "type mismatch"
1273)
1274(assert_invalid
1275 (module (func $type-else-break-partial-vs-nums (result i32 i32)
1276 (i32.const 1)
1277 (if (result i32 i32) (i32.const 1)
1278 (then (i32.const 1))
1279 (else (br 0 (i64.const 1)) (i32.const 1))
1280 )
1281 ))
1282 "type mismatch"
1283)
1284
1285(assert_invalid
1286 (module
1287 (func $type-condition-empty
1288 (if (then))
1289 )
1290 )
1291 "type mismatch"
1292)
1293(assert_invalid
1294 (module
1295 (func $type-condition-empty-in-block
1296 (i32.const 0)
1297 (block (if (then)))
1298 )
1299 )
1300 "type mismatch"
1301)
1302(assert_invalid
1303 (module
1304 (func $type-condition-empty-in-loop
1305 (i32.const 0)
1306 (loop (if (then)))
1307 )
1308 )
1309 "type mismatch"
1310)
1311(assert_invalid
1312 (module
1313 (func $type-condition-empty-in-then
1314 (i32.const 0) (i32.const 0)
1315 (if (then (if (then))))
1316 )
1317 )
1318 "type mismatch"
1319)
1320(assert_invalid
1321 (module
1322 (func $type-condition-empty-in-else
1323 (i32.const 0) (i32.const 0)
1324 (if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0)))
1325 (drop)
1326 )
1327 )
1328 "type mismatch"
1329)
1330(assert_invalid
1331 (module
1332 (func $type-condition-empty-in-br
1333 (i32.const 0)
1334 (block (br 0 (if(then))) (drop))
1335 )
1336 )
1337 "type mismatch"
1338)
1339(assert_invalid
1340 (module
1341 (func $type-condition-empty-in-br_if
1342 (i32.const 0)
1343 (block (br_if 0 (if(then)) (i32.const 1)) (drop))
1344 )
1345 )
1346 "type mismatch"
1347)
1348(assert_invalid
1349 (module
1350 (func $type-condition-empty-in-br_table
1351 (i32.const 0)
1352 (block (br_table 0 (if(then))) (drop))
1353 )
1354 )
1355 "type mismatch"
1356)
1357(assert_invalid
1358 (module
1359 (func $type-condition-empty-in-return
1360 (return (if(then))) (drop)
1361 )
1362 )
1363 "type mismatch"
1364)
1365(assert_invalid
1366 (module
1367 (func $type-condition-empty-in-select
1368 (select (if(then)) (i32.const 1) (i32.const 2)) (drop)
1369 )
1370 )
1371 "type mismatch"
1372)
1373(assert_invalid
1374 (module
1375 (func $type-condition-empty-in-call
1376 (call 1 (if(then))) (drop)
1377 )
1378 (func (param i32) (result i32) (local.get 0))
1379 )
1380 "type mismatch"
1381)
1382(assert_invalid
1383 (module
1384 (func $f (param i32) (result i32) (local.get 0))
1385 (type $sig (func (param i32) (result i32)))
1386 (table funcref (elem $f))
1387 (func $type-condition-empty-in-call_indirect
1388 (block (result i32)
1389 (call_indirect (type $sig)
1390 (if(then)) (i32.const 0)
1391 )
1392 (drop)
1393 )
1394 )
1395 )
1396 "type mismatch"
1397)
1398(assert_invalid
1399 (module
1400 (func $type-condition-empty-in-local.set
1401 (local i32)
1402 (local.set 0 (if(then))) (local.get 0) (drop)
1403 )
1404 )
1405 "type mismatch"
1406)
1407(assert_invalid
1408 (module
1409 (func $type-condition-empty-in-local.tee
1410 (local i32)
1411 (local.tee 0 (if(then))) (drop)
1412 )
1413 )
1414 "type mismatch"
1415)
1416(assert_invalid
1417 (module
1418 (global $x (mut i32) (i32.const 0))
1419 (func $type-condition-empty-in-global.set
1420 (global.set $x (if(then))) (global.get $x) (drop)
1421 )
1422 )
1423 "type mismatch"
1424)
1425(assert_invalid
1426 (module
1427 (memory 0)
1428 (func $type-condition-empty-in-memory.grow
1429 (memory.grow (if(then))) (drop)
1430 )
1431 )
1432 "type mismatch"
1433)
1434(assert_invalid
1435 (module
1436 (memory 0)
1437 (func $type-condition-empty-in-load
1438 (i32.load (if(then))) (drop)
1439 )
1440 )
1441 "type mismatch"
1442)
1443(assert_invalid
1444 (module
1445 (memory 1)
1446 (func $type-condition-empty-in-store
1447 (i32.store (if(then)) (i32.const 1))
1448 )
1449 )
1450 "type mismatch"
1451)
1452
1453(assert_invalid
1454 (module (func $type-param-void-vs-num
1455 (if (param i32) (i32.const 1) (then (drop)))
1456 ))
1457 "type mismatch"
1458)
1459(assert_invalid
1460 (module (func $type-param-void-vs-nums
1461 (if (param i32 f64) (i32.const 1) (then (drop) (drop)))
1462 ))
1463 "type mismatch"
1464)
1465(assert_invalid
1466 (module (func $type-param-num-vs-num
1467 (f32.const 0) (if (param i32) (i32.const 1) (then (drop)))
1468 ))
1469 "type mismatch"
1470)
1471(assert_invalid
1472 (module (func $type-param-num-vs-nums
1473 (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop)))
1474 ))
1475 "type mismatch"
1476)
1477(assert_invalid
1478 (module (func $type-param-nested-void-vs-num
1479 (block (if (param i32) (i32.const 1) (then (drop))))
1480 ))
1481 "type mismatch"
1482)
1483(assert_invalid
1484 (module (func $type-param-void-vs-nums
1485 (block (if (param i32 f64) (i32.const 1) (then (drop) (drop))))
1486 ))
1487 "type mismatch"
1488)
1489(assert_invalid
1490 (module (func $type-param-num-vs-num
1491 (block (f32.const 0) (if (param i32) (i32.const 1) (then (drop))))
1492 ))
1493 "type mismatch"
1494)
1495(assert_invalid
1496 (module (func $type-param-num-vs-nums
1497 (block (f32.const 0) (if (param f32 i32) (i32.const 1) (then (drop) (drop))))
1498 ))
1499 "type mismatch"
1500)
1501
1502(assert_malformed
1503 (module quote "(func (param i32) (result i32) if (param $x i32) end)")
1504 "unexpected token"
1505)
1506(assert_malformed
1507 (module quote "(func (param i32) (result i32) (if (param $x i32) (then)))")
1508 "unexpected token"
1509)
1510
1511(assert_malformed
1512 (module quote "(func i32.const 0 if end $l)")
1513 "mismatching label"
1514)
1515(assert_malformed
1516 (module quote "(func i32.const 0 if $a end $l)")
1517 "mismatching label"
1518)
1519(assert_malformed
1520 (module quote "(func i32.const 0 if else $l end)")
1521 "mismatching label"
1522)
1523(assert_malformed
1524 (module quote "(func i32.const 0 if $a else $l end)")
1525 "mismatching label"
1526)
1527(assert_malformed
1528 (module quote "(func i32.const 0 if else end $l)")
1529 "mismatching label"
1530)
1531(assert_malformed
1532 (module quote "(func i32.const 0 if else $l end $l)")
1533 "mismatching label"
1534)
1535(assert_malformed
1536 (module quote "(func i32.const 0 if else $l1 end $l2)")
1537 "mismatching label"
1538)
1539(assert_malformed
1540 (module quote "(func i32.const 0 if $a else end $l)")
1541 "mismatching label"
1542)
1543(assert_malformed
1544 (module quote "(func i32.const 0 if $a else $a end $l)")
1545 "mismatching label"
1546)
1547(assert_malformed
1548 (module quote "(func i32.const 0 if $a else $l end $l)")
1549 "mismatching label"
1550)
View as plain text