diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/passes/inlining_all-features.txt | 15 | ||||
-rw-r--r-- | test/passes/inlining_all-features.wast | 13 | ||||
-rw-r--r-- | test/passes/optimize-instructions_all-features.txt | 7 | ||||
-rw-r--r-- | test/passes/optimize-instructions_all-features.wast | 10 | ||||
-rw-r--r-- | test/passes/simplify-globals_all-features_fuzz-exec.txt | 20 | ||||
-rw-r--r-- | test/passes/simplify-globals_all-features_fuzz-exec.wast | 14 | ||||
-rw-r--r-- | test/passes/translate-to-fuzz_all-features_metrics_noprint.txt | 42 | ||||
-rw-r--r-- | test/passes/translate-to-fuzz_all-features_metrics_noprint.wast (renamed from test/passes/translate-to-fuzz_all-features.wast) | 0 | ||||
-rw-r--r-- | test/typed-function-references.wast | 20 | ||||
-rw-r--r-- | test/typed-function-references.wast.from-wast | 30 | ||||
-rw-r--r-- | test/typed-function-references.wast.fromBinary | 60 | ||||
-rw-r--r-- | test/typed-function-references.wast.fromBinary.noDebugInfo | 60 |
12 files changed, 282 insertions, 9 deletions
diff --git a/test/passes/inlining_all-features.txt b/test/passes/inlining_all-features.txt index e909239d2..85b5a03b8 100644 --- a/test/passes/inlining_all-features.txt +++ b/test/passes/inlining_all-features.txt @@ -71,3 +71,18 @@ ) ) ) +(module + (type $none_=>_none (func)) + (export "func_36_invoker" (func $1)) + (func $1 + (block $__inlined_func$0 + (block + (call_ref + (ref.null (func)) + ) + (br $__inlined_func$0) + ) + (br $__inlined_func$0) + ) + ) +) diff --git a/test/passes/inlining_all-features.wast b/test/passes/inlining_all-features.wast index 60093cb63..187673b5c 100644 --- a/test/passes/inlining_all-features.wast +++ b/test/passes/inlining_all-features.wast @@ -58,3 +58,16 @@ (call $0) ) ) +;; inline a return_call_ref +(module + (type $none_=>_none (func)) + (export "func_36_invoker" (func $1)) + (func $0 + (return_call_ref + (ref.null (func)) + ) + ) + (func $1 + (call $0) + ) +) diff --git a/test/passes/optimize-instructions_all-features.txt b/test/passes/optimize-instructions_all-features.txt index e367dc7a0..3b557693d 100644 --- a/test/passes/optimize-instructions_all-features.txt +++ b/test/passes/optimize-instructions_all-features.txt @@ -5698,3 +5698,10 @@ ) ) ) +(module + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $ref_null[i32_->_i32]_=>_i32 (func (param (ref null (func (param i32) (result i32)))) (result i32))) + (func $call_from-param (param $f (ref null (func (param i32) (result i32)))) (result i32) + (unreachable) + ) +) diff --git a/test/passes/optimize-instructions_all-features.wast b/test/passes/optimize-instructions_all-features.wast index 9efd94c22..3b25238c0 100644 --- a/test/passes/optimize-instructions_all-features.wast +++ b/test/passes/optimize-instructions_all-features.wast @@ -6162,3 +6162,13 @@ ) ) ) +;; typed function references +(module + (type $i32-i32 (func (param i32) (result i32))) + ;; this function has a reference parameter. we analyze parameters, and should + ;; not be confused by a type that has no bit size, in particular. this test + ;; just verifies that we do not crash on that. + (func $call_from-param (param $f (ref null $i32-i32)) (result i32) + (unreachable) + ) +) diff --git a/test/passes/simplify-globals_all-features_fuzz-exec.txt b/test/passes/simplify-globals_all-features_fuzz-exec.txt new file mode 100644 index 000000000..03bbff9de --- /dev/null +++ b/test/passes/simplify-globals_all-features_fuzz-exec.txt @@ -0,0 +1,20 @@ +[fuzz-exec] calling export +[fuzz-exec] note result: export => funcref(0) +(module + (type $f32_i31ref_i64_f64_funcref_=>_none (func (param f32 i31ref i64 f64 funcref))) + (type $none_=>_funcref (func (result funcref))) + (global $global$0 (mut funcref) (ref.null func)) + (export "export" (func $1)) + (func $0 (param $0 f32) (param $1 i31ref) (param $2 i64) (param $3 f64) (param $4 funcref) + (nop) + ) + (func $1 (result funcref) + (global.set $global$0 + (ref.func $0) + ) + (ref.func $0) + ) +) +[fuzz-exec] calling export +[fuzz-exec] note result: export => funcref(0) +[fuzz-exec] comparing export diff --git a/test/passes/simplify-globals_all-features_fuzz-exec.wast b/test/passes/simplify-globals_all-features_fuzz-exec.wast new file mode 100644 index 000000000..ff2200ea9 --- /dev/null +++ b/test/passes/simplify-globals_all-features_fuzz-exec.wast @@ -0,0 +1,14 @@ +(module + (global $global$0 (mut funcref) (ref.null func)) + (func $0 (param $0 f32) (param $1 i31ref) (param $2 i64) (param $3 f64) (param $4 funcref) + (nop) + ) + (func "export" (result funcref) + ;; this set's value will be applied to the get right after it. we should carry + ;; over the specific typed function reference type properly while doing so. + (global.set $global$0 + (ref.func $0) + ) + (global.get $global$0) + ) +) diff --git a/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt b/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt new file mode 100644 index 000000000..0a21ed52b --- /dev/null +++ b/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt @@ -0,0 +1,42 @@ +total + [events] : 1 + [exports] : 3 + [funcs] : 2 + [globals] : 6 + [imports] : 6 + [memory-data] : 22 + [table-data] : 0 + [total] : 592 + [vars] : 1 + atomic.cmpxchg : 1 + atomic.fence : 3 + binary : 58 + block : 84 + break : 26 + call : 4 + call_ref : 1 + const : 149 + data.drop : 1 + drop : 3 + global.get : 29 + global.set : 17 + i31.get : 2 + i31.new : 7 + if : 35 + load : 15 + local.get : 10 + local.set : 14 + loop : 13 + memory.init : 1 + nop : 36 + ref.eq : 2 + ref.func : 2 + ref.is_null : 3 + ref.null : 8 + return : 14 + select : 2 + simd_extract : 2 + store : 8 + tuple.extract : 5 + tuple.make : 4 + unary : 33 diff --git a/test/passes/translate-to-fuzz_all-features.wast b/test/passes/translate-to-fuzz_all-features_metrics_noprint.wast index ae1761899..ae1761899 100644 --- a/test/passes/translate-to-fuzz_all-features.wast +++ b/test/passes/translate-to-fuzz_all-features_metrics_noprint.wast diff --git a/test/typed-function-references.wast b/test/typed-function-references.wast index 59346f615..47fd789d0 100644 --- a/test/typed-function-references.wast +++ b/test/typed-function-references.wast @@ -1,4 +1,7 @@ (module + ;; inline ref type in result + (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null (func (result eqref)))))) + (type $i32-i32 (func (param i32) (result i32))) (func $call-ref @@ -21,4 +24,21 @@ (local.set $f (ref.func $call-ref-more)) (call_ref (i32.const 42) (local.get $f)) ) + (func $ref-in-sig (param $0 f64) (result (ref null (func (result eqref)))) + ;; ref.null of an inline type + (ref.null (func (result eqref))) + ) + (func $type-only-in-tuple-local + (local $x (i32 (ref null (func (result anyref))) f64)) + ) + (func $type-only-in-tuple-block + (drop + (block (result i32 (ref null (func (result anyref f32 anyref f32))) f64) + (unreachable) + ) + ) + ) + (func $nested-type-only-there (result (ref (func (result (ref (func (param i32 i32 i32 i32 i32))))))) + (unreachable) + ) ) diff --git a/test/typed-function-references.wast.from-wast b/test/typed-function-references.wast.from-wast index c098f351d..c528d7125 100644 --- a/test/typed-function-references.wast.from-wast +++ b/test/typed-function-references.wast.from-wast @@ -1,9 +1,16 @@ (module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_eqref (func (result eqref))) + (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $ref_null<i32_->_i32>_=>_i32 (func (param (ref null (func (param i32) (result i32)))) (result i32))) - (type $ref<i32_->_i32>_=>_i32 (func (param (ref (func (param i32) (result i32)))) (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 (func (param i32) (result i32)))) (result i32))) + (type $none_=>_i32_ref_null[_->_anyref_f32_anyref_f32]_f64 (func (result i32 (ref null (func (result anyref f32 anyref f32))) f64))) + (type $none_=>_ref_null[i32_i32_i32_i32_i32_->_] (func (result (ref null (func (param i32 i32 i32 i32 i32)))))) + (type $f64_=>_ref_null[_->_eqref] (func (param f64) (result (ref null (func (result eqref)))))) + (type $none_=>_ref_null[_->_ref_null[i32_i32_i32_i32_i32_->_]] (func (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32))))))))) (func $call-ref (call_ref (ref.func $call-ref) @@ -20,7 +27,7 @@ (ref.func $call-ref-more) ) ) - (func $call_from-param (param $f (ref (func (param i32) (result i32)))) (result i32) + (func $call_from-param (param $f (ref null (func (param i32) (result i32)))) (result i32) (call_ref (i32.const 42) (local.get $f) @@ -42,4 +49,21 @@ (local.get $f) ) ) + (func $ref-in-sig (param $0 f64) (result (ref null (func (result eqref)))) + (ref.null (func (result eqref))) + ) + (func $type-only-in-tuple-local + (local $x (i32 (ref null (func (result anyref))) f64)) + (nop) + ) + (func $type-only-in-tuple-block + (drop + (block $block (result i32 (ref null (func (result anyref f32 anyref f32))) f64) + (unreachable) + ) + ) + ) + (func $nested-type-only-there (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32))))))) + (unreachable) + ) ) diff --git a/test/typed-function-references.wast.fromBinary b/test/typed-function-references.wast.fromBinary index dcabbeaaf..5cb2ff7c6 100644 --- a/test/typed-function-references.wast.fromBinary +++ b/test/typed-function-references.wast.fromBinary @@ -1,9 +1,16 @@ (module (type $none_=>_none (func)) + (type $none_=>_anyref_f32_anyref_f32 (func (result anyref f32 anyref f32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_eqref (func (result eqref))) + (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $ref_null<i32_->_i32>_=>_i32 (func (param (ref null (func (param i32) (result i32)))) (result i32))) - (type $ref<i32_->_i32>_=>_i32 (func (param (ref (func (param i32) (result i32)))) (result i32))) + (type $none_=>_anyref (func (result anyref))) + (type $ref_null[i32_->_i32]_=>_i32 (func (param (ref null (func (param i32) (result i32)))) (result i32))) + (type $none_=>_i32_ref_null[_->_anyref_f32_anyref_f32]_f64 (func (result i32 (ref null (func (result anyref f32 anyref f32))) f64))) + (type $none_=>_ref_null[i32_i32_i32_i32_i32_->_] (func (result (ref null (func (param i32 i32 i32 i32 i32)))))) + (type $f64_=>_ref_null[_->_eqref] (func (param f64) (result (ref null (func (result eqref)))))) + (type $none_=>_ref_null[_->_ref_null[i32_i32_i32_i32_i32_->_]] (func (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32))))))))) (func $call-ref (call_ref (ref.func $call-ref) @@ -20,7 +27,7 @@ (ref.func $call-ref-more) ) ) - (func $call_from-param (param $f (ref (func (param i32) (result i32)))) (result i32) + (func $call_from-param (param $f (ref null (func (param i32) (result i32)))) (result i32) (call_ref (i32.const 42) (local.get $f) @@ -42,5 +49,52 @@ (local.get $f) ) ) + (func $ref-in-sig (param $0 f64) (result (ref null (func (result eqref)))) + (ref.null (func (result eqref))) + ) + (func $type-only-in-tuple-local + (local $x i32) + (local $1 f64) + (local $2 (ref null (func (result anyref)))) + (nop) + ) + (func $type-only-in-tuple-block + (local $0 (i32 (ref null (func (result anyref f32 anyref f32))) f64)) + (local $1 (ref null (func (result anyref f32 anyref f32)))) + (local $2 i32) + (local.set $0 + (block $label$1 (result i32 (ref null (func (result anyref f32 anyref f32))) f64) + (unreachable) + ) + ) + (drop + (block (result i32) + (local.set $2 + (tuple.extract 0 + (local.get $0) + ) + ) + (drop + (block (result (ref null (func (result anyref f32 anyref f32)))) + (local.set $1 + (tuple.extract 1 + (local.get $0) + ) + ) + (drop + (tuple.extract 2 + (local.get $0) + ) + ) + (local.get $1) + ) + ) + (local.get $2) + ) + ) + ) + (func $nested-type-only-there (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32))))))) + (unreachable) + ) ) diff --git a/test/typed-function-references.wast.fromBinary.noDebugInfo b/test/typed-function-references.wast.fromBinary.noDebugInfo index 0808e0c52..be3099efa 100644 --- a/test/typed-function-references.wast.fromBinary.noDebugInfo +++ b/test/typed-function-references.wast.fromBinary.noDebugInfo @@ -1,9 +1,16 @@ (module (type $none_=>_none (func)) + (type $none_=>_anyref_f32_anyref_f32 (func (result anyref f32 anyref f32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_eqref (func (result eqref))) + (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $ref_null<i32_->_i32>_=>_i32 (func (param (ref null (func (param i32) (result i32)))) (result i32))) - (type $ref<i32_->_i32>_=>_i32 (func (param (ref (func (param i32) (result i32)))) (result i32))) + (type $none_=>_anyref (func (result anyref))) + (type $ref_null[i32_->_i32]_=>_i32 (func (param (ref null (func (param i32) (result i32)))) (result i32))) + (type $none_=>_i32_ref_null[_->_anyref_f32_anyref_f32]_f64 (func (result i32 (ref null (func (result anyref f32 anyref f32))) f64))) + (type $none_=>_ref_null[i32_i32_i32_i32_i32_->_] (func (result (ref null (func (param i32 i32 i32 i32 i32)))))) + (type $f64_=>_ref_null[_->_eqref] (func (param f64) (result (ref null (func (result eqref)))))) + (type $none_=>_ref_null[_->_ref_null[i32_i32_i32_i32_i32_->_]] (func (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32))))))))) (func $0 (call_ref (ref.func $0) @@ -20,7 +27,7 @@ (ref.func $2) ) ) - (func $3 (param $0 (ref (func (param i32) (result i32)))) (result i32) + (func $3 (param $0 (ref null (func (param i32) (result i32)))) (result i32) (call_ref (i32.const 42) (local.get $0) @@ -42,5 +49,52 @@ (local.get $0) ) ) + (func $6 (param $0 f64) (result (ref null (func (result eqref)))) + (ref.null (func (result eqref))) + ) + (func $7 + (local $0 i32) + (local $1 f64) + (local $2 (ref null (func (result anyref)))) + (nop) + ) + (func $8 + (local $0 (i32 (ref null (func (result anyref f32 anyref f32))) f64)) + (local $1 (ref null (func (result anyref f32 anyref f32)))) + (local $2 i32) + (local.set $0 + (block $label$1 (result i32 (ref null (func (result anyref f32 anyref f32))) f64) + (unreachable) + ) + ) + (drop + (block (result i32) + (local.set $2 + (tuple.extract 0 + (local.get $0) + ) + ) + (drop + (block (result (ref null (func (result anyref f32 anyref f32)))) + (local.set $1 + (tuple.extract 1 + (local.get $0) + ) + ) + (drop + (tuple.extract 2 + (local.get $0) + ) + ) + (local.get $1) + ) + ) + (local.get $2) + ) + ) + ) + (func $9 (result (ref null (func (result (ref null (func (param i32 i32 i32 i32 i32))))))) + (unreachable) + ) ) |