diff options
author | Jérôme Vouillon <jerome.vouillon@gmail.com> | 2023-08-22 18:47:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-22 09:47:37 -0700 |
commit | 1d95fdc7805ef2f29b8b8b0cce8f7c8cc385edd0 (patch) | |
tree | 8476853499d83954cb6d6deb9d687dc45614a4b5 /test | |
parent | afca5f51a46750927ac9263297d24b224915e558 (diff) | |
download | binaryen-1d95fdc7805ef2f29b8b8b0cce8f7c8cc385edd0.tar.gz binaryen-1d95fdc7805ef2f29b8b8b0cce8f7c8cc385edd0.tar.bz2 binaryen-1d95fdc7805ef2f29b8b8b0cce8f7c8cc385edd0.zip |
Make the legacy parser follow more closely the standard GC text format (#5889)
* Allow empty `then` and `else` clauses
* Allow standard syntax for `ref.test` and `ref.cast`
Fixes #5795
* Allow size immediate in `array.new_fixed`
Fixes #5769
Diffstat (limited to 'test')
-rw-r--r-- | test/lit/array-new-fixed.wast | 36 | ||||
-rw-r--r-- | test/lit/if-then-else.wast | 48 | ||||
-rw-r--r-- | test/lit/ref_cast_test.wast | 173 |
3 files changed, 257 insertions, 0 deletions
diff --git a/test/lit/array-new-fixed.wast b/test/lit/array-new-fixed.wast new file mode 100644 index 000000000..ef20bf5f8 --- /dev/null +++ b/test/lit/array-new-fixed.wast @@ -0,0 +1,36 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. +;; RUN: wasm-opt -all %s -S -o - | filecheck %s + +;; Check that we can optionally specify the size of the array. +(module + ;; CHECK: (type $array (array i32)) + (type $array (array i32)) + ;; CHECK: (func $test (type $none_=>_none) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (array.new_fixed $array + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (array.new_fixed $array + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $test + (drop + (array.new_fixed $array + (i32.const 0) + (i32.const 1) + ) + ) + (drop + (array.new_fixed $array 2 + (i32.const 0) + (i32.const 1) + ) + ) + ) +) diff --git a/test/lit/if-then-else.wast b/test/lit/if-then-else.wast new file mode 100644 index 000000000..9d457bef1 --- /dev/null +++ b/test/lit/if-then-else.wast @@ -0,0 +1,48 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. +;; RUN: wasm-opt %s -S -o - | filecheck %s + +;; Check that an empty then or else clause is allowed. +(module + ;; CHECK: (func $test (param $0 i32) (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $test (param i32) (result i32) + (if + (local.get $0) + (then) + (else + (return (i32.const 0)) + ) + ) + (if + (local.get $0) + (then + (return + (i32.const 1) + ) + ) + (else) + ) + (return + (i32.const 2) + ) + ) +) diff --git a/test/lit/ref_cast_test.wast b/test/lit/ref_cast_test.wast new file mode 100644 index 000000000..c44278c13 --- /dev/null +++ b/test/lit/ref_cast_test.wast @@ -0,0 +1,173 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. +;; RUN: wasm-opt -all %s -S -o - | filecheck %s + +;; Check that both the legacy and the standard syntax for ref.test and +;; ref.cast work +(module + ;; CHECK: (type $array (array i32)) + (type $array (array i32)) + ;; CHECK: (func $test (type $eqref_=>_none) (param $0 eqref) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast null $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast null i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast null $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.cast null i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test null $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test null i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test null $array + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.test null i31 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $test (param eqref) + (drop + (ref.cast $array + (local.get 0) + ) + ) + (drop + (ref.cast null $array + (local.get 0) + ) + ) + (drop + (ref.cast i31 + (local.get 0) + ) + ) + (drop + (ref.cast null i31 + (local.get 0) + ) + ) + (drop + (ref.cast (ref $array) + (local.get 0) + ) + ) + (drop + (ref.cast (ref null $array) + (local.get 0) + ) + ) + (drop + (ref.cast (ref i31) + (local.get 0) + ) + ) + (drop + (ref.cast i31ref + (local.get 0) + ) + ) + (drop + (ref.test $array + (local.get 0) + ) + ) + (drop + (ref.test null $array + (local.get 0) + ) + ) + (drop + (ref.test i31 + (local.get 0) + ) + ) + (drop + (ref.test null i31 + (local.get 0) + ) + ) + (drop + (ref.test (ref $array) + (local.get 0) + ) + ) + (drop + (ref.test (ref null $array) + (local.get 0) + ) + ) + (drop + (ref.test (ref i31) + (local.get 0) + ) + ) + (drop + (ref.test i31ref + (local.get 0) + ) + ) + ) +) |