From a415db61b14600aa12964664dfcb2df112f91f0f Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 8 Jul 2022 08:06:58 -0700 Subject: [PATCH 1/2] start --- .../types-function-references.wast} | 11 ++ test/typed-function-references.wast.from-wast | 102 -------------- .../typed-function-references.wast.fromBinary | 133 ------------------ ...ion-references.wast.fromBinary.noDebugInfo | 133 ------------------ 4 files changed, 11 insertions(+), 368 deletions(-) rename test/{typed-function-references.wast => lit/types-function-references.wast} (83%) delete mode 100644 test/typed-function-references.wast.from-wast delete mode 100644 test/typed-function-references.wast.fromBinary delete mode 100644 test/typed-function-references.wast.fromBinary.noDebugInfo diff --git a/test/typed-function-references.wast b/test/lit/types-function-references.wast similarity index 83% rename from test/typed-function-references.wast rename to test/lit/types-function-references.wast index 40eae6ebd56..743facd93eb 100644 --- a/test/typed-function-references.wast +++ b/test/lit/types-function-references.wast @@ -1,3 +1,14 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. + +;; RUN: wasm-as %s -all -g -o %t.wasm +;; RUN: wasm-dis %t.wasm -all -o %t.wast +;; RUN: wasm-as %s -all -o %t.nodebug.wasm +;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.nodebug.wast +;; RUN: wasm-opt %t.wast -all -o %t.text.wast -g -S +;; RUN: cat %t.wast | filecheck %s --check-prefix=CHECK-BINARY +;; RUN: cat %t.nodebug.wast | filecheck %s --check-prefix=CHECK-NODEBUG +;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT + (module ;; inline ref type in result (type $_=>_eqref (func (result eqref))) diff --git a/test/typed-function-references.wast.from-wast b/test/typed-function-references.wast.from-wast deleted file mode 100644 index a695e826d69..00000000000 --- a/test/typed-function-references.wast.from-wast +++ /dev/null @@ -1,102 +0,0 @@ -(module - (type $mixed_results (func (result anyref f32 anyref f32))) - (type $none_=>_none (func)) - (type $i32-i32 (func (param i32) (result i32))) - (type $=>eqref (func (result eqref))) - (type $ref|$i32-i32|_=>_i32 (func (param (ref $i32-i32)) (result i32))) - (type $ref?|$i32-i32|_=>_i32 (func (param (ref null $i32-i32)) (result i32))) - (type $none_=>_i32 (func (result i32))) - (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $=>eqref)))) - (type $=>anyref (func (result anyref))) - (type $none_=>_i32_ref?|$mixed_results|_f64 (func (result i32 (ref null $mixed_results) f64))) - (type $ref?|$mixed_results|_=>_none (func (param (ref null $mixed_results)))) - (elem declare func $call-ref $call-ref-more) - (func $call-ref - (call_ref - (ref.func $call-ref) - ) - ) - (func $return-call-ref - (return_call_ref - (ref.func $call-ref) - ) - ) - (func $call-ref-more (param $0 i32) (result i32) - (call_ref - (i32.const 42) - (ref.func $call-ref-more) - ) - ) - (func $call_from-param (param $f (ref $i32-i32)) (result i32) - (call_ref - (i32.const 42) - (local.get $f) - ) - ) - (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) - (call_ref - (i32.const 42) - (local.get $f) - ) - ) - (func $call_from-local-null (result i32) - (local $f (ref null $i32-i32)) - (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 $=>eqref)) - (ref.null $=>eqref) - ) - (func $type-only-in-tuple-local - (local $x (i32 (ref null $=>anyref) f64)) - (nop) - ) - (func $type-only-in-tuple-block - (drop - (block $block (result i32 (ref null $mixed_results) f64) - (unreachable) - ) - ) - ) - (func $ref-types-first - (local $r1 (ref null $mixed_results)) - (local $r2 (ref null $mixed_results)) - (local $i1 i32) - (local $r3 anyref) - (local $i2 i64) - (local $r4 anyref) - (local $i3 i64) - (local $r5 anyref) - (local $r6 funcref) - (nop) - ) - (func $mvp-types-first - (local $i1 i32) - (local $r1 (ref null $mixed_results)) - (local $r2 (ref null $mixed_results)) - (local $r3 anyref) - (local $i2 i64) - (local $r4 anyref) - (local $i3 i64) - (local $r5 anyref) - (local $r6 funcref) - (nop) - ) - (func $mvp-types-first-param (param $r0 (ref null $mixed_results)) - (local $i1 i32) - (local $r1 (ref null $mixed_results)) - (local $r2 (ref null $mixed_results)) - (local $r3 anyref) - (local $i2 i64) - (local $r4 anyref) - (local $i3 i64) - (local $r5 anyref) - (local $r6 funcref) - (nop) - ) -) diff --git a/test/typed-function-references.wast.fromBinary b/test/typed-function-references.wast.fromBinary deleted file mode 100644 index fefe374052f..00000000000 --- a/test/typed-function-references.wast.fromBinary +++ /dev/null @@ -1,133 +0,0 @@ -(module - (type $mixed_results (func (result anyref f32 anyref f32))) - (type $none_=>_none (func)) - (type $i32-i32 (func (param i32) (result i32))) - (type $=>eqref (func (result eqref))) - (type $ref|$i32-i32|_=>_i32 (func (param (ref $i32-i32)) (result i32))) - (type $ref?|$i32-i32|_=>_i32 (func (param (ref null $i32-i32)) (result i32))) - (type $none_=>_i32 (func (result i32))) - (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $=>eqref)))) - (type $=>anyref (func (result anyref))) - (type $none_=>_i32_ref?|$mixed_results|_f64 (func (result i32 (ref null $mixed_results) f64))) - (type $ref?|$mixed_results|_=>_none (func (param (ref null $mixed_results)))) - (elem declare func $call-ref $call-ref-more) - (func $call-ref - (call_ref - (ref.func $call-ref) - ) - ) - (func $return-call-ref - (return_call_ref - (ref.func $call-ref) - ) - ) - (func $call-ref-more (param $0 i32) (result i32) - (call_ref - (i32.const 42) - (ref.func $call-ref-more) - ) - ) - (func $call_from-param (param $f (ref $i32-i32)) (result i32) - (call_ref - (i32.const 42) - (local.get $f) - ) - ) - (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) - (call_ref - (i32.const 42) - (local.get $f) - ) - ) - (func $call_from-local-null (result i32) - (local $f (ref null $i32-i32)) - (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 $=>eqref)) - (ref.null $=>eqref) - ) - (func $type-only-in-tuple-local - (local $x i32) - (local $1 f64) - (local $2 (ref null $=>anyref)) - (nop) - ) - (func $type-only-in-tuple-block - (local $0 (i32 (ref null $mixed_results) f64)) - (local $1 (ref null $mixed_results)) - (local $2 i32) - (local.set $0 - (block $label$1 (result i32 (ref null $mixed_results) f64) - (unreachable) - ) - ) - (drop - (block (result i32) - (local.set $2 - (tuple.extract 0 - (local.get $0) - ) - ) - (drop - (block (result (ref null $mixed_results)) - (local.set $1 - (tuple.extract 1 - (local.get $0) - ) - ) - (drop - (tuple.extract 2 - (local.get $0) - ) - ) - (local.get $1) - ) - ) - (local.get $2) - ) - ) - ) - (func $ref-types-first - (local $r1 (ref null $mixed_results)) - (local $r2 (ref null $mixed_results)) - (local $r3 anyref) - (local $r4 anyref) - (local $r5 anyref) - (local $r6 funcref) - (local $i1 i32) - (local $i2 i64) - (local $i3 i64) - (nop) - ) - (func $mvp-types-first - (local $i1 i32) - (local $i2 i64) - (local $i3 i64) - (local $r1 (ref null $mixed_results)) - (local $r2 (ref null $mixed_results)) - (local $r3 anyref) - (local $r4 anyref) - (local $r5 anyref) - (local $r6 funcref) - (nop) - ) - (func $mvp-types-first-param (param $r0 (ref null $mixed_results)) - (local $i1 i32) - (local $i2 i64) - (local $i3 i64) - (local $r1 (ref null $mixed_results)) - (local $r2 (ref null $mixed_results)) - (local $r3 anyref) - (local $r4 anyref) - (local $r5 anyref) - (local $r6 funcref) - (nop) - ) -) - diff --git a/test/typed-function-references.wast.fromBinary.noDebugInfo b/test/typed-function-references.wast.fromBinary.noDebugInfo deleted file mode 100644 index 9e68efcc1b2..00000000000 --- a/test/typed-function-references.wast.fromBinary.noDebugInfo +++ /dev/null @@ -1,133 +0,0 @@ -(module - (type $none_=>_anyref_f32_anyref_f32 (func (result anyref f32 anyref f32))) - (type $none_=>_none (func)) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_eqref (func (result eqref))) - (type $ref|i32_->_i32|_=>_i32 (func (param (ref $i32_=>_i32)) (result i32))) - (type $ref?|i32_->_i32|_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32))) - (type $none_=>_i32 (func (result i32))) - (type $f64_=>_ref?|none_->_eqref| (func (param f64) (result (ref null $none_=>_eqref)))) - (type $none_=>_anyref (func (result anyref))) - (type $none_=>_i32_ref?|none_->_anyref_f32_anyref_f32|_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64))) - (type $ref?|none_->_anyref_f32_anyref_f32|_=>_none (func (param (ref null $none_=>_anyref_f32_anyref_f32)))) - (elem declare func $0 $2) - (func $0 - (call_ref - (ref.func $0) - ) - ) - (func $1 - (return_call_ref - (ref.func $0) - ) - ) - (func $2 (param $0 i32) (result i32) - (call_ref - (i32.const 42) - (ref.func $2) - ) - ) - (func $3 (param $0 (ref $i32_=>_i32)) (result i32) - (call_ref - (i32.const 42) - (local.get $0) - ) - ) - (func $4 (param $0 (ref null $i32_=>_i32)) (result i32) - (call_ref - (i32.const 42) - (local.get $0) - ) - ) - (func $5 (result i32) - (local $0 (ref null $i32_=>_i32)) - (local.set $0 - (ref.func $2) - ) - (call_ref - (i32.const 42) - (local.get $0) - ) - ) - (func $6 (param $0 f64) (result (ref null $none_=>_eqref)) - (ref.null $none_=>_eqref) - ) - (func $7 - (local $0 i32) - (local $1 f64) - (local $2 (ref null $none_=>_anyref)) - (nop) - ) - (func $8 - (local $0 (i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)) - (local $1 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $2 i32) - (local.set $0 - (block $label$1 (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64) - (unreachable) - ) - ) - (drop - (block (result i32) - (local.set $2 - (tuple.extract 0 - (local.get $0) - ) - ) - (drop - (block (result (ref null $none_=>_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 - (local $0 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $1 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $2 anyref) - (local $3 anyref) - (local $4 anyref) - (local $5 funcref) - (local $6 i32) - (local $7 i64) - (local $8 i64) - (nop) - ) - (func $10 - (local $0 i32) - (local $1 i64) - (local $2 i64) - (local $3 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $4 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $5 anyref) - (local $6 anyref) - (local $7 anyref) - (local $8 funcref) - (nop) - ) - (func $11 (param $0 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $1 i32) - (local $2 i64) - (local $3 i64) - (local $4 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $5 (ref null $none_=>_anyref_f32_anyref_f32)) - (local $6 anyref) - (local $7 anyref) - (local $8 anyref) - (local $9 funcref) - (nop) - ) -) - From 390721c86ab452ed1700b9c8fbc3650b3cae19b0 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 8 Jul 2022 08:16:38 -0700 Subject: [PATCH 2/2] update --- test/lit/types-function-references.wast | 433 ++++++++++++++++++++++++ 1 file changed, 433 insertions(+) diff --git a/test/lit/types-function-references.wast b/test/lit/types-function-references.wast index 743facd93eb..db465acea3b 100644 --- a/test/lit/types-function-references.wast +++ b/test/lit/types-function-references.wast @@ -12,39 +12,247 @@ (module ;; inline ref type in result (type $_=>_eqref (func (result eqref))) + ;; CHECK-BINARY: (type $mixed_results (func (result anyref f32 anyref f32))) + + ;; CHECK-BINARY: (type $none_=>_none (func)) + + ;; CHECK-BINARY: (type $i32-i32 (func (param i32) (result i32))) + + ;; CHECK-BINARY: (type $=>eqref (func (result eqref))) + + ;; CHECK-BINARY: (type $ref|$i32-i32|_=>_i32 (func (param (ref $i32-i32)) (result i32))) + + ;; CHECK-BINARY: (type $ref?|$i32-i32|_=>_i32 (func (param (ref null $i32-i32)) (result i32))) + + ;; CHECK-BINARY: (type $none_=>_i32 (func (result i32))) + + ;; CHECK-BINARY: (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $=>eqref)))) + ;; CHECK-TEXT: (type $mixed_results (func (result anyref f32 anyref f32))) + + ;; CHECK-TEXT: (type $none_=>_none (func)) + + ;; CHECK-TEXT: (type $i32-i32 (func (param i32) (result i32))) + + ;; CHECK-TEXT: (type $=>eqref (func (result eqref))) + + ;; CHECK-TEXT: (type $ref|$i32-i32|_=>_i32 (func (param (ref $i32-i32)) (result i32))) + + ;; CHECK-TEXT: (type $ref?|$i32-i32|_=>_i32 (func (param (ref null $i32-i32)) (result i32))) + + ;; CHECK-TEXT: (type $none_=>_i32 (func (result i32))) + + ;; CHECK-TEXT: (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $=>eqref)))) (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $_=>_eqref)))) (type $=>eqref (func (result eqref))) + ;; CHECK-BINARY: (type $=>anyref (func (result anyref))) + ;; CHECK-TEXT: (type $=>anyref (func (result anyref))) (type $=>anyref (func (result anyref))) (type $mixed_results (func (result anyref f32 anyref f32))) (type $i32-i32 (func (param i32) (result i32))) + ;; CHECK-BINARY: (type $none_=>_i32_ref?|$mixed_results|_f64 (func (result i32 (ref null $mixed_results) f64))) + + ;; CHECK-BINARY: (type $ref?|$mixed_results|_=>_none (func (param (ref null $mixed_results)))) + + ;; CHECK-BINARY: (elem declare func $call-ref $call-ref-more) + + ;; CHECK-BINARY: (func $call-ref + ;; CHECK-BINARY-NEXT: (call_ref + ;; CHECK-BINARY-NEXT: (ref.func $call-ref) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (type $none_=>_i32_ref?|$mixed_results|_f64 (func (result i32 (ref null $mixed_results) f64))) + + ;; CHECK-TEXT: (type $ref?|$mixed_results|_=>_none (func (param (ref null $mixed_results)))) + + ;; CHECK-TEXT: (elem declare func $call-ref $call-ref-more) + + ;; CHECK-TEXT: (func $call-ref + ;; CHECK-TEXT-NEXT: (call_ref + ;; CHECK-TEXT-NEXT: (ref.func $call-ref) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) (func $call-ref (call_ref (ref.func $call-ref)) ) + ;; CHECK-BINARY: (func $return-call-ref + ;; CHECK-BINARY-NEXT: (return_call_ref + ;; CHECK-BINARY-NEXT: (ref.func $call-ref) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $return-call-ref + ;; CHECK-TEXT-NEXT: (return_call_ref + ;; CHECK-TEXT-NEXT: (ref.func $call-ref) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) (func $return-call-ref (return_call_ref (ref.func $call-ref)) ) + ;; CHECK-BINARY: (func $call-ref-more (param $0 i32) (result i32) + ;; CHECK-BINARY-NEXT: (call_ref + ;; CHECK-BINARY-NEXT: (i32.const 42) + ;; CHECK-BINARY-NEXT: (ref.func $call-ref-more) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $call-ref-more (param $0 i32) (result i32) + ;; CHECK-TEXT-NEXT: (call_ref + ;; CHECK-TEXT-NEXT: (i32.const 42) + ;; CHECK-TEXT-NEXT: (ref.func $call-ref-more) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) (func $call-ref-more (param i32) (result i32) (call_ref (i32.const 42) (ref.func $call-ref-more)) ) + ;; CHECK-BINARY: (func $call_from-param (param $f (ref $i32-i32)) (result i32) + ;; CHECK-BINARY-NEXT: (call_ref + ;; CHECK-BINARY-NEXT: (i32.const 42) + ;; CHECK-BINARY-NEXT: (local.get $f) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $call_from-param (param $f (ref $i32-i32)) (result i32) + ;; CHECK-TEXT-NEXT: (call_ref + ;; CHECK-TEXT-NEXT: (i32.const 42) + ;; CHECK-TEXT-NEXT: (local.get $f) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) (func $call_from-param (param $f (ref $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f)) ) + ;; CHECK-BINARY: (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) + ;; CHECK-BINARY-NEXT: (call_ref + ;; CHECK-BINARY-NEXT: (i32.const 42) + ;; CHECK-BINARY-NEXT: (local.get $f) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) + ;; CHECK-TEXT-NEXT: (call_ref + ;; CHECK-TEXT-NEXT: (i32.const 42) + ;; CHECK-TEXT-NEXT: (local.get $f) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f)) ) + ;; CHECK-BINARY: (func $call_from-local-null (result i32) + ;; CHECK-BINARY-NEXT: (local $f (ref null $i32-i32)) + ;; CHECK-BINARY-NEXT: (local.set $f + ;; CHECK-BINARY-NEXT: (ref.func $call-ref-more) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: (call_ref + ;; CHECK-BINARY-NEXT: (i32.const 42) + ;; CHECK-BINARY-NEXT: (local.get $f) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $call_from-local-null (result i32) + ;; CHECK-TEXT-NEXT: (local $f (ref null $i32-i32)) + ;; CHECK-TEXT-NEXT: (local.set $f + ;; CHECK-TEXT-NEXT: (ref.func $call-ref-more) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (call_ref + ;; CHECK-TEXT-NEXT: (i32.const 42) + ;; CHECK-TEXT-NEXT: (local.get $f) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) (func $call_from-local-null (result i32) (local $f (ref null $i32-i32)) (local.set $f (ref.func $call-ref-more)) (call_ref (i32.const 42) (local.get $f)) ) + ;; CHECK-BINARY: (func $ref-in-sig (param $0 f64) (result (ref null $=>eqref)) + ;; CHECK-BINARY-NEXT: (ref.null $=>eqref) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $ref-in-sig (param $0 f64) (result (ref null $=>eqref)) + ;; CHECK-TEXT-NEXT: (ref.null $=>eqref) + ;; CHECK-TEXT-NEXT: ) (func $ref-in-sig (param $0 f64) (result (ref null $=>eqref)) (ref.null $=>eqref) ) + ;; CHECK-BINARY: (func $type-only-in-tuple-local + ;; CHECK-BINARY-NEXT: (local $x i32) + ;; CHECK-BINARY-NEXT: (local $1 f64) + ;; CHECK-BINARY-NEXT: (local $2 (ref null $=>anyref)) + ;; CHECK-BINARY-NEXT: (nop) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $type-only-in-tuple-local + ;; CHECK-TEXT-NEXT: (local $x i32) + ;; CHECK-TEXT-NEXT: (local $1 f64) + ;; CHECK-TEXT-NEXT: (local $2 (ref null $=>anyref)) + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) (func $type-only-in-tuple-local (local $x (i32 (ref null $=>anyref) f64)) ) + ;; CHECK-BINARY: (func $type-only-in-tuple-block + ;; CHECK-BINARY-NEXT: (local $0 (i32 (ref null $mixed_results) f64)) + ;; CHECK-BINARY-NEXT: (local $1 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $2 i32) + ;; CHECK-BINARY-NEXT: (local.set $0 + ;; CHECK-BINARY-NEXT: (block $label$1 (result i32 (ref null $mixed_results) f64) + ;; CHECK-BINARY-NEXT: (unreachable) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: (drop + ;; CHECK-BINARY-NEXT: (block (result i32) + ;; CHECK-BINARY-NEXT: (local.set $2 + ;; CHECK-BINARY-NEXT: (tuple.extract 0 + ;; CHECK-BINARY-NEXT: (local.get $0) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: (drop + ;; CHECK-BINARY-NEXT: (block (result (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local.set $1 + ;; CHECK-BINARY-NEXT: (tuple.extract 1 + ;; CHECK-BINARY-NEXT: (local.get $0) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: (drop + ;; CHECK-BINARY-NEXT: (tuple.extract 2 + ;; CHECK-BINARY-NEXT: (local.get $0) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: (local.get $1) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: (local.get $2) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $type-only-in-tuple-block + ;; CHECK-TEXT-NEXT: (local $0 (i32 (ref null $mixed_results) f64)) + ;; CHECK-TEXT-NEXT: (local $1 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $2 i32) + ;; CHECK-TEXT-NEXT: (local.set $0 + ;; CHECK-TEXT-NEXT: (block $label$1 (result i32 (ref null $mixed_results) f64) + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (drop + ;; CHECK-TEXT-NEXT: (block $block (result i32) + ;; CHECK-TEXT-NEXT: (local.set $2 + ;; CHECK-TEXT-NEXT: (tuple.extract 0 + ;; CHECK-TEXT-NEXT: (local.get $0) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (drop + ;; CHECK-TEXT-NEXT: (block $block0 (result (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local.set $1 + ;; CHECK-TEXT-NEXT: (tuple.extract 1 + ;; CHECK-TEXT-NEXT: (local.get $0) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (drop + ;; CHECK-TEXT-NEXT: (tuple.extract 2 + ;; CHECK-TEXT-NEXT: (local.get $0) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (local.get $1) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (local.get $2) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) (func $type-only-in-tuple-block (drop (block (result i32 (ref null $mixed_results) f64) @@ -52,6 +260,30 @@ ) ) ) + ;; CHECK-BINARY: (func $ref-types-first + ;; CHECK-BINARY-NEXT: (local $r1 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $r2 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $r3 anyref) + ;; CHECK-BINARY-NEXT: (local $r4 anyref) + ;; CHECK-BINARY-NEXT: (local $r5 anyref) + ;; CHECK-BINARY-NEXT: (local $r6 funcref) + ;; CHECK-BINARY-NEXT: (local $i1 i32) + ;; CHECK-BINARY-NEXT: (local $i2 i64) + ;; CHECK-BINARY-NEXT: (local $i3 i64) + ;; CHECK-BINARY-NEXT: (nop) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $ref-types-first + ;; CHECK-TEXT-NEXT: (local $r1 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $r2 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $r3 anyref) + ;; CHECK-TEXT-NEXT: (local $r4 anyref) + ;; CHECK-TEXT-NEXT: (local $r5 anyref) + ;; CHECK-TEXT-NEXT: (local $r6 funcref) + ;; CHECK-TEXT-NEXT: (local $i1 i32) + ;; CHECK-TEXT-NEXT: (local $i2 i64) + ;; CHECK-TEXT-NEXT: (local $i3 i64) + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) (func $ref-types-first ;; 6 reference types and 3 MVP types. The binary format should emit all the ;; reference types first since a reference type appears first. In addition, @@ -67,6 +299,30 @@ (local $r5 anyref) (local $r6 funcref) ) + ;; CHECK-BINARY: (func $mvp-types-first + ;; CHECK-BINARY-NEXT: (local $i1 i32) + ;; CHECK-BINARY-NEXT: (local $i2 i64) + ;; CHECK-BINARY-NEXT: (local $i3 i64) + ;; CHECK-BINARY-NEXT: (local $r1 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $r2 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $r3 anyref) + ;; CHECK-BINARY-NEXT: (local $r4 anyref) + ;; CHECK-BINARY-NEXT: (local $r5 anyref) + ;; CHECK-BINARY-NEXT: (local $r6 funcref) + ;; CHECK-BINARY-NEXT: (nop) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $mvp-types-first + ;; CHECK-TEXT-NEXT: (local $i1 i32) + ;; CHECK-TEXT-NEXT: (local $i2 i64) + ;; CHECK-TEXT-NEXT: (local $i3 i64) + ;; CHECK-TEXT-NEXT: (local $r1 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $r2 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $r3 anyref) + ;; CHECK-TEXT-NEXT: (local $r4 anyref) + ;; CHECK-TEXT-NEXT: (local $r5 anyref) + ;; CHECK-TEXT-NEXT: (local $r6 funcref) + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) (func $mvp-types-first ;; Reversed from before, now an MVP type appears first, so they should all ;; be before reference types in the binary format. @@ -80,6 +336,30 @@ (local $r5 anyref) (local $r6 funcref) ) + ;; CHECK-BINARY: (func $mvp-types-first-param (param $r0 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $i1 i32) + ;; CHECK-BINARY-NEXT: (local $i2 i64) + ;; CHECK-BINARY-NEXT: (local $i3 i64) + ;; CHECK-BINARY-NEXT: (local $r1 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $r2 (ref null $mixed_results)) + ;; CHECK-BINARY-NEXT: (local $r3 anyref) + ;; CHECK-BINARY-NEXT: (local $r4 anyref) + ;; CHECK-BINARY-NEXT: (local $r5 anyref) + ;; CHECK-BINARY-NEXT: (local $r6 funcref) + ;; CHECK-BINARY-NEXT: (nop) + ;; CHECK-BINARY-NEXT: ) + ;; CHECK-TEXT: (func $mvp-types-first-param (param $r0 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $i1 i32) + ;; CHECK-TEXT-NEXT: (local $i2 i64) + ;; CHECK-TEXT-NEXT: (local $i3 i64) + ;; CHECK-TEXT-NEXT: (local $r1 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $r2 (ref null $mixed_results)) + ;; CHECK-TEXT-NEXT: (local $r3 anyref) + ;; CHECK-TEXT-NEXT: (local $r4 anyref) + ;; CHECK-TEXT-NEXT: (local $r5 anyref) + ;; CHECK-TEXT-NEXT: (local $r6 funcref) + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) (func $mvp-types-first-param (param $r0 (ref null $mixed_results)) ;; As before, but now there is a reference type *parameter*. We should ;; ignore that and sort as in the last function. @@ -94,3 +374,156 @@ (local $r6 funcref) ) ) +;; CHECK-NODEBUG: (type $none_=>_anyref_f32_anyref_f32 (func (result anyref f32 anyref f32))) + +;; CHECK-NODEBUG: (type $none_=>_none (func)) + +;; CHECK-NODEBUG: (type $i32_=>_i32 (func (param i32) (result i32))) + +;; CHECK-NODEBUG: (type $none_=>_eqref (func (result eqref))) + +;; CHECK-NODEBUG: (type $ref|i32_->_i32|_=>_i32 (func (param (ref $i32_=>_i32)) (result i32))) + +;; CHECK-NODEBUG: (type $ref?|i32_->_i32|_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32))) + +;; CHECK-NODEBUG: (type $none_=>_i32 (func (result i32))) + +;; CHECK-NODEBUG: (type $f64_=>_ref?|none_->_eqref| (func (param f64) (result (ref null $none_=>_eqref)))) + +;; CHECK-NODEBUG: (type $none_=>_anyref (func (result anyref))) + +;; CHECK-NODEBUG: (type $none_=>_i32_ref?|none_->_anyref_f32_anyref_f32|_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64))) + +;; CHECK-NODEBUG: (type $ref?|none_->_anyref_f32_anyref_f32|_=>_none (func (param (ref null $none_=>_anyref_f32_anyref_f32)))) + +;; CHECK-NODEBUG: (elem declare func $0 $2) + +;; CHECK-NODEBUG: (func $0 +;; CHECK-NODEBUG-NEXT: (call_ref +;; CHECK-NODEBUG-NEXT: (ref.func $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $1 +;; CHECK-NODEBUG-NEXT: (return_call_ref +;; CHECK-NODEBUG-NEXT: (ref.func $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $2 (param $0 i32) (result i32) +;; CHECK-NODEBUG-NEXT: (call_ref +;; CHECK-NODEBUG-NEXT: (i32.const 42) +;; CHECK-NODEBUG-NEXT: (ref.func $2) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $3 (param $0 (ref $i32_=>_i32)) (result i32) +;; CHECK-NODEBUG-NEXT: (call_ref +;; CHECK-NODEBUG-NEXT: (i32.const 42) +;; CHECK-NODEBUG-NEXT: (local.get $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $4 (param $0 (ref null $i32_=>_i32)) (result i32) +;; CHECK-NODEBUG-NEXT: (call_ref +;; CHECK-NODEBUG-NEXT: (i32.const 42) +;; CHECK-NODEBUG-NEXT: (local.get $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $5 (result i32) +;; CHECK-NODEBUG-NEXT: (local $0 (ref null $i32_=>_i32)) +;; CHECK-NODEBUG-NEXT: (local.set $0 +;; CHECK-NODEBUG-NEXT: (ref.func $2) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: (call_ref +;; CHECK-NODEBUG-NEXT: (i32.const 42) +;; CHECK-NODEBUG-NEXT: (local.get $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $6 (param $0 f64) (result (ref null $none_=>_eqref)) +;; CHECK-NODEBUG-NEXT: (ref.null $none_=>_eqref) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $7 +;; CHECK-NODEBUG-NEXT: (local $0 i32) +;; CHECK-NODEBUG-NEXT: (local $1 f64) +;; CHECK-NODEBUG-NEXT: (local $2 (ref null $none_=>_anyref)) +;; CHECK-NODEBUG-NEXT: (nop) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $8 +;; CHECK-NODEBUG-NEXT: (local $0 (i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)) +;; CHECK-NODEBUG-NEXT: (local $1 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $2 i32) +;; CHECK-NODEBUG-NEXT: (local.set $0 +;; CHECK-NODEBUG-NEXT: (block $label$1 (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64) +;; CHECK-NODEBUG-NEXT: (unreachable) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: (drop +;; CHECK-NODEBUG-NEXT: (block (result i32) +;; CHECK-NODEBUG-NEXT: (local.set $2 +;; CHECK-NODEBUG-NEXT: (tuple.extract 0 +;; CHECK-NODEBUG-NEXT: (local.get $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: (drop +;; CHECK-NODEBUG-NEXT: (block (result (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local.set $1 +;; CHECK-NODEBUG-NEXT: (tuple.extract 1 +;; CHECK-NODEBUG-NEXT: (local.get $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: (drop +;; CHECK-NODEBUG-NEXT: (tuple.extract 2 +;; CHECK-NODEBUG-NEXT: (local.get $0) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: (local.get $1) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: (local.get $2) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $9 +;; CHECK-NODEBUG-NEXT: (local $0 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $1 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $2 anyref) +;; CHECK-NODEBUG-NEXT: (local $3 anyref) +;; CHECK-NODEBUG-NEXT: (local $4 anyref) +;; CHECK-NODEBUG-NEXT: (local $5 funcref) +;; CHECK-NODEBUG-NEXT: (local $6 i32) +;; CHECK-NODEBUG-NEXT: (local $7 i64) +;; CHECK-NODEBUG-NEXT: (local $8 i64) +;; CHECK-NODEBUG-NEXT: (nop) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $10 +;; CHECK-NODEBUG-NEXT: (local $0 i32) +;; CHECK-NODEBUG-NEXT: (local $1 i64) +;; CHECK-NODEBUG-NEXT: (local $2 i64) +;; CHECK-NODEBUG-NEXT: (local $3 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $4 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $5 anyref) +;; CHECK-NODEBUG-NEXT: (local $6 anyref) +;; CHECK-NODEBUG-NEXT: (local $7 anyref) +;; CHECK-NODEBUG-NEXT: (local $8 funcref) +;; CHECK-NODEBUG-NEXT: (nop) +;; CHECK-NODEBUG-NEXT: ) + +;; CHECK-NODEBUG: (func $11 (param $0 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $1 i32) +;; CHECK-NODEBUG-NEXT: (local $2 i64) +;; CHECK-NODEBUG-NEXT: (local $3 i64) +;; CHECK-NODEBUG-NEXT: (local $4 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $5 (ref null $none_=>_anyref_f32_anyref_f32)) +;; CHECK-NODEBUG-NEXT: (local $6 anyref) +;; CHECK-NODEBUG-NEXT: (local $7 anyref) +;; CHECK-NODEBUG-NEXT: (local $8 anyref) +;; CHECK-NODEBUG-NEXT: (local $9 funcref) +;; CHECK-NODEBUG-NEXT: (nop) +;; CHECK-NODEBUG-NEXT: )