summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-10-04 17:20:36 -0700
committerGitHub <noreply@github.com>2021-10-05 00:20:36 +0000
commit273449dd5be4085eb43592aebaffb483ea995497 (patch)
treef54aedf1fbe87ae166a4e6612bf10afb0d7d4785 /test
parent8895a2417d37e3444c98f0023e98ab9151d04290 (diff)
downloadbinaryen-273449dd5be4085eb43592aebaffb483ea995497.tar.gz
binaryen-273449dd5be4085eb43592aebaffb483ea995497.tar.bz2
binaryen-273449dd5be4085eb43592aebaffb483ea995497.zip
Fix roundtripping specialized element segments of table zero (#4212)
Before this fix, the first table (index 0) is counted as its element segment having "no table index" even when its type is not funcref, which could break things if that table had a more specialized type.
Diffstat (limited to 'test')
-rw-r--r--test/lit/table-first-special.wast42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/lit/table-first-special.wast b/test/lit/table-first-special.wast
new file mode 100644
index 000000000..0ddc730b9
--- /dev/null
+++ b/test/lit/table-first-special.wast
@@ -0,0 +1,42 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+
+;; RUN: wasm-as %s -all -g -o %t.wasm
+;; RUN: wasm-dis %t.wasm -all -o %t.wast
+;; RUN: wasm-as %s -all -o %t.nodebug.wasm
+;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.nodebug.wast
+;; RUN: wasm-opt %t.wast -all -o %t.text.wast -g -S
+;; RUN: cat %t.wast | filecheck %s --check-prefix=CHECK-BINARY
+;; RUN: cat %t.nodebug.wast | filecheck %s --check-prefix=CHECK-NODEBUG
+;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT
+
+;; The very first table has a specialized type, as does its element segment.
+;; Verify that we can roundtrip that.
+(module
+ ;; CHECK-BINARY: (type $vii (func (param i32 i32)))
+ ;; CHECK-TEXT: (type $vii (func (param i32 i32)))
+ (type $vii (func (param i32 i32)))
+ ;; CHECK-BINARY: (table $table-1 10 10 (ref null $vii))
+ ;; CHECK-TEXT: (table $table-1 10 10 (ref null $vii))
+ (table $table-1 10 10 (ref null $vii))
+ ;; CHECK-BINARY: (elem $elem-1 (table $table-1) (i32.const 0) (ref null $vii))
+ ;; CHECK-TEXT: (elem $elem-1 (table $table-1) (i32.const 0) (ref null $vii))
+ (elem $elem-1 (table $table-1) (i32.const 0) (ref null $vii))
+ ;; CHECK-BINARY: (func $foo (param $0 i32) (param $1 i32)
+ ;; CHECK-BINARY-NEXT: (nop)
+ ;; CHECK-BINARY-NEXT: )
+ ;; CHECK-TEXT: (func $foo (param $0 i32) (param $1 i32)
+ ;; CHECK-TEXT-NEXT: (nop)
+ ;; CHECK-TEXT-NEXT: )
+ (func $foo (param $0 i32) (param $1 i32)
+ (nop)
+ )
+)
+;; CHECK-NODEBUG: (type $i32_i32_=>_none (func (param i32 i32)))
+
+;; CHECK-NODEBUG: (table $0 10 10 (ref null $i32_i32_=>_none))
+
+;; CHECK-NODEBUG: (elem (table $0) (i32.const 0) (ref null $i32_i32_=>_none))
+
+;; CHECK-NODEBUG: (func $0 (param $0 i32) (param $1 i32)
+;; CHECK-NODEBUG-NEXT: (nop)
+;; CHECK-NODEBUG-NEXT: )