summaryrefslogtreecommitdiff
path: root/test/lit/arrays.wast
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2022-11-07 12:45:01 -0800
committerGitHub <noreply@github.com>2022-11-07 12:45:01 -0800
commitb48e4de5ea13434ded315b2bc99a713db0361f63 (patch)
treea1c24b6f79c624f9affb538e1daf18e67d386743 /test/lit/arrays.wast
parent52079ae8ea3abec509c3184720d1824b9093cb2f (diff)
downloadbinaryen-b48e4de5ea13434ded315b2bc99a713db0361f63.tar.gz
binaryen-b48e4de5ea13434ded315b2bc99a713db0361f63.tar.bz2
binaryen-b48e4de5ea13434ded315b2bc99a713db0361f63.zip
Implement `array.new_data` and `array.new_elem` (#5214)
In order to test them, fix the binary and text parsers to accept passive data segments even if a module has no memory. In addition to parsing and emitting the new instructions, also implement their validation and interpretation. Test the interpretation directly with wasm-shell tests adapted from the upstream spec tests. Running the upstream spec tests directly would require fixing too many bugs in the legacy text parser, so it will have to wait for the new text parser to be ready.
Diffstat (limited to 'test/lit/arrays.wast')
-rw-r--r--test/lit/arrays.wast72
1 files changed, 66 insertions, 6 deletions
diff --git a/test/lit/arrays.wast b/test/lit/arrays.wast
index 31aead1cd..4a262ef13 100644
--- a/test/lit/arrays.wast
+++ b/test/lit/arrays.wast
@@ -10,24 +10,46 @@
;; RUN: wasm-opt %s -all -S -o - | wasm-opt -all -S -o - | filecheck %s
(module
- (type $byte-array (array (mut i8)))
;; CHECK: (type $arrayref_=>_i32 (func (param arrayref) (result i32)))
;; CHECK: (type $ref|array|_=>_i32 (func (param (ref array)) (result i32)))
;; CHECK: (type $nullref_=>_i32 (func (param nullref) (result i32)))
- ;; CHECK: (func $len (param $a (ref array)) (result i32)
- ;; CHECK-NEXT: (array.len
- ;; CHECK-NEXT: (local.get $a)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
+ ;; CHECK: (type $none_=>_ref|$byte-array| (func (result (ref $byte-array))))
+
+ ;; CHECK: (type $none_=>_ref|$func-array| (func (result (ref $func-array))))
+
+ ;; CHECK: (type $byte-array (array (mut i8)))
;; ROUNDTRIP: (type $arrayref_=>_i32 (func (param arrayref) (result i32)))
;; ROUNDTRIP: (type $ref|array|_=>_i32 (func (param (ref array)) (result i32)))
;; ROUNDTRIP: (type $nullref_=>_i32 (func (param nullref) (result i32)))
+ ;; ROUNDTRIP: (type $none_=>_ref|$byte-array| (func (result (ref $byte-array))))
+
+ ;; ROUNDTRIP: (type $none_=>_ref|$func-array| (func (result (ref $func-array))))
+
+ ;; ROUNDTRIP: (type $byte-array (array (mut i8)))
+ (type $byte-array (array (mut i8)))
+ ;; CHECK: (type $func-array (array (mut funcref)))
+ ;; ROUNDTRIP: (type $func-array (array (mut funcref)))
+ (type $func-array (array (mut funcref)))
+
+ ;; CHECK: (data "hello")
+ ;; ROUNDTRIP: (data "hello")
+ (data "hello")
+ ;; CHECK: (elem func $len $impossible-len $unreachable-len)
+ ;; ROUNDTRIP: (elem func $len $impossible-len $unreachable-len)
+ (elem func $len $impossible-len $unreachable-len)
+
+
+ ;; CHECK: (func $len (param $a (ref array)) (result i32)
+ ;; CHECK-NEXT: (array.len
+ ;; CHECK-NEXT: (local.get $a)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
;; ROUNDTRIP: (func $len (param $a (ref array)) (result i32)
;; ROUNDTRIP-NEXT: (array.len
;; ROUNDTRIP-NEXT: (local.get $a)
@@ -85,4 +107,42 @@
(local.get $a)
)
)
+
+ ;; CHECK: (func $new-data (result (ref $byte-array))
+ ;; CHECK-NEXT: (array.new_data $byte-array 0
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; ROUNDTRIP: (func $new-data (result (ref $byte-array))
+ ;; ROUNDTRIP-NEXT: (array.new_data $byte-array 0
+ ;; ROUNDTRIP-NEXT: (i32.const 0)
+ ;; ROUNDTRIP-NEXT: (i32.const 5)
+ ;; ROUNDTRIP-NEXT: )
+ ;; ROUNDTRIP-NEXT: )
+ (func $new-data (result (ref $byte-array))
+ (array.new_data $byte-array 0
+ (i32.const 0)
+ (i32.const 5)
+ )
+ )
+
+ ;; CHECK: (func $new-elem (result (ref $func-array))
+ ;; CHECK-NEXT: (array.new_elem $func-array 0
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; ROUNDTRIP: (func $new-elem (result (ref $func-array))
+ ;; ROUNDTRIP-NEXT: (array.new_elem $func-array 0
+ ;; ROUNDTRIP-NEXT: (i32.const 0)
+ ;; ROUNDTRIP-NEXT: (i32.const 3)
+ ;; ROUNDTRIP-NEXT: )
+ ;; ROUNDTRIP-NEXT: )
+ (func $new-elem (result (ref $func-array))
+ (array.new_elem $func-array 0
+ (i32.const 0)
+ (i32.const 3)
+ )
+ )
)