;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: wasm-opt %s -all -o %t.text.wast -g -S
;; RUN: wasm-as %s -all -g -o %t.wasm
;; RUN: wasm-dis %t.wasm -all -o %t.bin.wast
;; RUN: wasm-as %s -all -o %t.nodebug.wasm
;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.bin.nodebug.wast
;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT
;; RUN: cat %t.bin.wast | filecheck %s --check-prefix=CHECK-BIN
;; RUN: cat %t.bin.nodebug.wast | filecheck %s --check-prefix=CHECK-BIN-NODEBUG
(module
;; CHECK-TEXT: (type $i32-i32 (func (param i32) (result i32)))
;; CHECK-TEXT: (type $mixed_results (func (result anyref f32 anyref f32)))
;; CHECK-TEXT: (type $void (func))
;; CHECK-BIN: (type $mixed_results (func (result anyref f32 anyref f32)))
;; CHECK-BIN: (type $i32-i32 (func (param i32) (result i32)))
;; CHECK-BIN: (type $void (func))
(type $void (func))
;; inline ref type in result
;; CHECK-TEXT: (type $_=>_eqref (func (result eqref)))
;; CHECK-BIN: (type $_=>_eqref (func (result eqref)))
(type $_=>_eqref (func (result eqref)))
;; CHECK-TEXT: (type $4 (func (param (ref $i32-i32)) (result i32)))
;; CHECK-TEXT: (type $5 (func (param (ref null $i32-i32)) (result i32)))
;; CHECK-TEXT: (type $6 (func (result i32)))
;; CHECK-TEXT: (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $_=>_eqref))))
;; CHECK-BIN: (type $4 (func (param (ref $i32-i32)) (result i32)))
;; CHECK-BIN: (type $5 (func (param (ref null $i32-i32)) (result i32)))
;; CHECK-BIN: (type $6 (func (result i32)))
;; CHECK-BIN: (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-TEXT: (type $=>anyref (func (result anyref)))
;; CHECK-BIN: (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-TEXT: (type $9 (func (param (ref null $mixed_results))))
;; CHECK-TEXT: (type $10 (func (result i32 (ref null $mixed_results) f64)))
;; CHECK-TEXT: (elem declare func $call-ref $call-ref-more)
;; CHECK-TEXT: (func $call-ref (type $void)
;; CHECK-TEXT-NEXT: (call_ref $void
;; CHECK-TEXT-NEXT: (ref.func $call-ref)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (type $9 (func (param (ref null $mixed_results))))
;; CHECK-BIN: (type $10 (func (result i32 (ref null $mixed_results) f64)))
;; CHECK-BIN: (elem declare func $call-ref $call-ref-more)
;; CHECK-BIN: (func $call-ref (type $void)
;; CHECK-BIN-NEXT: (call_ref $void
;; CHECK-BIN-NEXT: (ref.func $call-ref)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $call-ref
(call_ref $void (ref.func $call-ref))
)
;; CHECK-TEXT: (func $return-call-ref (type $void)
;; CHECK-TEXT-NEXT: (return_call_ref $void
;; CHECK-TEXT-NEXT: (ref.func $call-ref)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $return-call-ref (type $void)
;; CHECK-BIN-NEXT: (return_call_ref $void
;; CHECK-BIN-NEXT: (ref.func $call-ref)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $return-call-ref
(return_call_ref $void (ref.func $call-ref))
)
;; CHECK-TEXT: (func $call-ref-more (type $i32-i32) (param $0 i32) (result i32)
;; CHECK-TEXT-NEXT: (call_ref $i32-i32
;; CHECK-TEXT-NEXT: (i32.const 42)
;; CHECK-TEXT-NEXT: (ref.func $call-ref-more)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $call-ref-more (type $i32-i32) (param $0 i32) (result i32)
;; CHECK-BIN-NEXT: (call_ref $i32-i32
;; CHECK-BIN-NEXT: (i32.const 42)
;; CHECK-BIN-NEXT: (ref.func $call-ref-more)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $call-ref-more (param i32) (result i32)
(call_ref $i32-i32 (i32.const 42) (ref.func $call-ref-more))
)
;; CHECK-TEXT: (func $call_from-param (type $4) (param $f (ref $i32-i32)) (result i32)
;; CHECK-TEXT-NEXT: (call_ref $i32-i32
;; CHECK-TEXT-NEXT: (i32.const 42)
;; CHECK-TEXT-NEXT: (local.get $f)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $call_from-param (type $4) (param $f (ref $i32-i32)) (result i32)
;; CHECK-BIN-NEXT: (call_ref $i32-i32
;; CHECK-BIN-NEXT: (i32.const 42)
;; CHECK-BIN-NEXT: (local.get $f)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $call_from-param (param $f (ref $i32-i32)) (result i32)
(call_ref $i32-i32 (i32.const 42) (local.get $f))
)
;; CHECK-TEXT: (func $call_from-param-null (type $5) (param $f (ref null $i32-i32)) (result i32)
;; CHECK-TEXT-NEXT: (call_ref $i32-i32
;; CHECK-TEXT-NEXT: (i32.const 42)
;; CHECK-TEXT-NEXT: (local.get $f)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $call_from-param-null (type $5) (param $f (ref null $i32-i32)) (result i32)
;; CHECK-BIN-NEXT: (call_ref $i32-i32
;; CHECK-BIN-NEXT: (i32.const 42)
;; CHECK-BIN-NEXT: (local.get $f)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $call_from-param-null (param $f (ref null $i32-i32)) (result i32)
(call_ref $i32-i32 (i32.const 42) (local.get $f))
)
;; CHECK-TEXT: (func $call_from-local-null (type $6) (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 $i32-i32
;; CHECK-TEXT-NEXT: (i32.const 42)
;; CHECK-TEXT-NEXT: (local.get $f)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $call_from-local-null (type $6) (result i32)
;; CHECK-BIN-NEXT: (local $f (ref null $i32-i32))
;; CHECK-BIN-NEXT: (local.set $f
;; CHECK-BIN-NEXT: (ref.func $call-ref-more)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (call_ref $i32-i32
;; CHECK-BIN-NEXT: (i32.const 42)
;; CHECK-BIN-NEXT: (local.get $f)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-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-i32 (i32.const 42) (local.get $f))
)
;; CHECK-TEXT: (func $ref-in-sig (type $f64_=>_ref_null<_->_eqref>) (param $0 f64) (result (ref null $_=>_eqref))
;; CHECK-TEXT-NEXT: (ref.null nofunc)
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $ref-in-sig (type $f64_=>_ref_null<_->_eqref>) (param $0 f64) (result (ref null $_=>_eqref))
;; CHECK-BIN-NEXT: (ref.null nofunc)
;; CHECK-BIN-NEXT: )
(func $ref-in-sig (param $0 f64) (result (ref null $=>eqref))
(ref.null $=>eqref)
)
;; CHECK-TEXT: (func $type-only-in-tuple-local (type $void)
;; CHECK-TEXT-NEXT: (local $x (tuple i32 (ref null $=>anyref) f64))
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $type-only-in-tuple-local (type $void)
;; CHECK-BIN-NEXT: (local $x i32)
;; CHECK-BIN-NEXT: (local $1 f64)
;; CHECK-BIN-NEXT: (local $2 (ref null $=>anyref))
;; CHECK-BIN-NEXT: )
(func $type-only-in-tuple-local
(local $x (tuple i32 (ref null $=>anyref) f64))
)
;; CHECK-TEXT: (func $type-only-in-tuple-block (type $void)
;; CHECK-TEXT-NEXT: (tuple.drop 3
;; CHECK-TEXT-NEXT: (block $block (type $10) (result i32 (ref null $mixed_results) f64)
;; CHECK-TEXT-NEXT: (unreachable)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $type-only-in-tuple-block (type $void)
;; CHECK-BIN-NEXT: (local $scratch (tuple i32 (ref null $mixed_results) f64))
;; CHECK-BIN-NEXT: (local $scratch_1 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $scratch_2 i32)
;; CHECK-BIN-NEXT: (drop
;; CHECK-BIN-NEXT: (block (result i32)
;; CHECK-BIN-NEXT: (local.set $scratch_2
;; CHECK-BIN-NEXT: (tuple.extract 3 0
;; CHECK-BIN-NEXT: (local.tee $scratch
;; CHECK-BIN-NEXT: (block $block (type $10) (result i32 (ref null $mixed_results) f64)
;; CHECK-BIN-NEXT: (unreachable)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (drop
;; CHECK-BIN-NEXT: (block (result (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local.set $scratch_1
;; CHECK-BIN-NEXT: (tuple.extract 3 1
;; CHECK-BIN-NEXT: (local.get $scratch)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (drop
;; CHECK-BIN-NEXT: (tuple.extract 3 2
;; CHECK-BIN-NEXT: (local.get $scratch)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (local.get $scratch_1)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (local.get $scratch_2)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $type-only-in-tuple-block
(tuple.drop 3
(block $block (result i32 (ref null $mixed_results) f64)
(unreachable)
)
)
)
;; CHECK-TEXT: (func $ref-types-first (type $void)
;; CHECK-TEXT-NEXT: (local $r1 (ref null $mixed_results))
;; CHECK-TEXT-NEXT: (local $r2 (ref null $mixed_results))
;; CHECK-TEXT-NEXT: (local $i1 i32)
;; CHECK-TEXT-NEXT: (local $r3 anyref)
;; CHECK-TEXT-NEXT: (local $i2 i64)
;; CHECK-TEXT-NEXT: (local $r4 anyref)
;; CHECK-TEXT-NEXT: (local $i3 i64)
;; CHECK-TEXT-NEXT: (local $r5 anyref)
;; CHECK-TEXT-NEXT: (local $r6 funcref)
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $ref-types-first (type $void)
;; CHECK-BIN-NEXT: (local $r1 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $r2 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $r3 anyref)
;; CHECK-BIN-NEXT: (local $r4 anyref)
;; CHECK-BIN-NEXT: (local $r5 anyref)
;; CHECK-BIN-NEXT: (local $r6 funcref)
;; CHECK-BIN-NEXT: (local $i1 i32)
;; CHECK-BIN-NEXT: (local $i2 i64)
;; CHECK-BIN-NEXT: (local $i3 i64)
;; CHECK-BIN-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,
;; types should be emitted in blocks there, that is, locals of identical
;; types should be adjacent.
(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)
)
;; CHECK-TEXT: (func $mvp-types-first (type $void)
;; CHECK-TEXT-NEXT: (local $i1 i32)
;; 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 $i2 i64)
;; CHECK-TEXT-NEXT: (local $r4 anyref)
;; CHECK-TEXT-NEXT: (local $i3 i64)
;; CHECK-TEXT-NEXT: (local $r5 anyref)
;; CHECK-TEXT-NEXT: (local $r6 funcref)
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $mvp-types-first (type $void)
;; CHECK-BIN-NEXT: (local $i1 i32)
;; CHECK-BIN-NEXT: (local $i2 i64)
;; CHECK-BIN-NEXT: (local $i3 i64)
;; CHECK-BIN-NEXT: (local $r1 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $r2 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $r3 anyref)
;; CHECK-BIN-NEXT: (local $r4 anyref)
;; CHECK-BIN-NEXT: (local $r5 anyref)
;; CHECK-BIN-NEXT: (local $r6 funcref)
;; CHECK-BIN-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.
(local $i1 i32) ;; only this local was moved up.
(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)
)
;; CHECK-TEXT: (func $mvp-types-first-param (type $9) (param $r0 (ref null $mixed_results))
;; CHECK-TEXT-NEXT: (local $i1 i32)
;; 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 $i2 i64)
;; CHECK-TEXT-NEXT: (local $r4 anyref)
;; CHECK-TEXT-NEXT: (local $i3 i64)
;; CHECK-TEXT-NEXT: (local $r5 anyref)
;; CHECK-TEXT-NEXT: (local $r6 funcref)
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $mvp-types-first-param (type $9) (param $r0 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $i1 i32)
;; CHECK-BIN-NEXT: (local $i2 i64)
;; CHECK-BIN-NEXT: (local $i3 i64)
;; CHECK-BIN-NEXT: (local $r1 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $r2 (ref null $mixed_results))
;; CHECK-BIN-NEXT: (local $r3 anyref)
;; CHECK-BIN-NEXT: (local $r4 anyref)
;; CHECK-BIN-NEXT: (local $r5 anyref)
;; CHECK-BIN-NEXT: (local $r6 funcref)
;; CHECK-BIN-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.
(local $i1 i32) ;; only this local was moved up.
(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)
)
)
;; CHECK-BIN-NODEBUG: (type $0 (func (result anyref f32 anyref f32)))
;; CHECK-BIN-NODEBUG: (type $1 (func (param i32) (result i32)))
;; CHECK-BIN-NODEBUG: (type $2 (func))
;; CHECK-BIN-NODEBUG: (type $3 (func (result eqref)))
;; CHECK-BIN-NODEBUG: (type $4 (func (param (ref $1)) (result i32)))
;; CHECK-BIN-NODEBUG: (type $5 (func (param (ref null $1)) (result i32)))
;; CHECK-BIN-NODEBUG: (type $6 (func (result i32)))
;; CHECK-BIN-NODEBUG: (type $7 (func (param f64) (result (ref null $3))))
;; CHECK-BIN-NODEBUG: (type $8 (func (result anyref)))
;; CHECK-BIN-NODEBUG: (type $9 (func (param (ref null $0))))
;; CHECK-BIN-NODEBUG: (type $10 (func (result i32 (ref null $0) f64)))
;; CHECK-BIN-NODEBUG: (elem declare func $0 $2)
;; CHECK-BIN-NODEBUG: (func $0 (type $2)
;; CHECK-BIN-NODEBUG-NEXT: (call_ref $2
;; CHECK-BIN-NODEBUG-NEXT: (ref.func $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $1 (type $2)
;; CHECK-BIN-NODEBUG-NEXT: (return_call_ref $2
;; CHECK-BIN-NODEBUG-NEXT: (ref.func $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $2 (type $1) (param $0 i32) (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42)
;; CHECK-BIN-NODEBUG-NEXT: (ref.func $2)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $3 (type $4) (param $0 (ref $1)) (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42)
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $4 (type $5) (param $0 (ref null $1)) (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42)
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $5 (type $6) (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (local $0 (ref null $1))
;; CHECK-BIN-NODEBUG-NEXT: (local.set $0
;; CHECK-BIN-NODEBUG-NEXT: (ref.func $2)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (call_ref $1
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42)
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $6 (type $7) (param $0 f64) (result (ref null $3))
;; CHECK-BIN-NODEBUG-NEXT: (ref.null nofunc)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $7 (type $2)
;; CHECK-BIN-NODEBUG-NEXT: (local $0 i32)
;; CHECK-BIN-NODEBUG-NEXT: (local $1 f64)
;; CHECK-BIN-NODEBUG-NEXT: (local $2 (ref null $8))
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $8 (type $2)
;; CHECK-BIN-NODEBUG-NEXT: (local $scratch (tuple i32 (ref null $0) f64))
;; CHECK-BIN-NODEBUG-NEXT: (local $scratch_1 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $scratch_2 i32)
;; CHECK-BIN-NODEBUG-NEXT: (drop
;; CHECK-BIN-NODEBUG-NEXT: (block (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (local.set $scratch_2
;; CHECK-BIN-NODEBUG-NEXT: (tuple.extract 3 0
;; CHECK-BIN-NODEBUG-NEXT: (local.tee $scratch
;; CHECK-BIN-NODEBUG-NEXT: (block (type $10) (result i32 (ref null $0) f64)
;; CHECK-BIN-NODEBUG-NEXT: (unreachable)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (drop
;; CHECK-BIN-NODEBUG-NEXT: (block (result (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local.set $scratch_1
;; CHECK-BIN-NODEBUG-NEXT: (tuple.extract 3 1
;; CHECK-BIN-NODEBUG-NEXT: (local.get $scratch)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (drop
;; CHECK-BIN-NODEBUG-NEXT: (tuple.extract 3 2
;; CHECK-BIN-NODEBUG-NEXT: (local.get $scratch)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (local.get $scratch_1)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (local.get $scratch_2)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $9 (type $2)
;; CHECK-BIN-NODEBUG-NEXT: (local $0 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $1 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $2 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $3 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $4 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $5 funcref)
;; CHECK-BIN-NODEBUG-NEXT: (local $6 i32)
;; CHECK-BIN-NODEBUG-NEXT: (local $7 i64)
;; CHECK-BIN-NODEBUG-NEXT: (local $8 i64)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $10 (type $2)
;; CHECK-BIN-NODEBUG-NEXT: (local $0 i32)
;; CHECK-BIN-NODEBUG-NEXT: (local $1 i64)
;; CHECK-BIN-NODEBUG-NEXT: (local $2 i64)
;; CHECK-BIN-NODEBUG-NEXT: (local $3 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $4 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $5 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $6 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $7 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $8 funcref)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $11 (type $9) (param $0 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $1 i32)
;; CHECK-BIN-NODEBUG-NEXT: (local $2 i64)
;; CHECK-BIN-NODEBUG-NEXT: (local $3 i64)
;; CHECK-BIN-NODEBUG-NEXT: (local $4 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $5 (ref null $0))
;; CHECK-BIN-NODEBUG-NEXT: (local $6 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $7 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $8 anyref)
;; CHECK-BIN-NODEBUG-NEXT: (local $9 funcref)
;; CHECK-BIN-NODEBUG-NEXT: )