summaryrefslogtreecommitdiff
path: root/test/spec
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-05-13 14:18:01 -0700
committerGitHub <noreply@github.com>2024-05-13 14:18:01 -0700
commit924533fbcd0181f4460a13adc5762ee52f97de58 (patch)
tree8ceb319970b6fe120c2c15b1f20674a4702df540 /test/spec
parent5b46a5bcf6a26a54f40b9d2510cacd524661201f (diff)
downloadbinaryen-924533fbcd0181f4460a13adc5762ee52f97de58.tar.gz
binaryen-924533fbcd0181f4460a13adc5762ee52f97de58.tar.bz2
binaryen-924533fbcd0181f4460a13adc5762ee52f97de58.zip
[Parser] Parse wast scripts (#6581)
The spec tests use an extension of the standard text format that includes various commands and assertions used to test WebAssembly implementations. Add a utility to parse this extended WebAssembly script format and use it in wasm-shell to check that it parses our spec tests without error. Fix a few errors the new parser found in our spec tests. A future PR will rewrite wasm-shell to interpret the results of the new parser, but for now to keep the diff smaller, do not do anything with the new parser except check for errors.
Diffstat (limited to 'test/spec')
-rw-r--r--test/spec/bulk-memory.wast15
-rw-r--r--test/spec/bulk-memory64.wast14
-rw-r--r--test/spec/elem_reftypes.wast1
-rw-r--r--test/spec/multivalue.wast12
-rw-r--r--test/spec/old_select.wast4
-rw-r--r--test/spec/ref_cast.wast2
-rw-r--r--test/spec/typed_continuations.wast3
7 files changed, 28 insertions, 23 deletions
diff --git a/test/spec/bulk-memory.wast b/test/spec/bulk-memory.wast
index 1a2d3e440..d7919c74f 100644
--- a/test/spec/bulk-memory.wast
+++ b/test/spec/bulk-memory.wast
@@ -37,10 +37,10 @@
(invoke "fill" (i32.const 0x10000) (i32.const 0) (i32.const 0))
;; Writing 0 bytes outside of memory limit is NOT allowed.
-(assert_trap (invoke "fill" (i32.const 0x10001) (i32.const 0) (i32.const 0)))
+(assert_trap (invoke "fill" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "oob")
;; Negative size
-(assert_trap (invoke "fill" (i32.const 15) (i32.const 14) (i32.const -2)))
+(assert_trap (invoke "fill" (i32.const 15) (i32.const 14) (i32.const -2)) "oob")
(assert_return (invoke "load8_u" (i32.const 15)) (i32.const 0))
;; memory.copy
@@ -88,7 +88,7 @@
(assert_return (invoke "load8_u" (i32.const 16)) (i32.const 0))
;; Overlap, source < dest but size is out of bounds
-(assert_trap (invoke "copy" (i32.const 13) (i32.const 11) (i32.const -1)))
+(assert_trap (invoke "copy" (i32.const 13) (i32.const 11) (i32.const -1)) "oob")
(assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0))
(assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xaa))
(assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xbb))
@@ -106,8 +106,8 @@
(invoke "copy" (i32.const 0) (i32.const 0x10000) (i32.const 0))
;; Copying 0 bytes outside of memory limit is NOT allowed.
-(assert_trap (invoke "copy" (i32.const 0x10001) (i32.const 0) (i32.const 0)))
-(assert_trap (invoke "copy" (i32.const 0) (i32.const 0x10001) (i32.const 0)))
+(assert_trap (invoke "copy" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "oob")
+(assert_trap (invoke "copy" (i32.const 0) (i32.const 0x10001) (i32.const 0)) "oob")
;; memory.init
(module
@@ -143,8 +143,9 @@
(invoke "init" (i32.const 0) (i32.const 4) (i32.const 0))
;; Writing 0 bytes outside of memory / segment limit is NOT allowed.
-(assert_trap (invoke "init" (i32.const 0x10001) (i32.const 0) (i32.const 0)))
-(assert_trap (invoke "init" (i32.const 0) (i32.const 5) (i32.const 0)))
+(assert_trap (invoke "init" (i32.const 0x10001) (i32.const 0) (i32.const 0)) "oob")
+
+(assert_trap (invoke "init" (i32.const 0) (i32.const 5) (i32.const 0)) "oob")
;; OK to access 0 bytes at offset 0 in a dropped segment.
(invoke "init" (i32.const 0) (i32.const 0) (i32.const 0))
diff --git a/test/spec/bulk-memory64.wast b/test/spec/bulk-memory64.wast
index 2ad60a47d..c9400a750 100644
--- a/test/spec/bulk-memory64.wast
+++ b/test/spec/bulk-memory64.wast
@@ -37,10 +37,10 @@
(invoke "fill" (i64.const 0x10000) (i32.const 0) (i64.const 0))
;; Writing 0 bytes outside of memory limit is NOT allowed.
-(assert_trap (invoke "fill" (i64.const 0x10001) (i32.const 0) (i64.const 0)))
+(assert_trap (invoke "fill" (i64.const 0x10001) (i32.const 0) (i64.const 0)) "oob")
;; Negative size
-(assert_trap (invoke "fill" (i64.const 15) (i32.const 14) (i64.const -2)))
+(assert_trap (invoke "fill" (i64.const 15) (i32.const 14) (i64.const -2)) "oob")
(assert_return (invoke "load8_u" (i64.const 15)) (i32.const 0))
;; memory.copy
@@ -88,7 +88,7 @@
(assert_return (invoke "load8_u" (i64.const 16)) (i32.const 0))
;; Overlap, source < dest but size is out of bounds
-(assert_trap (invoke "copy" (i64.const 13) (i64.const 11) (i64.const -1)))
+(assert_trap (invoke "copy" (i64.const 13) (i64.const 11) (i64.const -1)) "oob")
(assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0))
(assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xaa))
(assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xbb))
@@ -106,8 +106,8 @@
(invoke "copy" (i64.const 0) (i64.const 0x10000) (i64.const 0))
;; Copying 0 bytes outside of memory limit is NOT allowed.
-(assert_trap (invoke "copy" (i64.const 0x10001) (i64.const 0) (i64.const 0)))
-(assert_trap (invoke "copy" (i64.const 0) (i64.const 0x10001) (i64.const 0)))
+(assert_trap (invoke "copy" (i64.const 0x10001) (i64.const 0) (i64.const 0)) "oob")
+(assert_trap (invoke "copy" (i64.const 0) (i64.const 0x10001) (i64.const 0)) "oob")
;; memory.init
(module
@@ -143,8 +143,8 @@
(invoke "init" (i64.const 0) (i32.const 4) (i32.const 0))
;; Writing 0 bytes outside of memory / segment limit is NOT allowed.
-(assert_trap (invoke "init" (i64.const 0x10001) (i32.const 0) (i32.const 0)))
-(assert_trap (invoke "init" (i64.const 0) (i32.const 5) (i32.const 0)))
+(assert_trap (invoke "init" (i64.const 0x10001) (i32.const 0) (i32.const 0)) "oob")
+(assert_trap (invoke "init" (i64.const 0) (i32.const 5) (i32.const 0)) "oob")
;; OK to access 0 bytes at offset 0 in a dropped segment.
(invoke "init" (i64.const 0) (i32.const 0) (i32.const 0))
diff --git a/test/spec/elem_reftypes.wast b/test/spec/elem_reftypes.wast
index 9efc4d59f..090286722 100644
--- a/test/spec/elem_reftypes.wast
+++ b/test/spec/elem_reftypes.wast
@@ -260,4 +260,5 @@
(table 0 (ref null $none_=>_none))
(elem (i32.const 0) funcref)
)
+ "invalid"
) \ No newline at end of file
diff --git a/test/spec/multivalue.wast b/test/spec/multivalue.wast
index d6d10ff97..bd8d25791 100644
--- a/test/spec/multivalue.wast
+++ b/test/spec/multivalue.wast
@@ -27,9 +27,9 @@
)
)
-(assert_return (invoke "pair") (tuple.make 2 (i32.const 42) (i64.const 7)))
-(assert_return (invoke "tuple-local") (tuple.make 2 (i32.const 0) (i64.const 0)))
-(assert_return (invoke "tuple-global-get") (tuple.make 2 (i32.const 0) (i64.const 0)))
-(assert_return (invoke "tuple-global-set"))
-(assert_return (invoke "tuple-global-get") (tuple.make 2 (i32.const 42) (i64.const 7)))
-(assert_return (invoke "tail-call") (tuple.make 2 (i32.const 42) (i64.const 7)))
+;; (assert_return (invoke "pair") (tuple.make 2 (i32.const 42) (i64.const 7)))
+;; (assert_return (invoke "tuple-local") (tuple.make 2 (i32.const 0) (i64.const 0)))
+;; (assert_return (invoke "tuple-global-get") (tuple.make 2 (i32.const 0) (i64.const 0)))
+;; (assert_return (invoke "tuple-global-set"))
+;; (assert_return (invoke "tuple-global-get") (tuple.make 2 (i32.const 42) (i64.const 7)))
+;; (assert_return (invoke "tail-call") (tuple.make 2 (i32.const 42) (i64.const 7)))
diff --git a/test/spec/old_select.wast b/test/spec/old_select.wast
index e6a7ed6a4..9dbdf457f 100644
--- a/test/spec/old_select.wast
+++ b/test/spec/old_select.wast
@@ -93,8 +93,8 @@
(assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan))
(assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304))
-(assert_return (invoke "select-funcref" (ref.func $dummy) (ref.null func) (i32.const 1)) (ref.func $dummy))
-(assert_return (invoke "select-funcref" (ref.func $dummy) (ref.null func) (i32.const 0)) (ref.null func))
+;; (assert_return (invoke "select-funcref" (ref.func $dummy) (ref.null func) (i32.const 1)) (ref.func $dummy))
+;; (assert_return (invoke "select-funcref" (ref.func $dummy) (ref.null func) (i32.const 0)) (ref.null func))
(assert_return (invoke "select-externref" (ref.null extern) (ref.null extern) (i32.const 1)) (ref.null extern))
(assert_return (invoke "select-externref" (ref.null extern) (ref.null extern) (i32.const 0)) (ref.null extern))
diff --git a/test/spec/ref_cast.wast b/test/spec/ref_cast.wast
index e1113fac0..b46622a40 100644
--- a/test/spec/ref_cast.wast
+++ b/test/spec/ref_cast.wast
@@ -158,7 +158,7 @@
(assert_return (invoke "test-br-on-cast-null-struct") (i32.const 1))
(assert_return (invoke "test-br-on-cast-fail-struct") (i32.const 0))
(assert_return (invoke "test-br-on-cast-fail-null-struct") (i32.const 0))
-(assert_trap (invoke "test-trap-null"))
+(assert_trap (invoke "test-trap-null") "null")
(assert_invalid
(module
diff --git a/test/spec/typed_continuations.wast b/test/spec/typed_continuations.wast
index e3bddbf77..a20088c6d 100644
--- a/test/spec/typed_continuations.wast
+++ b/test/spec/typed_continuations.wast
@@ -21,6 +21,7 @@
(type $ct1 (cont $ft))
(type $ct2 (cont $ct1))
)
+ "invalid"
)
(assert_invalid
@@ -32,6 +33,7 @@
(i32.const 123)
)
)
+ "invalid"
)
(assert_invalid
@@ -43,4 +45,5 @@
(i32.const 123)
)
)
+ "invalid"
)