(module
 (type $0 (func))
 (type $1 (func (result i32)))
 (type $2 (func (param i32 i32) (result i32)))
 (type $3 (func (param i32) (result i32)))
 (func $ifs
  (if
   (i32.const 0)
   (then
    (nop)
   )
  )
  (block
   (drop
    (i32.const 0)
   )
   (nop)
  )
  (if
   (i32.const 0)
   (then
    (nop)
   )
   (else
    (unreachable)
   )
  )
  (drop
   (block (result i32)
    (drop
     (i32.const 0)
    )
    (i32.add
     (i32.const 1)
     (i32.const 2)
    )
   )
  )
  (drop
   (if (result i32)
    (i32.const 0)
    (then
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
    (else
     (i32.add
      (i32.const 1)
      (i32.const 333333333)
     )
    )
   )
  )
 )
 (func $ifs-blocks
  (block
   (drop
    (i32.const 0)
   )
   (block
    (nop)
   )
  )
  (block
   (if
    (i32.const 0)
    (then
     (unreachable)
    )
    (else
    )
   )
   (nop)
  )
  (block
   (if
    (i32.const 0)
    (then
    )
    (else
     (unreachable)
    )
   )
   (nop)
  )
  (if
   (i32.const 0)
   (then
    (nop)
    (unreachable)
   )
   (else
    (nop)
   )
  )
  (if
   (i32.const 0)
   (then
    (nop)
   )
   (else
    (nop)
    (unreachable)
   )
  )
 )
 (func $ifs-blocks-big
  (block
   (drop
    (i32.const 0)
   )
   (block
    (drop
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
   )
  )
  (block
   (if
    (i32.const 0)
    (then
     (unreachable)
    )
    (else
    )
   )
   (drop
    (i32.add
     (i32.const 1)
     (i32.const 2)
    )
   )
  )
  (block
   (if
    (i32.const 0)
    (then
    )
    (else
     (unreachable)
    )
   )
   (drop
    (i32.add
     (i32.const 1)
     (i32.const 2)
    )
   )
  )
  (if
   (i32.const 0)
   (then
    (drop
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
    (unreachable)
   )
   (else
    (drop
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
   )
  )
  (if
   (i32.const 0)
   (then
    (drop
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
   )
   (else
    (drop
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
    (unreachable)
   )
  )
 )
 (func $ifs-blocks-long
  (block
   (if
    (i32.const 1)
    (then
     (drop
      (i32.const -1234)
     )
     (drop
      (i32.const -1000)
     )
    )
    (else
     (drop
      (i32.const 999)
     )
    )
   )
   (drop
    (i32.const 1)
   )
   (nop)
   (unreachable)
  )
  (drop
   (block (result i32)
    (if
     (i32.const 2)
     (then
      (drop
       (i32.const -1234)
      )
      (drop
       (i32.const -1000)
      )
     )
     (else
      (drop
       (i32.const 999)
      )
     )
    )
    (drop
     (i32.const 1)
    )
    (nop)
    (unreachable)
    (i32.const 2)
   )
  )
  (drop
   (block (result i32)
    (if
     (i32.const 3)
     (then
      (drop
       (i32.const -1234)
      )
      (drop
       (i32.const -1000)
      )
     )
     (else
      (drop
       (i32.const 999)
      )
     )
    )
    (drop
     (i32.const 1)
    )
    (nop)
    (i32.const 2)
   )
  )
 )
 (func $if-worth-it-i-dunno
  (block $folding-inner0
   (block
    (if
     (i32.const 0)
     (then
      (if
       (i32.const 0)
       (then
        (drop
         (i32.const -1234)
        )
        (drop
         (i32.const -1000)
        )
        (br $folding-inner0)
       )
       (else
        (drop
         (i32.const 999)
        )
        (drop
         (i32.const 1)
        )
        (br $folding-inner0)
       )
      )
     )
    )
    (if
     (i32.const 0)
     (then
      (if
       (i32.const 0)
       (then
        (drop
         (i32.const -1234)
        )
        (drop
         (i32.const -1000)
        )
       )
       (else
        (drop
         (i32.const 999)
        )
        (drop
         (i32.const 1)
        )
       )
      )
      (unreachable)
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 0)
     (then
      (if
       (i32.const 0)
       (then
       )
       (else
        (drop
         (i32.const 999)
        )
        (drop
         (i32.const 1)
        )
       )
      )
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 0)
     (then
      (if
       (i32.const 0)
       (then
        (drop
         (i32.const -1234)
        )
        (drop
         (i32.const -1000)
        )
       )
       (else
       )
      )
      (br $folding-inner0)
     )
    )
    (block
     (block
      (if
       (i32.const 9999)
       (then
        (drop
         (i32.const -51234)
        )
        (drop
         (i32.const -51000)
        )
       )
       (else
        (drop
         (i32.const 5999)
        )
        (drop
         (i32.const 51)
        )
       )
      )
      (br $folding-inner0)
     )
    )
    (drop
     (block (result i32)
      (block (result i32)
       (if
        (i32.const 9999)
        (then
         (drop
          (i32.const -51234)
         )
         (drop
          (i32.const -51000)
         )
        )
        (else
         (drop
          (i32.const 5999)
         )
         (drop
          (i32.const 51)
         )
        )
       )
       (unreachable)
       (i32.const 10)
      )
     )
    )
    (block
     (drop
      (if (result i32)
       (i32.const 9999)
       (then
        (drop
         (i32.const -51234)
        )
        (drop
         (i32.const -51000)
        )
        (unreachable)
        (i32.const 10)
       )
       (else
        (drop
         (i32.const 5999)
        )
        (drop
         (i32.const 51)
        )
        (unreachable)
        (i32.const 10)
       )
      )
     )
    )
   )
  )
  (unreachable)
  (unreachable)
 )
 (func $no-grandparent
  (if
   (i32.const 9999)
   (then
    (drop
     (i32.const -51234)
    )
    (drop
     (i32.const -51000)
    )
    (unreachable)
    (unreachable)
   )
   (else
    (drop
     (i32.const 5999)
    )
    (drop
     (i32.const 51)
    )
    (unreachable)
    (unreachable)
   )
  )
 )
 (func $yes-grandparent
  (block
   (if
    (i32.const 9999)
    (then
     (drop
      (i32.const -51234)
     )
     (drop
      (i32.const -51000)
     )
    )
    (else
     (drop
      (i32.const 5999)
     )
     (drop
      (i32.const 51)
     )
    )
   )
   (unreachable)
   (unreachable)
  )
 )
 (func $ifs-named-block (param $x i32) (param $y i32) (result i32)
  (block $out
   (block $out2
    (block
     (drop
      (local.get $x)
     )
     (block
      (br_if $out
       (local.get $y)
      )
      (nop)
     )
    )
    (block
     (if
      (local.get $x)
      (then
       (br_if $out
        (local.get $y)
       )
      )
      (else
       (br_if $out2
        (local.get $y)
       )
      )
     )
     (nop)
    )
    (if
     (i32.const 1234)
     (then
      (if
       (local.get $x)
       (then
        (nop)
        (br_if $out
         (local.get $y)
        )
        (nop)
       )
       (else
        (nop)
        (br_if $out2
         (local.get $y)
        )
        (nop)
       )
      )
     )
    )
    (if
     (local.get $x)
     (then
      (block $left
       (br_if $left
        (local.get $y)
       )
       (nop)
      )
     )
     (else
      (br_if $out
       (local.get $y)
      )
      (nop)
     )
    )
    (if
     (local.get $x)
     (then
      (br_if $out
       (local.get $y)
      )
      (nop)
     )
     (else
      (block $right
       (br_if $right
        (local.get $y)
       )
       (nop)
      )
     )
    )
   )
   (return
    (i32.const 10)
   )
  )
  (return
   (i32.const 20)
  )
 )
 (func $block
  (block $x
   (if
    (i32.const 0)
    (then
     (br $x)
    )
   )
   (if
    (i32.const 0)
    (then
     (br $x)
    )
   )
   (br $x)
  )
  (drop
   (i32.const 1)
  )
  (drop
   (i32.const 2)
  )
 )
 (func $block2
  (block $x
   (if
    (i32.const 0)
    (then
     (drop
      (i32.const 1)
     )
     (drop
      (i32.const 333333)
     )
     (br $x)
    )
   )
   (if
    (i32.const 0)
    (then
     (drop
      (i32.const 1)
     )
     (drop
      (i32.const 2)
     )
     (br $x)
    )
   )
   (drop
    (i32.const 1)
   )
   (drop
    (i32.const 2)
   )
   (br $x)
  )
 )
 (func $block3
  (block $x
   (if
    (i32.const 0)
    (then
     (drop
      (i32.const 1000)
     )
     (br $x)
    )
   )
   (if
    (i32.const 0)
    (then
     (drop
      (i32.const 2000)
     )
     (drop
      (i32.const 3000)
     )
     (br $x)
    )
   )
   (drop
    (i32.const 4000)
   )
   (drop
    (i32.const 5000)
   )
   (drop
    (i32.const 6000)
   )
   (br $x)
  )
  (drop
   (i32.const 1)
  )
  (drop
   (i32.const 2)
  )
 )
 (func $mixture
  (block $out
   (block
    (drop
     (i32.const 1)
    )
    (block
     (drop
      (i32.const 2)
     )
     (nop)
     (nop)
     (nop)
     (nop)
     (nop)
     (nop)
     (br $out)
    )
   )
  )
  (block $out2
   (block
    (if
     (i32.const 1)
     (then
      (drop
       (i32.const 3)
      )
     )
     (else
      (drop
       (i32.const 4)
      )
      (drop
       (i32.const 5)
      )
     )
    )
    (drop
     (i32.const 2)
    )
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (br $out2)
   )
  )
  (block
   (block $out3
    (block
     (drop
      (i32.const 1)
     )
     (block
      (br $out3)
     )
    )
    (block
     (drop
      (i32.const 1)
     )
     (block
      (br $out3)
     )
    )
    (br $out3)
   )
   (drop
    (i32.const 2)
   )
   (nop)
   (nop)
   (nop)
   (nop)
   (nop)
   (nop)
  )
 )
 (func $block-corners
  (block
   (block $x
    (if
     (i32.const 0)
     (then
      (br $x)
     )
    )
   )
   (drop
    (i32.const 1)
   )
   (drop
    (i32.const 2)
   )
  )
  (drop
   (block $y (result i32)
    (if
     (i32.const 0)
     (then
      (drop
       (i32.const 1)
      )
      (drop
       (i32.const 2)
      )
      (br $y
       (i32.const 3)
      )
     )
    )
    (drop
     (i32.const 1)
    )
    (drop
     (i32.const 2)
    )
    (br $y
     (i32.const 3)
    )
   )
  )
  (drop
   (block $z (result i32)
    (if
     (i32.const 0)
     (then
      (drop
       (i32.const 1)
      )
      (drop
       (i32.const 2)
      )
      (br $z
       (i32.const 2)
      )
     )
    )
    (drop
     (i32.const 1)
    )
    (drop
     (i32.const 2)
    )
    (i32.const 3)
   )
  )
  (block $w
   (if
    (i32.const 0)
    (then
     (drop
      (i32.const 1)
     )
     (drop
      (i32.const 2)
     )
     (br_if $w
      (i32.const 3)
     )
    )
   )
   (drop
    (i32.const 1)
   )
   (drop
    (i32.const 2)
   )
  )
  (block $x1
   (if
    (i32.const 0)
    (then
     (drop
      (i32.const 1)
     )
     (drop
      (i32.const 2)
     )
     (br $x1)
     (nop)
    )
   )
   (drop
    (i32.const 1)
   )
   (drop
    (i32.const 2)
   )
  )
  (block $side
   (block $x2
    (br_table $x2 $side
     (i32.const 0)
    )
    (if
     (i32.const 0)
     (then
      (drop
       (i32.const 1)
      )
      (drop
       (i32.const 2)
      )
      (br $x2)
     )
    )
    (drop
     (i32.const 1)
    )
    (drop
     (i32.const 2)
    )
   )
   (block $x3
    (br_table $side $x3
     (i32.const 0)
    )
    (if
     (i32.const 0)
     (then
      (drop
       (i32.const 1)
      )
      (drop
       (i32.const 2)
      )
      (br $x3)
     )
    )
    (drop
     (i32.const 1)
    )
    (drop
     (i32.const 2)
    )
   )
  )
 )
 (func $terminating
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (br $folding-inner0)
     )
    )
   )
   (return)
  )
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (unreachable)
 )
 (func $terminating-unreachable
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (br $folding-inner0)
     )
    )
    (unreachable)
   )
  )
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (unreachable)
 )
 (func $terminating-value (result i32)
  (block $folding-inner0
   (return
    (block (result i32)
     (if
      (i32.const 1)
      (then
       (br $folding-inner0)
      )
     )
     (if
      (i32.const 2)
      (then
       (br $folding-inner0)
      )
     )
     (if
      (i32.const 3)
      (then
       (br $folding-inner0)
      )
     )
     (i32.const 4)
    )
   )
  )
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (unreachable)
 )
 (func $terminating-just-2
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (drop
       (i32.const 10)
      )
      (unreachable)
     )
    )
   )
   (return)
  )
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (unreachable)
 )
 (func $terminating-shortness
  (block $folding-inner1
   (block
    (block $folding-inner0
     (block
      (if
       (i32.const 1)
       (then
        (br $folding-inner0)
       )
      )
      (if
       (i32.const 2)
       (then
        (br $folding-inner1)
       )
      )
      (if
       (i32.const 3)
       (then
        (drop
         (i32.const 10)
        )
        (br $folding-inner0)
       )
      )
     )
     (return)
    )
    (nop)
    (br $folding-inner1)
   )
  )
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (unreachable)
 )
 (func $terminating-multiple-separate
  (block $folding-inner1
   (block
    (block $folding-inner0
     (block
      (if
       (i32.const 1)
       (then
        (br $folding-inner0)
       )
      )
      (if
       (i32.const 1)
       (then
        (br $folding-inner0)
       )
      )
      (if
       (i32.const 1)
       (then
        (br $folding-inner1)
       )
      )
      (if
       (i32.const 1)
       (then
        (br $folding-inner1)
       )
      )
     )
     (return)
    )
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (nop)
    (drop
     (i32.const 1)
    )
    (unreachable)
   )
  )
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (drop
   (i32.const 2)
  )
  (unreachable)
 )
 (func $terminating-just-worth-it
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (br $folding-inner0)
     )
    )
   )
   (return)
  )
  (nop)
  (nop)
  (nop)
  (unreachable)
 )
 (func $terminating-not-worth-it
  (if
   (i32.const 1)
   (then
    (nop)
    (nop)
    (unreachable)
   )
  )
  (if
   (i32.const 2)
   (then
    (nop)
    (nop)
    (unreachable)
   )
  )
  (if
   (i32.const 3)
   (then
    (nop)
    (nop)
    (unreachable)
   )
  )
 )
 (func $terminating-return
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (br $folding-inner0)
     )
    )
   )
   (return)
  )
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (nop)
  (return)
 )
 (func $terminating-return-value (result i32)
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (nop)
      (return
       (i32.add
        (i32.const 111111111)
        (i32.const 2222222)
       )
      )
     )
    )
    (return
     (i32.const 1234)
    )
   )
  )
  (nop)
  (return
   (i32.add
    (i32.const 1)
    (i32.const 2)
   )
  )
 )
 (func $terminating-fallthrough-value (result i32)
  (block $folding-inner0
   (return
    (block (result i32)
     (if
      (i32.const 1)
      (then
       (br $folding-inner0)
      )
     )
     (if
      (i32.const 2)
      (then
       (br $folding-inner0)
      )
     )
     (if
      (i32.const 3)
      (then
       (br $folding-inner0)
      )
     )
     (if
      (i32.const 3)
      (then
       (nop)
       (return
        (i32.add
         (i32.const 111111111)
         (i32.const 2222222)
        )
       )
      )
     )
     (i32.const 1234)
    )
   )
  )
  (nop)
  (return
   (i32.add
    (i32.const 1)
    (i32.const 2)
   )
  )
 )
 (func $big-return (result i32)
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 4)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 5)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 6)
     (then
      (br $folding-inner0)
     )
    )
    (unreachable)
   )
  )
  (return
   (i32.add
    (i32.const 1)
    (i32.const 2)
   )
  )
 )
 (func $return-mix (result i32)
  (block $folding-inner0
   (block
    (if
     (i32.const 1)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 2)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 4)
     (then
      (br $folding-inner0)
     )
    )
    (if
     (i32.const 3)
     (then
      (return
       (i32.add
        (i32.const 1)
        (i32.const 234567)
       )
      )
     )
    )
    (br $folding-inner0)
   )
  )
  (return
   (i32.add
    (i32.const 1)
    (i32.const 2)
   )
  )
 )
 (func $just-unreachable
  (unreachable)
 )
 (func $just-return (result i32)
  (return
   (i32.add
    (i32.const 1)
    (i32.const 2)
   )
  )
 )
 (func $drop-if-with-value-but-unreachable
  (if
   (i32.const 0)
   (then
    (nop)
   )
  )
  (block
   (drop
    (i32.const 0)
   )
   (block
    (nop)
   )
  )
  (if
   (i32.const 0)
   (then
    (nop)
   )
   (else
    (unreachable)
   )
  )
  (nop)
  (drop
   (block (result i32)
    (drop
     (unreachable)
    )
    (block (result i32)
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
   )
  )
  (drop
   (if (result i32)
    (i32.const 0)
    (then
     (i32.add
      (i32.const 1)
      (i32.const 2)
     )
    )
    (else
     (i32.add
      (i32.const 1)
      (i32.const 333333333)
     )
    )
   )
  )
 )
 (func $nested-control-flow
  (block $out
   (block
    (block $x
     (if
      (i32.const 0)
      (then
       (br $x)
      )
     )
     (if
      (i32.const 0)
      (then
       (br $x)
      )
     )
     (br $x)
    )
    (if
     (i32.const 1)
     (then
      (br $out)
     )
    )
    (drop
     (i32.const 1)
    )
    (drop
     (i32.const 2)
    )
   )
   (drop
    (i32.const 3)
   )
  )
 )
 (func $nested-control-flow-dangerous
  (block $folding-inner0
   (block $out
    (block
     (if
      (i32.const 0)
      (then
       (if
        (i32.const 1)
        (then
         (br $out)
        )
       )
       (br $folding-inner0)
      )
     )
     (if
      (i32.const 0)
      (then
       (if
        (i32.const 1)
        (then
         (br $out)
        )
       )
       (br $folding-inner0)
      )
     )
     (if
      (i32.const 1)
      (then
       (br $out)
      )
     )
     (br $folding-inner0)
    )
    (drop
     (i32.const 3)
    )
   )
   (return)
  )
  (drop
   (i32.const 1)
  )
  (drop
   (i32.const 2)
  )
  (return)
 )
 (func $nested-control-flow-dangerous-but-ok
  (block $folding-inner0
   (block
    (block $middle
     (block
      (if
       (i32.const 0)
       (then
        (if
         (i32.add
          (i32.const 0)
          (i32.const 1)
         )
         (then
          (br $middle)
         )
        )
        (br $folding-inner0)
       )
      )
      (if
       (i32.const 0)
       (then
        (if
         (i32.add
          (i32.const 0)
          (i32.const 1)
         )
         (then
          (br $middle)
         )
        )
        (br $folding-inner0)
       )
      )
      (if
       (i32.add
        (i32.const 0)
        (i32.const 1)
       )
       (then
        (br $middle)
       )
      )
      (br $folding-inner0)
     )
    )
    (drop
     (i32.const 3)
    )
   )
   (return)
  )
  (drop
   (i32.const 1)
  )
  (drop
   (i32.const 2)
  )
  (return)
 )
 (func $nested-control-flow-dangerous-but-ok-b
  (block $out
   (block $middle
    (block
     (if
      (i32.const 0)
      (then
       (if
        (i32.add
         (i32.const 0)
         (i32.const 1)
        )
        (then
         (br $middle)
        )
       )
       (br $out)
      )
     )
     (if
      (i32.const 0)
      (then
       (if
        (i32.add
         (i32.const 0)
         (i32.const 1)
        )
        (then
         (br $middle)
        )
       )
       (br $out)
      )
     )
     (if
      (i32.add
       (i32.const 0)
       (i32.const 1)
      )
      (then
       (br $middle)
      )
     )
    )
   )
   (unreachable)
  )
  (drop
   (i32.const 1)
  )
  (drop
   (i32.const 2)
  )
  (drop
   (i32.const 3)
  )
  (drop
   (i32.const 4)
  )
  (drop
   (i32.const 1)
  )
  (drop
   (i32.const 2)
  )
  (drop
   (i32.const 3)
  )
  (drop
   (i32.const 4)
  )
 )
 (func $nested-control-flow-dangerous-but-ok-c
  (block $x
   (block
    (block $out
     (block
      (if
       (i32.const 0)
       (then
        (br $out)
       )
      )
      (if
       (i32.const 0)
       (then
        (br $out)
       )
      )
      (br $out)
     )
     (unreachable)
    )
    (if
     (i32.add
      (i32.const 0)
      (i32.const 1)
     )
     (then
      (br $x)
     )
    )
    (drop
     (i32.const 1)
    )
    (drop
     (i32.const 2)
    )
   )
   (unreachable)
  )
  (drop
   (i32.const 5)
  )
 )
 (func $nested-control-flow-dangerous-but-ok-d
  (block
   (block $out
    (block
     (if
      (i32.const 0)
      (then
       (br $out)
      )
     )
     (if
      (i32.const 0)
      (then
       (br $out)
      )
     )
     (br $out)
    )
   )
   (block $x
    (if
     (i32.add
      (i32.const 0)
      (i32.const 1)
     )
     (then
      (br $x)
     )
    )
   )
   (drop
    (i32.const 1)
   )
   (drop
    (i32.const 2)
   )
  )
  (drop
   (i32.const 3)
  )
 )
 (func $if-suffix (param $x i32) (result i32)
  (block
   (if
    (local.get $x)
    (then
    )
    (else
     (drop
      (call $if-suffix
       (i32.const -1)
      )
     )
    )
   )
   (local.set $x
    (i32.const 1)
   )
  )
  (block (result i32)
   (if
    (local.get $x)
    (then
    )
    (else
     (drop
      (call $if-suffix
       (i32.const -2)
      )
     )
    )
   )
   (i32.const 2)
  )
 )
)
