summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/passes/inlining_all-features.txt15
-rw-r--r--test/passes/inlining_all-features.wast13
-rw-r--r--test/passes/optimize-instructions_all-features.txt7
-rw-r--r--test/passes/optimize-instructions_all-features.wast10
-rw-r--r--test/passes/simplify-globals_all-features_fuzz-exec.txt20
-rw-r--r--test/passes/simplify-globals_all-features_fuzz-exec.wast14
-rw-r--r--test/passes/translate-to-fuzz_all-features_metrics_noprint.txt42
-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.wast20
-rw-r--r--test/typed-function-references.wast.from-wast30
-rw-r--r--test/typed-function-references.wast.fromBinary60
-rw-r--r--test/typed-function-references.wast.fromBinary.noDebugInfo60
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)
+ )
)