1 ;; Test `call_indirect` operator
4 ;; Auxiliary definitions
6 (type $out-i32 (func (result i32)))
7 (type $out-i64 (func (result i64)))
8 (type $out-f32 (func (result f32)))
9 (type $out-f64 (func (result f64)))
10 (type $out-f64-i32 (func (result f64 i32)))
11 (type $over-i32 (func (param i32) (result i32)))
12 (type $over-i64 (func (param i64) (result i64)))
13 (type $over-f32 (func (param f32) (result f32)))
14 (type $over-f64 (func (param f64) (result f64)))
15 (type $over-i32-f64 (func (param i32 f64) (result i32 f64)))
16 (type $swap-i32-i64 (func (param i32 i64) (result i64 i32)))
17 (type $f32-i32 (func (param f32 i32) (result i32)))
18 (type $i32-i64 (func (param i32 i64) (result i64)))
19 (type $f64-f32 (func (param f64 f32) (result f32)))
20 (type $i64-f64 (func (param i64 f64) (result f64)))
21 (type $over-i32-duplicate (func (param i32) (result i32)))
22 (type $over-i64-duplicate (func (param i64) (result i64)))
23 (type $over-f32-duplicate (func (param f32) (result f32)))
24 (type $over-f64-duplicate (func (param f64) (result f64)))
26 (func $const-i32 (type $out-i32) (i32.const 0x132))
27 (func $const-i64 (type $out-i64) (i64.const 0x164))
28 (func $const-f32 (type $out-f32) (f32.const 0xf32))
29 (func $const-f64 (type $out-f64) (f64.const 0xf64))
30 (func $const-f64-i32 (type $out-f64-i32) (f64.const 0xf64) (i32.const 32))
32 (func $id-i32 (type $over-i32) (local.get 0))
33 (func $id-i64 (type $over-i64) (local.get 0))
34 (func $id-f32 (type $over-f32) (local.get 0))
35 (func $id-f64 (type $over-f64) (local.get 0))
36 (func $id-i32-f64 (type $over-i32-f64) (local.get 0) (local.get 1))
37 (func $swap-i32-i64 (type $swap-i32-i64) (local.get 1) (local.get 0))
39 (func $i32-i64 (type $i32-i64) (local.get 1))
40 (func $i64-f64 (type $i64-f64) (local.get 1))
41 (func $f32-i32 (type $f32-i32) (local.get 1))
42 (func $f64-f32 (type $f64-f32) (local.get 1))
44 (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0))
45 (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0))
46 (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0))
47 (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0))
51 $const-i32 $const-i64 $const-f32 $const-f64 ;; 0..3
52 $id-i32 $id-i64 $id-f32 $id-f64 ;; 4..7
53 $f32-i32 $i32-i64 $f64-f32 $i64-f64 ;; 9..11
54 $fac-i64 $fib-i64 $even $odd ;; 12..15
55 $runaway $mutual-runaway1 $mutual-runaway2 ;; 16..18
56 $over-i32-duplicate $over-i64-duplicate ;; 19..20
57 $over-f32-duplicate $over-f64-duplicate ;; 21..22
58 $fac-i32 $fac-f32 $fac-f64 ;; 23..25
59 $fib-i32 $fib-f32 $fib-f64 ;; 26..28
60 $const-f64-i32 $id-i32-f64 $swap-i32-i64 ;; 29..31
67 (call_indirect (i32.const 0))
68 (call_indirect (param i64) (i64.const 0) (i32.const 0))
69 (call_indirect (param i64) (param) (param f64 i32 i64)
70 (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0)
72 (call_indirect (result) (i32.const 0))
73 (drop (i32.eqz (call_indirect (result i32) (i32.const 0))))
74 (drop (i32.eqz (call_indirect (result i32) (result) (i32.const 0))))
76 (call_indirect (param i64) (result i32) (i64.const 0) (i32.const 0))
80 (param) (param i64) (param) (param f64 i32 i64) (param) (param)
81 (result) (result i32) (result) (result)
82 (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0)
86 (call_indirect (type $over-i64) (param i64) (result i64)
87 (i64.const 0) (i32.const 0)
94 (func (export "type-i32") (result i32)
95 (call_indirect (type $out-i32) (i32.const 0))
97 (func (export "type-i64") (result i64)
98 (call_indirect (type $out-i64) (i32.const 1))
100 (func (export "type-f32") (result f32)
101 (call_indirect (type $out-f32) (i32.const 2))
103 (func (export "type-f64") (result f64)
104 (call_indirect (type $out-f64) (i32.const 3))
106 (func (export "type-f64-i32") (result f64 i32)
107 (call_indirect (type $out-f64-i32) (i32.const 29))
110 (func (export "type-index") (result i64)
111 (call_indirect (type $over-i64) (i64.const 100) (i32.const 5))
114 (func (export "type-first-i32") (result i32)
115 (call_indirect (type $over-i32) (i32.const 32) (i32.const 4))
117 (func (export "type-first-i64") (result i64)
118 (call_indirect (type $over-i64) (i64.const 64) (i32.const 5))
120 (func (export "type-first-f32") (result f32)
121 (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6))
123 (func (export "type-first-f64") (result f64)
124 (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7))
127 (func (export "type-second-i32") (result i32)
128 (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8))
130 (func (export "type-second-i64") (result i64)
131 (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9))
133 (func (export "type-second-f32") (result f32)
134 (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10))
136 (func (export "type-second-f64") (result f64)
137 (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11))
140 (func (export "type-all-f64-i32") (result f64 i32)
141 (call_indirect (type $out-f64-i32) (i32.const 29))
143 (func (export "type-all-i32-f64") (result i32 f64)
144 (call_indirect (type $over-i32-f64)
145 (i32.const 1) (f64.const 2) (i32.const 30)
148 (func (export "type-all-i32-i64") (result i64 i32)
149 (call_indirect (type $swap-i32-i64)
150 (i32.const 1) (i64.const 2) (i32.const 31)
156 (func (export "dispatch") (param i32 i64) (result i64)
157 (call_indirect (type $over-i64) (local.get 1) (local.get 0))
160 (func (export "dispatch-structural-i64") (param i32) (result i64)
161 (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0))
163 (func (export "dispatch-structural-i32") (param i32) (result i32)
164 (call_indirect (type $over-i32-duplicate) (i32.const 9) (local.get 0))
166 (func (export "dispatch-structural-f32") (param i32) (result f32)
167 (call_indirect (type $over-f32-duplicate) (f32.const 9.0) (local.get 0))
169 (func (export "dispatch-structural-f64") (param i32) (result f64)
170 (call_indirect (type $over-f64-duplicate) (f64.const 9.0) (local.get 0))
175 (func $fac-i64 (export "fac-i64") (type $over-i64)
176 (if (result i64) (i64.eqz (local.get 0))
181 (call_indirect (type $over-i64)
182 (i64.sub (local.get 0) (i64.const 1))
190 (func $fib-i64 (export "fib-i64") (type $over-i64)
191 (if (result i64) (i64.le_u (local.get 0) (i64.const 1))
195 (call_indirect (type $over-i64)
196 (i64.sub (local.get 0) (i64.const 2))
199 (call_indirect (type $over-i64)
200 (i64.sub (local.get 0) (i64.const 1))
208 (func $fac-i32 (export "fac-i32") (type $over-i32)
209 (if (result i32) (i32.eqz (local.get 0))
214 (call_indirect (type $over-i32)
215 (i32.sub (local.get 0) (i32.const 1))
223 (func $fac-f32 (export "fac-f32") (type $over-f32)
224 (if (result f32) (f32.eq (local.get 0) (f32.const 0.0))
225 (then (f32.const 1.0))
229 (call_indirect (type $over-f32)
230 (f32.sub (local.get 0) (f32.const 1.0))
238 (func $fac-f64 (export "fac-f64") (type $over-f64)
239 (if (result f64) (f64.eq (local.get 0) (f64.const 0.0))
240 (then (f64.const 1.0))
244 (call_indirect (type $over-f64)
245 (f64.sub (local.get 0) (f64.const 1.0))
253 (func $fib-i32 (export "fib-i32") (type $over-i32)
254 (if (result i32) (i32.le_u (local.get 0) (i32.const 1))
258 (call_indirect (type $over-i32)
259 (i32.sub (local.get 0) (i32.const 2))
262 (call_indirect (type $over-i32)
263 (i32.sub (local.get 0) (i32.const 1))
271 (func $fib-f32 (export "fib-f32") (type $over-f32)
272 (if (result f32) (f32.le (local.get 0) (f32.const 1.0))
273 (then (f32.const 1.0))
276 (call_indirect (type $over-f32)
277 (f32.sub (local.get 0) (f32.const 2.0))
280 (call_indirect (type $over-f32)
281 (f32.sub (local.get 0) (f32.const 1.0))
289 (func $fib-f64 (export "fib-f64") (type $over-f64)
290 (if (result f64) (f64.le (local.get 0) (f64.const 1.0))
291 (then (f64.const 1.0))
294 (call_indirect (type $over-f64)
295 (f64.sub (local.get 0) (f64.const 2.0))
298 (call_indirect (type $over-f64)
299 (f64.sub (local.get 0) (f64.const 1.0))
307 (func $even (export "even") (param i32) (result i32)
308 (if (result i32) (i32.eqz (local.get 0))
309 (then (i32.const 44))
311 (call_indirect (type $over-i32)
312 (i32.sub (local.get 0) (i32.const 1))
318 (func $odd (export "odd") (param i32) (result i32)
319 (if (result i32) (i32.eqz (local.get 0))
320 (then (i32.const 99))
322 (call_indirect (type $over-i32)
323 (i32.sub (local.get 0) (i32.const 1))
332 ;; Implementations are required to have every call consume some abstract
333 ;; resource towards exhausting some abstract finite limit, such that
334 ;; infinitely recursive test cases reliably trap in finite time. This is
335 ;; because otherwise applications could come to depend on it on those
336 ;; implementations and be incompatible with implementations that don't do
337 ;; it (or don't do it under the same circumstances).
339 (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16)))
341 (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18)))
342 (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17)))
344 ;; As parameter of control constructs and instructions
348 (func (export "as-select-first") (result i32)
349 (select (call_indirect (type $out-i32) (i32.const 0)) (i32.const 2) (i32.const 3))
351 (func (export "as-select-mid") (result i32)
352 (select (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (i32.const 3))
354 (func (export "as-select-last") (result i32)
355 (select (i32.const 2) (i32.const 3) (call_indirect (type $out-i32) (i32.const 0)))
358 (func (export "as-if-condition") (result i32)
359 (if (result i32) (call_indirect (type $out-i32) (i32.const 0)) (then (i32.const 1)) (else (i32.const 2)))
362 (func (export "as-br_if-first") (result i64)
363 (block (result i64) (br_if 0 (call_indirect (type $out-i64) (i32.const 1)) (i32.const 2)))
365 (func (export "as-br_if-last") (result i32)
366 (block (result i32) (br_if 0 (i32.const 2) (call_indirect (type $out-i32) (i32.const 0))))
369 (func (export "as-br_table-first") (result f32)
370 (block (result f32) (call_indirect (type $out-f32) (i32.const 2)) (i32.const 2) (br_table 0 0))
372 (func (export "as-br_table-last") (result i32)
373 (block (result i32) (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (br_table 0 0))
376 (func (export "as-store-first")
377 (call_indirect (type $out-i32) (i32.const 0)) (i32.const 1) (i32.store)
379 (func (export "as-store-last")
380 (i32.const 10) (call_indirect (type $out-f64) (i32.const 3)) (f64.store)
383 (func (export "as-memory.grow-value") (result i32)
384 (memory.grow (call_indirect (type $out-i32) (i32.const 0)))
386 (func (export "as-return-value") (result i32)
387 (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (return)
389 (func (export "as-drop-operand")
390 (call_indirect (type $over-i64) (i64.const 1) (i32.const 5)) (drop)
392 (func (export "as-br-value") (result f32)
393 (block (result f32) (br 0 (call_indirect (type $over-f32) (f32.const 1) (i32.const 6))))
395 (func (export "as-local.set-value") (result f64)
396 (local f64) (local.set 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) (local.get 0)
398 (func (export "as-local.tee-value") (result f64)
399 (local f64) (local.tee 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7)))
401 (global $a (mut f64) (f64.const 10.0))
402 (func (export "as-global.set-value") (result f64)
403 (global.set $a (call_indirect (type $over-f64) (f64.const 1.0) (i32.const 7)))
407 (func (export "as-load-operand") (result i32)
408 (i32.load (call_indirect (type $out-i32) (i32.const 0)))
411 (func (export "as-unary-operand") (result f32)
414 (call_indirect (type $over-f32) (f32.const 0x0p+0) (i32.const 6))
419 (func (export "as-binary-left") (result i32)
422 (call_indirect (type $over-i32) (i32.const 1) (i32.const 4))
427 (func (export "as-binary-right") (result i32)
431 (call_indirect (type $over-i32) (i32.const 1) (i32.const 4))
436 (func (export "as-test-operand") (result i32)
439 (call_indirect (type $over-i32) (i32.const 1) (i32.const 4))
444 (func (export "as-compare-left") (result i32)
447 (call_indirect (type $over-i32) (i32.const 1) (i32.const 4))
452 (func (export "as-compare-right") (result i32)
456 (call_indirect (type $over-i32) (i32.const 1) (i32.const 4))
461 (func (export "as-convert-operand") (result i64)
464 (call_indirect (type $over-i32) (i32.const 1) (i32.const 4))
471 (assert_return (invoke "type-i32") (i32.const 0x132))
472 (assert_return (invoke "type-i64") (i64.const 0x164))
473 (assert_return (invoke "type-f32") (f32.const 0xf32))
474 (assert_return (invoke "type-f64") (f64.const 0xf64))
475 (assert_return (invoke "type-f64-i32") (f64.const 0xf64) (i32.const 32))
477 (assert_return (invoke "type-index") (i64.const 100))
479 (assert_return (invoke "type-first-i32") (i32.const 32))
480 (assert_return (invoke "type-first-i64") (i64.const 64))
481 (assert_return (invoke "type-first-f32") (f32.const 1.32))
482 (assert_return (invoke "type-first-f64") (f64.const 1.64))
484 (assert_return (invoke "type-second-i32") (i32.const 32))
485 (assert_return (invoke "type-second-i64") (i64.const 64))
486 (assert_return (invoke "type-second-f32") (f32.const 32))
487 (assert_return (invoke "type-second-f64") (f64.const 64.1))
489 (assert_return (invoke "type-all-f64-i32") (f64.const 0xf64) (i32.const 32))
490 (assert_return (invoke "type-all-i32-f64") (i32.const 1) (f64.const 2))
491 (assert_return (invoke "type-all-i32-i64") (i64.const 2) (i32.const 1))
493 (assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2))
494 (assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5))
495 (assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120))
496 (assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8))
497 (assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2))
498 (assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch")
499 (assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch")
500 (assert_trap (invoke "dispatch" (i32.const 32) (i64.const 2)) "undefined element")
501 (assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element")
502 (assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element")
504 (assert_return (invoke "dispatch-structural-i64" (i32.const 5)) (i64.const 9))
505 (assert_return (invoke "dispatch-structural-i64" (i32.const 12)) (i64.const 362880))
506 (assert_return (invoke "dispatch-structural-i64" (i32.const 13)) (i64.const 55))
507 (assert_return (invoke "dispatch-structural-i64" (i32.const 20)) (i64.const 9))
508 (assert_trap (invoke "dispatch-structural-i64" (i32.const 11)) "indirect call type mismatch")
509 (assert_trap (invoke "dispatch-structural-i64" (i32.const 22)) "indirect call type mismatch")
511 (assert_return (invoke "dispatch-structural-i32" (i32.const 4)) (i32.const 9))
512 (assert_return (invoke "dispatch-structural-i32" (i32.const 23)) (i32.const 362880))
513 (assert_return (invoke "dispatch-structural-i32" (i32.const 26)) (i32.const 55))
514 (assert_return (invoke "dispatch-structural-i32" (i32.const 19)) (i32.const 9))
515 (assert_trap (invoke "dispatch-structural-i32" (i32.const 9)) "indirect call type mismatch")
516 (assert_trap (invoke "dispatch-structural-i32" (i32.const 21)) "indirect call type mismatch")
518 (assert_return (invoke "dispatch-structural-f32" (i32.const 6)) (f32.const 9.0))
519 (assert_return (invoke "dispatch-structural-f32" (i32.const 24)) (f32.const 362880.0))
520 (assert_return (invoke "dispatch-structural-f32" (i32.const 27)) (f32.const 55.0))
521 (assert_return (invoke "dispatch-structural-f32" (i32.const 21)) (f32.const 9.0))
522 (assert_trap (invoke "dispatch-structural-f32" (i32.const 8)) "indirect call type mismatch")
523 (assert_trap (invoke "dispatch-structural-f32" (i32.const 19)) "indirect call type mismatch")
525 (assert_return (invoke "dispatch-structural-f64" (i32.const 7)) (f64.const 9.0))
526 (assert_return (invoke "dispatch-structural-f64" (i32.const 25)) (f64.const 362880.0))
527 (assert_return (invoke "dispatch-structural-f64" (i32.const 28)) (f64.const 55.0))
528 (assert_return (invoke "dispatch-structural-f64" (i32.const 22)) (f64.const 9.0))
529 (assert_trap (invoke "dispatch-structural-f64" (i32.const 10)) "indirect call type mismatch")
530 (assert_trap (invoke "dispatch-structural-f64" (i32.const 18)) "indirect call type mismatch")
532 (assert_return (invoke "fac-i64" (i64.const 0)) (i64.const 1))
533 (assert_return (invoke "fac-i64" (i64.const 1)) (i64.const 1))
534 (assert_return (invoke "fac-i64" (i64.const 5)) (i64.const 120))
535 (assert_return (invoke "fac-i64" (i64.const 25)) (i64.const 7034535277573963776))
537 (assert_return (invoke "fac-i32" (i32.const 0)) (i32.const 1))
538 (assert_return (invoke "fac-i32" (i32.const 1)) (i32.const 1))
539 (assert_return (invoke "fac-i32" (i32.const 5)) (i32.const 120))
540 (assert_return (invoke "fac-i32" (i32.const 10)) (i32.const 3628800))
542 (assert_return (invoke "fac-f32" (f32.const 0.0)) (f32.const 1.0))
543 (assert_return (invoke "fac-f32" (f32.const 1.0)) (f32.const 1.0))
544 (assert_return (invoke "fac-f32" (f32.const 5.0)) (f32.const 120.0))
545 (assert_return (invoke "fac-f32" (f32.const 10.0)) (f32.const 3628800.0))
547 (assert_return (invoke "fac-f64" (f64.const 0.0)) (f64.const 1.0))
548 (assert_return (invoke "fac-f64" (f64.const 1.0)) (f64.const 1.0))
549 (assert_return (invoke "fac-f64" (f64.const 5.0)) (f64.const 120.0))
550 (assert_return (invoke "fac-f64" (f64.const 10.0)) (f64.const 3628800.0))
552 (assert_return (invoke "fib-i64" (i64.const 0)) (i64.const 1))
553 (assert_return (invoke "fib-i64" (i64.const 1)) (i64.const 1))
554 (assert_return (invoke "fib-i64" (i64.const 2)) (i64.const 2))
555 (assert_return (invoke "fib-i64" (i64.const 5)) (i64.const 8))
556 (assert_return (invoke "fib-i64" (i64.const 20)) (i64.const 10946))
558 (assert_return (invoke "fib-i32" (i32.const 0)) (i32.const 1))
559 (assert_return (invoke "fib-i32" (i32.const 1)) (i32.const 1))
560 (assert_return (invoke "fib-i32" (i32.const 2)) (i32.const 2))
561 (assert_return (invoke "fib-i32" (i32.const 5)) (i32.const 8))
562 (assert_return (invoke "fib-i32" (i32.const 20)) (i32.const 10946))
564 (assert_return (invoke "fib-f32" (f32.const 0.0)) (f32.const 1.0))
565 (assert_return (invoke "fib-f32" (f32.const 1.0)) (f32.const 1.0))
566 (assert_return (invoke "fib-f32" (f32.const 2.0)) (f32.const 2.0))
567 (assert_return (invoke "fib-f32" (f32.const 5.0)) (f32.const 8.0))
568 (assert_return (invoke "fib-f32" (f32.const 20.0)) (f32.const 10946.0))
570 (assert_return (invoke "fib-f64" (f64.const 0.0)) (f64.const 1.0))
571 (assert_return (invoke "fib-f64" (f64.const 1.0)) (f64.const 1.0))
572 (assert_return (invoke "fib-f64" (f64.const 2.0)) (f64.const 2.0))
573 (assert_return (invoke "fib-f64" (f64.const 5.0)) (f64.const 8.0))
574 (assert_return (invoke "fib-f64" (f64.const 20.0)) (f64.const 10946.0))
576 (assert_return (invoke "even" (i32.const 0)) (i32.const 44))
577 (assert_return (invoke "even" (i32.const 1)) (i32.const 99))
578 (assert_return (invoke "even" (i32.const 100)) (i32.const 44))
579 (assert_return (invoke "even" (i32.const 77)) (i32.const 99))
580 (assert_return (invoke "odd" (i32.const 0)) (i32.const 99))
581 (assert_return (invoke "odd" (i32.const 1)) (i32.const 44))
582 (assert_return (invoke "odd" (i32.const 200)) (i32.const 99))
583 (assert_return (invoke "odd" (i32.const 77)) (i32.const 44))
585 (assert_exhaustion (invoke "runaway") "call stack exhausted")
586 (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted")
588 (assert_return (invoke "as-select-first") (i32.const 0x132))
589 (assert_return (invoke "as-select-mid") (i32.const 2))
590 (assert_return (invoke "as-select-last") (i32.const 2))
592 (assert_return (invoke "as-if-condition") (i32.const 1))
594 (assert_return (invoke "as-br_if-first") (i64.const 0x164))
595 (assert_return (invoke "as-br_if-last") (i32.const 2))
597 (assert_return (invoke "as-br_table-first") (f32.const 0xf32))
598 (assert_return (invoke "as-br_table-last") (i32.const 2))
600 (assert_return (invoke "as-store-first"))
601 (assert_return (invoke "as-store-last"))
603 (assert_return (invoke "as-memory.grow-value") (i32.const 1))
604 (assert_return (invoke "as-return-value") (i32.const 1))
605 (assert_return (invoke "as-drop-operand"))
606 (assert_return (invoke "as-br-value") (f32.const 1))
607 (assert_return (invoke "as-local.set-value") (f64.const 1))
608 (assert_return (invoke "as-local.tee-value") (f64.const 1))
609 (assert_return (invoke "as-global.set-value") (f64.const 1.0))
610 (assert_return (invoke "as-load-operand") (i32.const 1))
612 (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0))
613 (assert_return (invoke "as-binary-left") (i32.const 11))
614 (assert_return (invoke "as-binary-right") (i32.const 9))
615 (assert_return (invoke "as-test-operand") (i32.const 0))
616 (assert_return (invoke "as-compare-left") (i32.const 1))
617 (assert_return (invoke "as-compare-right") (i32.const 1))
618 (assert_return (invoke "as-convert-operand") (i64.const 1))
624 "(type $sig (func (param i32) (result i32)))"
627 " (call_indirect (type $sig) (result i32) (param i32)"
628 " (i32.const 0) (i32.const 0)"
636 "(type $sig (func (param i32) (result i32)))"
639 " (call_indirect (param i32) (type $sig) (result i32)"
640 " (i32.const 0) (i32.const 0)"
648 "(type $sig (func (param i32) (result i32)))"
651 " (call_indirect (param i32) (result i32) (type $sig)"
652 " (i32.const 0) (i32.const 0)"
660 "(type $sig (func (param i32) (result i32)))"
663 " (call_indirect (result i32) (type $sig) (param i32)"
664 " (i32.const 0) (i32.const 0)"
672 "(type $sig (func (param i32) (result i32)))"
675 " (call_indirect (result i32) (param i32) (type $sig)"
676 " (i32.const 0) (i32.const 0)"
686 " (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))"
695 "(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))"
704 " (call_indirect (type $sig) (result i32) (i32.const 0))"
707 "inline function type"
711 "(type $sig (func (param i32) (result i32)))"
714 " (call_indirect (type $sig) (result i32) (i32.const 0))"
717 "inline function type"
721 "(type $sig (func (param i32) (result i32)))"
724 " (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))"
727 "inline function type"
731 "(type $sig (func (param i32 i32) (result i32)))"
734 " (call_indirect (type $sig) (param i32) (result i32)"
735 " (i32.const 0) (i32.const 0)"
739 "inline function type"
747 (func $no-table (call_indirect (type 0) (i32.const 0)))
756 (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0))))
762 (type (func (result i64)))
764 (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0))))
771 (type (func (param i32)))
773 (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0)))
779 (type (func (param f64 i32)))
781 (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0)))
789 (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0)))
798 (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0))
806 (type (func (param i32)))
808 (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop)))
814 (type (func (param i32)))
816 (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1)))
823 (type (func (param i32 i32)))
825 (func $type-first-void-vs-num
826 (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0))
833 (type (func (param i32 i32)))
835 (func $type-second-void-vs-num
836 (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0))
843 (type (func (param i32 f64)))
845 (func $type-first-num-vs-num
846 (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0))
853 (type (func (param f64 i32)))
855 (func $type-second-num-vs-num
856 (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0))
864 (func $f (param i32))
865 (type $sig (func (param i32)))
866 (table funcref (elem $f))
867 (func $type-first-empty-in-block
869 (call_indirect (type $sig) (i32.const 0))
877 (func $f (param i32 i32))
878 (type $sig (func (param i32 i32)))
879 (table funcref (elem $f))
880 (func $type-second-empty-in-block
882 (call_indirect (type $sig) (i32.const 0) (i32.const 0))
890 (func $f (param i32))
891 (type $sig (func (param i32)))
892 (table funcref (elem $f))
893 (func $type-first-empty-in-loop
895 (call_indirect (type $sig) (i32.const 0))
903 (func $f (param i32 i32))
904 (type $sig (func (param i32 i32)))
905 (table funcref (elem $f))
906 (func $type-second-empty-in-loop
908 (call_indirect (type $sig) (i32.const 0) (i32.const 0))
916 (func $f (param i32))
917 (type $sig (func (param i32)))
918 (table funcref (elem $f))
919 (func $type-first-empty-in-then
920 (i32.const 0) (i32.const 0)
923 (call_indirect (type $sig) (i32.const 0))
932 (func $f (param i32 i32))
933 (type $sig (func (param i32 i32)))
934 (table funcref (elem $f))
935 (func $type-second-empty-in-then
936 (i32.const 0) (i32.const 0)
939 (call_indirect (type $sig) (i32.const 0) (i32.const 0))
953 (func $unbound-type (call_indirect (type 1) (i32.const 0)))
960 (func $large-type (call_indirect (type 1012321300) (i32.const 0)))
966 ;; Unbound function in table
969 (module (table funcref (elem 0 0)))