Skip to content

Commit f2b7c60

Browse files
authored
[test] test segment/table mismatch and externref segment (#1547)
1 parent 5a12e3f commit f2b7c60

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

test/core/elem.wast

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,3 +600,59 @@
600600
(assert_return (invoke $module1 "call-7") (i32.const 67))
601601
(assert_return (invoke $module1 "call-8") (i32.const 69))
602602
(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

Comments
 (0)