summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/heap-types.wast28
-rw-r--r--test/heap-types.wast.from-wast17
-rw-r--r--test/heap-types.wast.fromBinary18
-rw-r--r--test/heap-types.wast.fromBinary.noDebugInfo18
-rw-r--r--test/passes/optimize-instructions_all-features.txt2
-rw-r--r--test/typed-function-references.wast.from-wast14
-rw-r--r--test/typed-function-references.wast.fromBinary14
-rw-r--r--test/typed-function-references.wast.fromBinary.noDebugInfo14
8 files changed, 103 insertions, 22 deletions
diff --git a/test/heap-types.wast b/test/heap-types.wast
new file mode 100644
index 000000000..aaeae3115
--- /dev/null
+++ b/test/heap-types.wast
@@ -0,0 +1,28 @@
+;; Test that we can roundtrip struct and array types
+(module
+ (type $struct.A (struct
+ i32
+ (field f32)
+ (field $named f64)
+ ))
+ (type $struct.B (struct
+ (field (mut i64))
+ (field (ref $struct.A))
+ (field (mut (ref $struct.A)))
+ ))
+ (type $struct.C (struct
+ (field $named-mut (mut f32))
+ ))
+
+ (type $vector (array (mut f64)))
+ (type $matrix (array (ref $vector)))
+
+ (func "foo" (param $x (ref $struct.A)) (result (ref $struct.B))
+ (local (ref null $struct.A))
+ (local (ref null $struct.B))
+ (local (ref null $struct.C))
+ (local (ref null $vector))
+ (local (ref null $matrix))
+ (unreachable)
+ )
+)
diff --git a/test/heap-types.wast.from-wast b/test/heap-types.wast.from-wast
new file mode 100644
index 000000000..0da7e5e90
--- /dev/null
+++ b/test/heap-types.wast.from-wast
@@ -0,0 +1,17 @@
+(module
+ (type ${i32_f32_f64} (struct (field i32) (field f32) (field f64)))
+ (type $[mut:f64] (array (mut f64)))
+ (type ${mut:f32} (struct (field (mut f32))))
+ (type ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|} (struct (field (mut i64)) (field (ref null ${i32_f32_f64})) (field (mut (ref null ${i32_f32_f64})))))
+ (type $[ref?|[mut:f64]|] (array (ref null $[mut:f64])))
+ (type $ref?|{i32_f32_f64}|_=>_ref?|{mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}| (func (param (ref null ${i32_f32_f64})) (result (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))))
+ (export "foo" (func $0))
+ (func $0 (param $x (ref null ${i32_f32_f64})) (result (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))
+ (local $1 (ref null ${i32_f32_f64}))
+ (local $2 (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))
+ (local $3 (ref null ${mut:f32}))
+ (local $4 (ref null $[mut:f64]))
+ (local $5 (ref null $[ref?|[mut:f64]|]))
+ (unreachable)
+ )
+)
diff --git a/test/heap-types.wast.fromBinary b/test/heap-types.wast.fromBinary
new file mode 100644
index 000000000..e83d6bbb4
--- /dev/null
+++ b/test/heap-types.wast.fromBinary
@@ -0,0 +1,18 @@
+(module
+ (type ${i32_f32_f64} (struct (field i32) (field f32) (field f64)))
+ (type $[mut:f64] (array (mut f64)))
+ (type ${mut:f32} (struct (field (mut f32))))
+ (type ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|} (struct (field (mut i64)) (field (ref null ${i32_f32_f64})) (field (mut (ref null ${i32_f32_f64})))))
+ (type $[ref?|[mut:f64]|] (array (ref null $[mut:f64])))
+ (type $ref?|{i32_f32_f64}|_=>_ref?|{mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}| (func (param (ref null ${i32_f32_f64})) (result (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))))
+ (export "foo" (func $0))
+ (func $0 (param $x (ref null ${i32_f32_f64})) (result (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))
+ (local $1 (ref null ${i32_f32_f64}))
+ (local $2 (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))
+ (local $3 (ref null ${mut:f32}))
+ (local $4 (ref null $[ref?|[mut:f64]|]))
+ (local $5 (ref null $[mut:f64]))
+ (unreachable)
+ )
+)
+
diff --git a/test/heap-types.wast.fromBinary.noDebugInfo b/test/heap-types.wast.fromBinary.noDebugInfo
new file mode 100644
index 000000000..b19152b8e
--- /dev/null
+++ b/test/heap-types.wast.fromBinary.noDebugInfo
@@ -0,0 +1,18 @@
+(module
+ (type ${i32_f32_f64} (struct (field i32) (field f32) (field f64)))
+ (type $[mut:f64] (array (mut f64)))
+ (type ${mut:f32} (struct (field (mut f32))))
+ (type ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|} (struct (field (mut i64)) (field (ref null ${i32_f32_f64})) (field (mut (ref null ${i32_f32_f64})))))
+ (type $[ref?|[mut:f64]|] (array (ref null $[mut:f64])))
+ (type $ref?|{i32_f32_f64}|_=>_ref?|{mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}| (func (param (ref null ${i32_f32_f64})) (result (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))))
+ (export "foo" (func $0))
+ (func $0 (param $0 (ref null ${i32_f32_f64})) (result (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))
+ (local $1 (ref null ${i32_f32_f64}))
+ (local $2 (ref null ${mut:i64_ref?|{i32_f32_f64}|_mut:ref?|{i32_f32_f64}|}))
+ (local $3 (ref null ${mut:f32}))
+ (local $4 (ref null $[ref?|[mut:f64]|]))
+ (local $5 (ref null $[mut:f64]))
+ (unreachable)
+ )
+)
+
diff --git a/test/passes/optimize-instructions_all-features.txt b/test/passes/optimize-instructions_all-features.txt
index 677b220cb..d00dd2b74 100644
--- a/test/passes/optimize-instructions_all-features.txt
+++ b/test/passes/optimize-instructions_all-features.txt
@@ -5700,7 +5700,7 @@
)
(module
(type $i32_=>_i32 (func (param i32) (result i32)))
- (type $ref_null[i32_->_i32]_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
+ (type $ref?|i32_->_i32|_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
(func $call_from-param (param $f (ref null $i32_=>_i32)) (result i32)
(unreachable)
)
diff --git a/test/typed-function-references.wast.from-wast b/test/typed-function-references.wast.from-wast
index 794f3acec..e7467b6cd 100644
--- a/test/typed-function-references.wast.from-wast
+++ b/test/typed-function-references.wast.from-wast
@@ -6,11 +6,11 @@
(type $none_=>_i32 (func (result i32)))
(type $none_=>_anyref (func (result anyref)))
(type $none_=>_anyref_f32_anyref_f32 (func (result anyref f32 anyref f32)))
- (type $ref_null[i32_->_i32]_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
- (type $none_=>_i32_ref_null[_->_anyref_f32_anyref_f32]_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)))
- (type $none_=>_ref_null[i32_i32_i32_i32_i32_->_] (func (result (ref null $i32_i32_i32_i32_i32_=>_none))))
- (type $f64_=>_ref_null[_->_eqref] (func (param f64) (result (ref null $none_=>_eqref))))
- (type $none_=>_ref_null[_->_ref_null[i32_i32_i32_i32_i32_->_]] (func (result (ref null $none_=>_ref_null[i32_i32_i32_i32_i32_->_]))))
+ (type $ref?|i32_->_i32|_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
+ (type $none_=>_i32_ref?|none_->_anyref_f32_anyref_f32|_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)))
+ (type $none_=>_ref?|i32_i32_i32_i32_i32_->_none| (func (result (ref null $i32_i32_i32_i32_i32_=>_none))))
+ (type $f64_=>_ref?|none_->_eqref| (func (param f64) (result (ref null $none_=>_eqref))))
+ (type $none_=>_ref?|none_->_ref?|i32_i32_i32_i32_i32_->_none|| (func (result (ref null $none_=>_ref?|i32_i32_i32_i32_i32_->_none|))))
(func $call-ref
(call_ref
(ref.func $call-ref)
@@ -49,7 +49,7 @@
(local.get $f)
)
)
- (func $ref-in-sig (param $0 f64) (result (ref null (func (result eqref))))
+ (func $ref-in-sig (param $0 f64) (result (ref null $none_=>_eqref))
(ref.null (func (result eqref)))
)
(func $type-only-in-tuple-local
@@ -63,7 +63,7 @@
)
)
)
- (func $nested-type-only-there (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32)))))))
+ (func $nested-type-only-there (result (ref null $none_=>_ref?|i32_i32_i32_i32_i32_->_none|))
(unreachable)
)
)
diff --git a/test/typed-function-references.wast.fromBinary b/test/typed-function-references.wast.fromBinary
index 629f8191f..e05e97757 100644
--- a/test/typed-function-references.wast.fromBinary
+++ b/test/typed-function-references.wast.fromBinary
@@ -6,11 +6,11 @@
(type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32)))
(type $none_=>_i32 (func (result i32)))
(type $none_=>_anyref (func (result anyref)))
- (type $ref_null[i32_->_i32]_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
- (type $none_=>_i32_ref_null[_->_anyref_f32_anyref_f32]_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)))
- (type $none_=>_ref_null[i32_i32_i32_i32_i32_->_] (func (result (ref null $i32_i32_i32_i32_i32_=>_none))))
- (type $f64_=>_ref_null[_->_eqref] (func (param f64) (result (ref null $none_=>_eqref))))
- (type $none_=>_ref_null[_->_ref_null[i32_i32_i32_i32_i32_->_]] (func (result (ref null $none_=>_ref_null[i32_i32_i32_i32_i32_->_]))))
+ (type $ref?|i32_->_i32|_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
+ (type $none_=>_i32_ref?|none_->_anyref_f32_anyref_f32|_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)))
+ (type $none_=>_ref?|i32_i32_i32_i32_i32_->_none| (func (result (ref null $i32_i32_i32_i32_i32_=>_none))))
+ (type $f64_=>_ref?|none_->_eqref| (func (param f64) (result (ref null $none_=>_eqref))))
+ (type $none_=>_ref?|none_->_ref?|i32_i32_i32_i32_i32_->_none|| (func (result (ref null $none_=>_ref?|i32_i32_i32_i32_i32_->_none|))))
(func $call-ref
(call_ref
(ref.func $call-ref)
@@ -49,7 +49,7 @@
(local.get $f)
)
)
- (func $ref-in-sig (param $0 f64) (result (ref null (func (result eqref))))
+ (func $ref-in-sig (param $0 f64) (result (ref null $none_=>_eqref))
(ref.null (func (result eqref)))
)
(func $type-only-in-tuple-local
@@ -93,7 +93,7 @@
)
)
)
- (func $nested-type-only-there (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32)))))))
+ (func $nested-type-only-there (result (ref null $none_=>_ref?|i32_i32_i32_i32_i32_->_none|))
(unreachable)
)
)
diff --git a/test/typed-function-references.wast.fromBinary.noDebugInfo b/test/typed-function-references.wast.fromBinary.noDebugInfo
index 26586d8e8..0e2b6ca3d 100644
--- a/test/typed-function-references.wast.fromBinary.noDebugInfo
+++ b/test/typed-function-references.wast.fromBinary.noDebugInfo
@@ -6,11 +6,11 @@
(type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32)))
(type $none_=>_i32 (func (result i32)))
(type $none_=>_anyref (func (result anyref)))
- (type $ref_null[i32_->_i32]_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
- (type $none_=>_i32_ref_null[_->_anyref_f32_anyref_f32]_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)))
- (type $none_=>_ref_null[i32_i32_i32_i32_i32_->_] (func (result (ref null $i32_i32_i32_i32_i32_=>_none))))
- (type $f64_=>_ref_null[_->_eqref] (func (param f64) (result (ref null $none_=>_eqref))))
- (type $none_=>_ref_null[_->_ref_null[i32_i32_i32_i32_i32_->_]] (func (result (ref null $none_=>_ref_null[i32_i32_i32_i32_i32_->_]))))
+ (type $ref?|i32_->_i32|_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32)))
+ (type $none_=>_i32_ref?|none_->_anyref_f32_anyref_f32|_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)))
+ (type $none_=>_ref?|i32_i32_i32_i32_i32_->_none| (func (result (ref null $i32_i32_i32_i32_i32_=>_none))))
+ (type $f64_=>_ref?|none_->_eqref| (func (param f64) (result (ref null $none_=>_eqref))))
+ (type $none_=>_ref?|none_->_ref?|i32_i32_i32_i32_i32_->_none|| (func (result (ref null $none_=>_ref?|i32_i32_i32_i32_i32_->_none|))))
(func $0
(call_ref
(ref.func $0)
@@ -49,7 +49,7 @@
(local.get $0)
)
)
- (func $6 (param $0 f64) (result (ref null (func (result eqref))))
+ (func $6 (param $0 f64) (result (ref null $none_=>_eqref))
(ref.null (func (result eqref)))
)
(func $7
@@ -93,7 +93,7 @@
)
)
)
- (func $9 (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32)))))))
+ (func $9 (result (ref null $none_=>_ref?|i32_i32_i32_i32_i32_->_none|))
(unreachable)
)
)