(module
  (memory 256 256)
  (type $0 (func (param i32) (result i32)))
  (type $1 (func))
  (func $b0 (type $0) (param $i1 i32) (result i32)
    (block $topmost (result i32)
      (i32.const 0)
    )
  )
  (func $loops (type $1)
    (block $out
      (loop $in
        (br $out)
        (br $in)
      )
    )
    (loop $in
      (br $in)
    )
    (loop $in
      (nop)
    )
    (block $out
      (loop $in
        (block $out
          (loop $in
            (br $out)
            (br $in)
          )
        )
      )
    )
    (block $out
      (loop $in
        (br $out)
        (br $in)
      )
    )
    (loop $in
      (block $out
        (br $out)
        (br $in)
      )
    )
    (loop $in
      (block $out
        (br $out)
        (br $in)
      )
    )
    (block $out
      (loop $in
        (br $out)
        (br $in)
      )
    )
  )
  (func $merges (type $1)
    (block $a
      (block $b
        (br $a)
        (br $b)
      )
    )
    (block $a
      (block $b
        (br_table $a $b
          (i32.const 3)
        )
      )
    )
    (block $a
      (block $b
        (br_table $b $a
          (i32.const 3)
        )
      )
    )
  )
  (func $merge-typed-with-unreachable-child (result i32)
   (local $0 f32)
   (block $label$0 (result i32)
    (block $label$1 (result i32)
     (br_if $label$1
      (i32.const 1)
      (br_if $label$0
       (i32.const 0)
       (br $label$0
        (i32.const 0)
       )
      )
     )
    )
   )
  )
  (func $loop-with-child-of-other-type
   (drop
    (loop (result i32) ;; the loop has no name, but can't be replaced by the child
     (block $l         ;; as the type differs
      (unreachable)
     )
    )
   )
  )
)
