;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
;; RUN: wasm-opt %s -all --disable-gc -S -o - | filecheck %s
;; RUN: wasm-opt %s -all --disable-gc -S -o - | wasm-opt -all --disable-gc -S -o - | filecheck %s

(module
  ;; RTRIP:      (type $tuple (func (result i32 externref)))
  ;; CHECK:      (type $tuple (func (result i32 externref)))
  (type $tuple (func (result i32 externref)))

  ;; CHECK:      (func $f (result i32 externref)
  ;; CHECK-NEXT:  (local $scratch (tuple i32 externref))
  ;; CHECK-NEXT:  (block $l (type $tuple) (result i32 externref)
  ;; CHECK-NEXT:   (br $l
  ;; CHECK-NEXT:    (block (type $tuple) (result i32 externref)
  ;; CHECK-NEXT:     (local.set $scratch
  ;; CHECK-NEXT:      (br_if $l
  ;; CHECK-NEXT:       (tuple.make 2
  ;; CHECK-NEXT:        (i32.const 0)
  ;; CHECK-NEXT:        (ref.null noextern)
  ;; CHECK-NEXT:       )
  ;; CHECK-NEXT:       (i32.const 0)
  ;; CHECK-NEXT:      )
  ;; CHECK-NEXT:     )
  ;; CHECK-NEXT:     (nop)
  ;; CHECK-NEXT:     (local.get $scratch)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  (func $f (result i32 externref)
    block $l (type $tuple) (result i32 externref)
      i32.const 0
      ref.null extern
      i32.const 0
      br_if $l ;; package the i32 and nullexternref into a tuple
      nop      ;; force creation of a scratch local
      br $l    ;; consume a scratch local block with (result i32 nullexternref)
               ;; the nullexternref will become externref, as gc is disabled.
    end
  )
)
