diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/heap-types.wast | 28 | ||||
-rw-r--r-- | test/heap-types.wast.from-wast | 17 | ||||
-rw-r--r-- | test/heap-types.wast.fromBinary | 18 | ||||
-rw-r--r-- | test/heap-types.wast.fromBinary.noDebugInfo | 18 | ||||
-rw-r--r-- | test/passes/optimize-instructions_all-features.txt | 2 | ||||
-rw-r--r-- | test/typed-function-references.wast.from-wast | 14 | ||||
-rw-r--r-- | test/typed-function-references.wast.fromBinary | 14 | ||||
-rw-r--r-- | test/typed-function-references.wast.fromBinary.noDebugInfo | 14 |
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) ) ) |