|
600 | 600 | (assert_return (invoke $module1 "call-7") (i32.const 67))
|
601 | 601 | (assert_return (invoke $module1 "call-8") (i32.const 69))
|
602 | 602 | (assert_return (invoke $module1 "call-9") (i32.const 70))
|
| 603 | + |
| 604 | +;; Element segments must match element type of table |
| 605 | + |
| 606 | +(assert_invalid |
| 607 | + (module (func $f) (table 1 externref) (elem (i32.const 0) $f)) |
| 608 | + "type mismatch" |
| 609 | +) |
| 610 | + |
| 611 | +(assert_invalid |
| 612 | + (module (table 1 funcref) (elem (i32.const 0) externref (ref.null extern))) |
| 613 | + "type mismatch" |
| 614 | +) |
| 615 | + |
| 616 | +(assert_invalid |
| 617 | + (module |
| 618 | + (func $f) |
| 619 | + (table $t 1 externref) |
| 620 | + (elem $e funcref (ref.func $f)) |
| 621 | + (func (table.init $t $e (i32.const 0) (i32.const 0) (i32.const 1)))) |
| 622 | + "type mismatch" |
| 623 | +) |
| 624 | + |
| 625 | +(assert_invalid |
| 626 | + (module |
| 627 | + (table $t 1 funcref) |
| 628 | + (elem $e externref (ref.null extern)) |
| 629 | + (func (table.init $t $e (i32.const 0) (i32.const 0) (i32.const 1)))) |
| 630 | + "type mismatch" |
| 631 | +) |
| 632 | + |
| 633 | +;; Initializing a table with an externref-type element segment |
| 634 | + |
| 635 | +(module $m |
| 636 | + (table $t (export "table") 2 externref) |
| 637 | + (func (export "get") (param $i i32) (result externref) |
| 638 | + (table.get $t (local.get $i))) |
| 639 | + (func (export "set") (param $i i32) (param $x externref) |
| 640 | + (table.set $t (local.get $i) (local.get $x)))) |
| 641 | + |
| 642 | +(register "exporter" $m) |
| 643 | + |
| 644 | +(assert_return (invoke $m "get" (i32.const 0)) (ref.null extern)) |
| 645 | +(assert_return (invoke $m "get" (i32.const 1)) (ref.null extern)) |
| 646 | + |
| 647 | +(assert_return (invoke $m "set" (i32.const 0) (ref.extern 42))) |
| 648 | +(assert_return (invoke $m "set" (i32.const 1) (ref.extern 137))) |
| 649 | + |
| 650 | +(assert_return (invoke $m "get" (i32.const 0)) (ref.extern 42)) |
| 651 | +(assert_return (invoke $m "get" (i32.const 1)) (ref.extern 137)) |
| 652 | + |
| 653 | +(module |
| 654 | + (import "exporter" "table" (table $t 2 externref)) |
| 655 | + (elem (i32.const 0) externref (ref.null extern))) |
| 656 | + |
| 657 | +(assert_return (invoke $m "get" (i32.const 0)) (ref.null extern)) |
| 658 | +(assert_return (invoke $m "get" (i32.const 1)) (ref.extern 137)) |
0 commit comments