summaryrefslogtreecommitdiff
path: root/test/lit
diff options
context:
space:
mode:
Diffstat (limited to 'test/lit')
-rw-r--r--test/lit/binary/bad-ref-as.test5
-rw-r--r--test/lit/passes/gufa-extern.wast9
-rw-r--r--test/lit/passes/optimize-instructions-gc-tnh.wast18
-rw-r--r--test/lit/passes/optimize-instructions-gc.wast109
-rw-r--r--test/lit/passes/vacuum-gc.wast10
-rw-r--r--test/lit/passes/vacuum-tnh.wast10
6 files changed, 31 insertions, 130 deletions
diff --git a/test/lit/binary/bad-ref-as.test b/test/lit/binary/bad-ref-as.test
index 2afa19904..3accdd553 100644
--- a/test/lit/binary/bad-ref-as.test
+++ b/test/lit/binary/bad-ref-as.test
@@ -1,6 +1,5 @@
;; Test that we error properly on a file with a ref.as of a non-ref type.
-;; RUN: not wasm-opt %s.wasm 2>&1 | filecheck %s
-
-;; CHECK: parse exception: bad input type for ref.as: i32
+;; RUN: not wasm-opt -all %s.wasm 2>&1 | filecheck %s
+;; CHECK: ref.cast ref must have ref type
diff --git a/test/lit/passes/gufa-extern.wast b/test/lit/passes/gufa-extern.wast
index 2c38a0118..9d71357aa 100644
--- a/test/lit/passes/gufa-extern.wast
+++ b/test/lit/passes/gufa-extern.wast
@@ -39,10 +39,13 @@
;; CHECK: (func $non-exported (type $externref_anyref_=>_none) (param $ext externref) (param $any anyref)
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (ref.as_data
- ;; CHECK-NEXT: (extern.internalize
- ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (extern.internalize
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
diff --git a/test/lit/passes/optimize-instructions-gc-tnh.wast b/test/lit/passes/optimize-instructions-gc-tnh.wast
index 948e03296..502590cde 100644
--- a/test/lit/passes/optimize-instructions-gc-tnh.wast
+++ b/test/lit/passes/optimize-instructions-gc-tnh.wast
@@ -86,9 +86,7 @@
;; TNH: (func $ref.is (type $eqref_=>_i32) (param $a eqref) (result i32)
;; TNH-NEXT: (drop
;; TNH-NEXT: (ref.cast $struct
- ;; TNH-NEXT: (ref.as_data
- ;; TNH-NEXT: (local.get $a)
- ;; TNH-NEXT: )
+ ;; TNH-NEXT: (local.get $a)
;; TNH-NEXT: )
;; TNH-NEXT: )
;; TNH-NEXT: (i32.const 0)
@@ -96,9 +94,7 @@
;; NO_TNH: (func $ref.is (type $eqref_=>_i32) (param $a eqref) (result i32)
;; NO_TNH-NEXT: (drop
;; NO_TNH-NEXT: (ref.cast $struct
- ;; NO_TNH-NEXT: (ref.as_data
- ;; NO_TNH-NEXT: (local.get $a)
- ;; NO_TNH-NEXT: )
+ ;; NO_TNH-NEXT: (local.get $a)
;; NO_TNH-NEXT: )
;; NO_TNH-NEXT: )
;; NO_TNH-NEXT: (i32.const 0)
@@ -140,23 +136,23 @@
)
)
- ;; TNH: (func $ref.is_func (type $anyref_=>_i32) (param $a anyref) (result i32)
+ ;; TNH: (func $ref.is_func (type $funcref_=>_i32) (param $a funcref) (result i32)
;; TNH-NEXT: (drop
- ;; TNH-NEXT: (ref.as_func
+ ;; TNH-NEXT: (ref.as_non_null
;; TNH-NEXT: (local.get $a)
;; TNH-NEXT: )
;; TNH-NEXT: )
;; TNH-NEXT: (i32.const 1)
;; TNH-NEXT: )
- ;; NO_TNH: (func $ref.is_func (type $anyref_=>_i32) (param $a anyref) (result i32)
+ ;; NO_TNH: (func $ref.is_func (type $funcref_=>_i32) (param $a funcref) (result i32)
;; NO_TNH-NEXT: (drop
- ;; NO_TNH-NEXT: (ref.as_func
+ ;; NO_TNH-NEXT: (ref.as_non_null
;; NO_TNH-NEXT: (local.get $a)
;; NO_TNH-NEXT: )
;; NO_TNH-NEXT: )
;; NO_TNH-NEXT: (i32.const 1)
;; NO_TNH-NEXT: )
- (func $ref.is_func (param $a (ref null any)) (result i32)
+ (func $ref.is_func (param $a funcref) (result i32)
;; The check must succeed. We can return 1 here, and drop the rest, with or
;; without TNH (in particular, TNH should not just remove the cast but not
;; return a 1).
diff --git a/test/lit/passes/optimize-instructions-gc.wast b/test/lit/passes/optimize-instructions-gc.wast
index e6ee4784a..631697e27 100644
--- a/test/lit/passes/optimize-instructions-gc.wast
+++ b/test/lit/passes/optimize-instructions-gc.wast
@@ -366,95 +366,6 @@
)
)
- ;; similar to $unneeded_as, but the values are of mixed kind (as_func of
- ;; data, etc.), so we know we will trap
- ;; CHECK: (func $unneeded_as_bad_kinds (type $funcref_dataref_i31ref_=>_none) (param $func funcref) (param $struct dataref) (param $i31 i31ref)
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref func))
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $struct)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (unreachable)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref i31))
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $func)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (unreachable)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref func))
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $struct)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (unreachable)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (block (result (ref i31))
- ;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $func)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (unreachable)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; NOMNL: (func $unneeded_as_bad_kinds (type $funcref_dataref_i31ref_=>_none) (param $func funcref) (param $struct dataref) (param $i31 i31ref)
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref func))
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (local.get $struct)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (unreachable)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref i31))
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (local.get $func)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (unreachable)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref func))
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (local.get $struct)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (unreachable)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (block (result (ref i31))
- ;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (local.get $func)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: (unreachable)
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- ;; NOMNL-NEXT: )
- (func $unneeded_as_bad_kinds
- (param $func (ref null func))
- (param $struct (ref null struct))
- (param $i31 (ref null i31))
- (drop
- (ref.as_func (local.get $struct))
- )
- (drop
- (ref.as_i31 (local.get $func))
- )
- ;; also check non-nullable types as inputs
- (drop
- (ref.as_func (ref.as_non_null (local.get $struct)))
- )
- (drop
- (ref.as_i31 (ref.as_non_null (local.get $func)))
- )
- )
-
;; CHECK: (func $unneeded_unreachability (type $void)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.is_func
@@ -462,7 +373,10 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (ref.as_func
+ ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
@@ -474,7 +388,10 @@
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
;; NOMNL-NEXT: (drop
- ;; NOMNL-NEXT: (ref.as_func
+ ;; NOMNL-NEXT: (block ;; (replaces something unreachable we can't emit)
+ ;; NOMNL-NEXT: (drop
+ ;; NOMNL-NEXT: (unreachable)
+ ;; NOMNL-NEXT: )
;; NOMNL-NEXT: (unreachable)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
@@ -3129,12 +3046,18 @@
)
;; CHECK: (func $as_of_unreachable (type $none_=>_ref|data|) (result (ref data))
- ;; CHECK-NEXT: (ref.as_data
+ ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; NOMNL: (func $as_of_unreachable (type $none_=>_ref|data|) (result (ref data))
- ;; NOMNL-NEXT: (ref.as_data
+ ;; NOMNL-NEXT: (block ;; (replaces something unreachable we can't emit)
+ ;; NOMNL-NEXT: (drop
+ ;; NOMNL-NEXT: (unreachable)
+ ;; NOMNL-NEXT: )
;; NOMNL-NEXT: (unreachable)
;; NOMNL-NEXT: )
;; NOMNL-NEXT: )
diff --git a/test/lit/passes/vacuum-gc.wast b/test/lit/passes/vacuum-gc.wast
index c7ff5a37f..c131bef20 100644
--- a/test/lit/passes/vacuum-gc.wast
+++ b/test/lit/passes/vacuum-gc.wast
@@ -12,11 +12,6 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (ref.as_func
- ;; CHECK-NEXT: (local.get $x)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.as_data
;; CHECK-NEXT: (local.get $x)
;; CHECK-NEXT: )
@@ -36,11 +31,6 @@
)
)
(drop
- (ref.as_func
- (local.get $x)
- )
- )
- (drop
(ref.as_data
(local.get $x)
)
diff --git a/test/lit/passes/vacuum-tnh.wast b/test/lit/passes/vacuum-tnh.wast
index c1e8c2059..40aac16c1 100644
--- a/test/lit/passes/vacuum-tnh.wast
+++ b/test/lit/passes/vacuum-tnh.wast
@@ -27,11 +27,6 @@
;; NO_TNH-NEXT: )
;; NO_TNH-NEXT: )
;; NO_TNH-NEXT: (drop
- ;; NO_TNH-NEXT: (ref.as_func
- ;; NO_TNH-NEXT: (local.get $y)
- ;; NO_TNH-NEXT: )
- ;; NO_TNH-NEXT: )
- ;; NO_TNH-NEXT: (drop
;; NO_TNH-NEXT: (ref.as_data
;; NO_TNH-NEXT: (local.get $y)
;; NO_TNH-NEXT: )
@@ -61,11 +56,6 @@
;; Other ref.as* as well.
(drop
- (ref.as_func
- (local.get $y)
- )
- )
- (drop
(ref.as_data
(local.get $y)
)