summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/lit/fuzz-types/isorecursive.test20
-rw-r--r--test/lit/fuzz-types/nominal.test24
-rw-r--r--test/lit/isorecursive-good.wast38
-rw-r--r--test/lit/recursive-types.wast19
4 files changed, 65 insertions, 36 deletions
diff --git a/test/lit/fuzz-types/isorecursive.test b/test/lit/fuzz-types/isorecursive.test
index f670104f5..4ba564193 100644
--- a/test/lit/fuzz-types/isorecursive.test
+++ b/test/lit/fuzz-types/isorecursive.test
@@ -1,7 +1,7 @@
;; RUN: wasm-fuzz-types --hybrid -v --seed=1 | filecheck %s
;; CHECK: (type $0 (struct))
-;; CHECK-NEXT: (rec
+;; CHECK-NEXT: (rec
;; CHECK-NEXT: (type $1 (struct))
;; CHECK-NEXT: (type $2 (array i16))
;; CHECK-NEXT: (type $3 (func))
@@ -13,20 +13,20 @@
;; CHECK-NEXT: (type $7 (func (param f64) (result i64)))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $8 (struct_subtype $1))
-;; CHECK-NEXT: (type $9 (func_subtype (param (ref $5) i32 i64 f64 f64 (ref eq) v128) (result i64) $4))
+;; CHECK-NEXT: (type $8 (struct_subtype (field f64 (ref $2) f64 (mut (ref null $9))) $1))
+;; CHECK-NEXT: (type $9 (func_subtype (param (ref array) i32 i64 f64 f64 anyref v128) (result i64) $4))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $10 (func_subtype (param (ref $5) i32 i64 f64 f64 (ref eq) v128) (result i64) $9))
+;; CHECK-NEXT: (type $10 (func_subtype (param (ref eq) i32 i64 f64 f64 anyref v128) (result i64) $9))
;; CHECK-NEXT: (type $11 (array_subtype (mut funcref) $6))
-;; CHECK-NEXT: (type $12 (array f64))
+;; CHECK-NEXT: (type $12 (array nullref))
;; CHECK-NEXT: (type $13 none)
-;; CHECK-NEXT: (type $14 (array arrayref))
-;; CHECK-NEXT: (type $15 (array (mut i8)))
+;; CHECK-NEXT: (type $14 (array (ref $6)))
+;; CHECK-NEXT: (type $15 (array i32))
;; CHECK-NEXT: )
;; CHECK-NEXT: (rec
-;; CHECK-NEXT: (type $16 (array_subtype f64 $12))
-;; CHECK-NEXT: (type $17 (func (param (ref $5) (ref null $3) (ref null $0) (ref null $2) (ref $8) v128) (result v128)))
+;; CHECK-NEXT: (type $16 (array_subtype (ref none) $12))
+;; CHECK-NEXT: (type $17 (func (param (ref null $9)) (result f32 structref)))
;; CHECK-NEXT: (type $18 none)
;; CHECK-NEXT: )
-;; CHECK-NEXT: (type $19 (func_subtype (param (ref $5) i32 i64 f64 f64 (ref eq) v128) (result i64) $9))
+;; CHECK-NEXT: (type $19 (func_subtype (param (ref any) i32 i64 f64 f64 anyref v128) (result i64) $9))
diff --git a/test/lit/fuzz-types/nominal.test b/test/lit/fuzz-types/nominal.test
index c127105bb..27d6a969c 100644
--- a/test/lit/fuzz-types/nominal.test
+++ b/test/lit/fuzz-types/nominal.test
@@ -4,19 +4,19 @@
;; CHECK-NEXT: (type $1 (func (param f64 v128)))
;; CHECK-NEXT: (type $2 (struct (field (mut (ref null $19)) f64 arrayref)))
;; CHECK-NEXT: (type $3 (struct_subtype (field (mut i16) (ref i31) f32 f32 f64) $0))
-;; CHECK-NEXT: (type $4 (struct (field (mut (ref null $11)) (mut i8))))
+;; CHECK-NEXT: (type $4 (struct))
;; CHECK-NEXT: (type $5 none)
-;; CHECK-NEXT: (type $6 (array (ref null $18)))
+;; CHECK-NEXT: (type $6 (array (mut eqref)))
;; CHECK-NEXT: (type $7 (func_subtype (param f64 v128) $1))
-;; CHECK-NEXT: (type $8 (array (mut (ref null $19))))
-;; CHECK-NEXT: (type $9 (array (mut f64)))
-;; CHECK-NEXT: (type $10 (struct_subtype (field (mut i16) i31ref f32 f32 f64) $0))
-;; CHECK-NEXT: (type $11 (func (param i32 f64) (result (ref null $8))))
+;; CHECK-NEXT: (type $8 (array anyref))
+;; CHECK-NEXT: (type $9 (array f32))
+;; CHECK-NEXT: (type $10 (struct_subtype (field (mut i16) (ref i31) f32 f32 f64) $0))
+;; CHECK-NEXT: (type $11 (func (result f64)))
;; CHECK-NEXT: (type $12 (func_subtype (param f64 v128) $1))
;; CHECK-NEXT: (type $13 (func_subtype (param f64 v128) $12))
-;; CHECK-NEXT: (type $14 (func_subtype (param i32 f64) (result (ref null $8)) $11))
-;; CHECK-NEXT: (type $15 (func_subtype (param i32 f64) (result (ref null $8)) $14))
-;; CHECK-NEXT: (type $16 (func (result v128)))
-;; CHECK-NEXT: (type $17 (array f32))
-;; CHECK-NEXT: (type $18 (array i64))
-;; CHECK-NEXT: (type $19 (struct_subtype (field (mut i16) (ref none) f32 f32 f64 (ref $2)) $0))
+;; CHECK-NEXT: (type $14 (func_subtype (result f64) $11))
+;; CHECK-NEXT: (type $15 (func_subtype (result f64) $14))
+;; CHECK-NEXT: (type $16 (func (param (ref struct)) (result structref)))
+;; CHECK-NEXT: (type $17 (array (mut (ref $2))))
+;; CHECK-NEXT: (type $18 (array (ref $10)))
+;; CHECK-NEXT: (type $19 (struct_subtype (field (mut i16) (ref i31) f32 f32 f64 (mut f32)) $0))
diff --git a/test/lit/isorecursive-good.wast b/test/lit/isorecursive-good.wast
index 350aabcf9..c7c9569eb 100644
--- a/test/lit/isorecursive-good.wast
+++ b/test/lit/isorecursive-good.wast
@@ -5,11 +5,13 @@
;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s --check-prefix NOMINAL
(module
-
-
(rec
;; HYBRID: (rec
;; HYBRID-NEXT: (type $super-struct (struct (field i32)))
+ ;; NOMINAL: (type $super-array (array (ref $super-struct)))
+
+ ;; NOMINAL: (type $sub-array (array_subtype (ref $sub-struct) $super-array))
+
;; NOMINAL: (type $super-struct (struct (field i32)))
(type $super-struct (struct i32))
;; HYBRID: (type $sub-struct (struct_subtype (field i32) (field i64) $super-struct))
@@ -20,13 +22,21 @@
(rec
;; HYBRID: (rec
;; HYBRID-NEXT: (type $super-array (array (ref $super-struct)))
- ;; NOMINAL: (type $super-array (array (ref $super-struct)))
(type $super-array (array (ref $super-struct)))
;; HYBRID: (type $sub-array (array_subtype (ref $sub-struct) $super-array))
- ;; NOMINAL: (type $sub-array (array_subtype (ref $sub-struct) $super-array))
(type $sub-array (array_subtype (ref $sub-struct) $super-array))
)
+ (rec
+ ;; HYBRID: (rec
+ ;; HYBRID-NEXT: (type $super-func (func (param (ref $sub-array)) (result (ref $super-array))))
+ ;; NOMINAL: (type $super-func (func (param (ref $sub-array)) (result (ref $super-array))))
+ (type $super-func (func (param (ref $sub-array)) (result (ref $super-array))))
+ ;; HYBRID: (type $sub-func (func_subtype (param (ref $super-array)) (result (ref $sub-array)) $super-func))
+ ;; NOMINAL: (type $sub-func (func_subtype (param (ref $super-array)) (result (ref $sub-array)) $super-func))
+ (type $sub-func (func_subtype (param (ref $super-array)) (result (ref $sub-array)) $super-func))
+ )
+
;; HYBRID: (func $make-super-struct (type $none_=>_ref|$super-struct|) (result (ref $super-struct))
;; HYBRID-NEXT: (call $make-sub-struct)
;; HYBRID-NEXT: )
@@ -66,4 +76,24 @@
(func $make-sub-array (result (ref $sub-array))
(unreachable)
)
+
+ ;; HYBRID: (func $make-super-func (type $none_=>_ref|$super-func|) (result (ref $super-func))
+ ;; HYBRID-NEXT: (call $make-sub-func)
+ ;; HYBRID-NEXT: )
+ ;; NOMINAL: (func $make-super-func (type $none_=>_ref|$super-func|) (result (ref $super-func))
+ ;; NOMINAL-NEXT: (call $make-sub-func)
+ ;; NOMINAL-NEXT: )
+ (func $make-super-func (result (ref $super-func))
+ (call $make-sub-func)
+ )
+
+ ;; HYBRID: (func $make-sub-func (type $none_=>_ref|$sub-func|) (result (ref $sub-func))
+ ;; HYBRID-NEXT: (unreachable)
+ ;; HYBRID-NEXT: )
+ ;; NOMINAL: (func $make-sub-func (type $none_=>_ref|$sub-func|) (result (ref $sub-func))
+ ;; NOMINAL-NEXT: (unreachable)
+ ;; NOMINAL-NEXT: )
+ (func $make-sub-func (result (ref $sub-func))
+ (unreachable)
+ )
)
diff --git a/test/lit/recursive-types.wast b/test/lit/recursive-types.wast
index 30fd13db9..883756f7a 100644
--- a/test/lit/recursive-types.wast
+++ b/test/lit/recursive-types.wast
@@ -8,16 +8,15 @@
(type (func (param (ref null 1)) (result (ref null 1))))
(type (func (param (ref null 0)) (result (ref null 1))))
(rec
- (type (func (param (ref null 3)) (result (ref null 4))))
- (type (func (param (ref null 4)) (result (ref null 3))))
- )
-
- ;; CHECK: (type $type$0 (func (param (ref null $type$0)) (result (ref null $type$0))))
+ ;; CHECK: (type $type$0 (func (param (ref null $type$0)) (result (ref null $type$0))))
- ;; CHECK: (rec
- ;; CHECK-NEXT: (type $type$2 (func (param (ref null $type$2)) (result (ref null $type$3))))
+ ;; CHECK: (rec
+ ;; CHECK-NEXT: (type $f3 (func (param (ref null $type$2)) (result (ref null $f3))))
+ (type $f3 (func (param (ref null 4)) (result (ref null 3))))
+ (type (func_subtype (param (ref null 3)) (result (ref null 4)) $f3))
+ )
- ;; CHECK: (type $type$3 (func (param (ref null $type$3)) (result (ref null $type$2))))
+ ;; CHECK: (type $type$2 (func_subtype (param (ref null $f3)) (result (ref null $type$2)) $f3))
;; CHECK: (type $type$1 (func (param (ref null $type$0)) (result (ref null $type$0))))
@@ -42,14 +41,14 @@
(unreachable)
)
- ;; CHECK: (func $qux (type $type$2) (param $0 (ref null $type$2)) (result (ref null $type$3))
+ ;; CHECK: (func $qux (type $f3) (param $0 (ref null $type$2)) (result (ref null $f3))
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
(func $qux (type 3)
(unreachable)
)
- ;; CHECK: (func $quux (type $type$3) (param $0 (ref null $type$3)) (result (ref null $type$2))
+ ;; CHECK: (func $quux (type $type$2) (param $0 (ref null $f3)) (result (ref null $type$2))
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
(func $quux (type 4)