(module
 (type $externref_=>_none (func (param externref)))
 (type $none_=>_externref (func (result externref)))
 (type $funcref_=>_none (func (param funcref)))
 (type $nullref_=>_none (func (param nullref)))
 (type $exnref_=>_none (func (param exnref)))
 (type $none_=>_funcref (func (result funcref)))
 (type $none_=>_exnref (func (result exnref)))
 (type $none_=>_none (func))
 (type $none_=>_nullref (func (result nullref)))
 (type $externref_=>_funcref (func (param externref) (result funcref)))
 (import "env" "import_global" (global $import_global externref))
 (import "env" "import_func" (func $import_func (param externref) (result funcref)))
 (table $0 4 4 funcref)
 (elem (i32.const 0) $take_externref $take_funcref $take_exnref $take_nullref)
 (global $global_externref (mut externref) (ref.null))
 (global $global_funcref (mut funcref) (ref.null))
 (global $global_exnref (mut exnref) (ref.null))
 (global $global_nullref (mut nullref) (ref.null))
 (global $global_externref2 (mut externref) (ref.func $foo))
 (global $global_funcref2 (mut funcref) (ref.func $foo))
 (export "export_func" (func $import_func))
 (export "export_global" (global $import_global))
 (func $take_externref (param $0 externref)
  (nop)
 )
 (func $take_funcref (param $0 funcref)
  (nop)
 )
 (func $take_exnref (param $0 exnref)
  (nop)
 )
 (func $take_nullref (param $0 nullref)
  (nop)
 )
 (func $foo
  (nop)
 )
 (func $test
  (local $local_externref externref)
  (local $local_funcref funcref)
  (local $local_exnref exnref)
  (local $local_nullref nullref)
  (local.set $local_externref
   (local.get $local_externref)
  )
  (local.set $local_externref
   (local.get $local_funcref)
  )
  (local.set $local_externref
   (local.get $local_exnref)
  )
  (local.set $local_externref
   (local.get $local_nullref)
  )
  (local.set $local_externref
   (ref.null)
  )
  (local.set $local_externref
   (ref.func $foo)
  )
  (local.set $local_funcref
   (local.get $local_funcref)
  )
  (local.set $local_funcref
   (ref.null)
  )
  (local.set $local_funcref
   (ref.func $foo)
  )
  (local.set $local_exnref
   (local.get $local_exnref)
  )
  (local.set $local_exnref
   (ref.null)
  )
  (local.set $local_nullref
   (local.get $local_nullref)
  )
  (local.set $local_nullref
   (ref.null)
  )
  (global.set $global_externref
   (global.get $global_externref)
  )
  (global.set $global_externref
   (global.get $global_funcref)
  )
  (global.set $global_externref
   (global.get $global_exnref)
  )
  (global.set $global_externref
   (global.get $global_nullref)
  )
  (global.set $global_externref
   (ref.null)
  )
  (global.set $global_externref
   (ref.func $foo)
  )
  (global.set $global_funcref
   (global.get $global_funcref)
  )
  (global.set $global_funcref
   (ref.null)
  )
  (global.set $global_funcref
   (ref.func $foo)
  )
  (global.set $global_exnref
   (global.get $global_exnref)
  )
  (global.set $global_exnref
   (ref.null)
  )
  (global.set $global_nullref
   (global.get $global_nullref)
  )
  (global.set $global_nullref
   (ref.null)
  )
  (call $take_externref
   (local.get $local_externref)
  )
  (call $take_externref
   (local.get $local_funcref)
  )
  (call $take_externref
   (local.get $local_exnref)
  )
  (call $take_externref
   (ref.null)
  )
  (call_indirect (type $externref_=>_none)
   (local.get $local_externref)
   (i32.const 0)
  )
  (call_indirect (type $externref_=>_none)
   (local.get $local_funcref)
   (i32.const 0)
  )
  (call_indirect (type $externref_=>_none)
   (local.get $local_exnref)
   (i32.const 0)
  )
  (call_indirect (type $externref_=>_none)
   (ref.null)
   (i32.const 0)
  )
  (call_indirect (type $funcref_=>_none)
   (local.get $local_funcref)
   (i32.const 1)
  )
  (call_indirect (type $funcref_=>_none)
   (ref.null)
   (i32.const 1)
  )
  (call_indirect (type $exnref_=>_none)
   (local.get $local_exnref)
   (i32.const 2)
  )
  (call_indirect (type $exnref_=>_none)
   (ref.null)
   (i32.const 2)
  )
  (call_indirect (type $nullref_=>_none)
   (local.get $local_nullref)
   (i32.const 3)
  )
  (call_indirect (type $nullref_=>_none)
   (ref.null)
   (i32.const 3)
  )
  (drop
   (block $block (result externref)
    (br_if $block
     (local.get $local_externref)
     (i32.const 1)
    )
   )
  )
  (drop
   (block $block0 (result externref)
    (br_if $block0
     (local.get $local_funcref)
     (i32.const 1)
    )
   )
  )
  (drop
   (block $block1 (result externref)
    (br_if $block1
     (local.get $local_exnref)
     (i32.const 1)
    )
   )
  )
  (drop
   (block $block2 (result externref)
    (br_if $block2
     (ref.null)
     (i32.const 1)
    )
   )
  )
  (drop
   (block $block3 (result funcref)
    (br_if $block3
     (ref.null)
     (i32.const 1)
    )
   )
  )
  (drop
   (block $block4 (result exnref)
    (br_if $block4
     (ref.null)
     (i32.const 1)
    )
   )
  )
  (drop
   (block $block5 (result nullref)
    (br_if $block5
     (ref.null)
     (i32.const 1)
    )
   )
  )
  (drop
   (loop $loop-in (result externref)
    (local.get $local_externref)
   )
  )
  (drop
   (loop $loop-in6 (result externref)
    (local.get $local_funcref)
   )
  )
  (drop
   (loop $loop-in7 (result externref)
    (local.get $local_exnref)
   )
  )
  (drop
   (loop $loop-in8 (result externref)
    (ref.null)
   )
  )
  (drop
   (loop $loop-in9 (result funcref)
    (local.get $local_funcref)
   )
  )
  (drop
   (loop $loop-in10 (result funcref)
    (ref.null)
   )
  )
  (drop
   (loop $loop-in11 (result exnref)
    (local.get $local_exnref)
   )
  )
  (drop
   (loop $loop-in12 (result exnref)
    (ref.null)
   )
  )
  (drop
   (loop $loop-in13 (result nullref)
    (ref.null)
   )
  )
  (drop
   (if (result externref)
    (i32.const 1)
    (local.get $local_externref)
    (local.get $local_exnref)
   )
  )
  (drop
   (if (result externref)
    (i32.const 1)
    (ref.func $foo)
    (ref.null)
   )
  )
  (drop
   (if (result funcref)
    (i32.const 1)
    (ref.func $foo)
    (ref.null)
   )
  )
  (drop
   (if (result exnref)
    (i32.const 1)
    (local.get $local_exnref)
    (ref.null)
   )
  )
  (drop
   (if (result nullref)
    (i32.const 1)
    (local.get $local_nullref)
    (ref.null)
   )
  )
  (drop
   (try (result externref)
    (do
     (local.get $local_externref)
    )
    (catch
     (exnref.pop)
    )
   )
  )
  (drop
   (try (result externref)
    (do
     (ref.func $foo)
    )
    (catch
     (drop
      (exnref.pop)
     )
     (ref.null)
    )
   )
  )
  (drop
   (try (result funcref)
    (do
     (ref.func $foo)
    )
    (catch
     (drop
      (exnref.pop)
     )
     (ref.null)
    )
   )
  )
  (drop
   (try (result exnref)
    (do
     (ref.null)
    )
    (catch
     (exnref.pop)
    )
   )
  )
  (drop
   (try (result nullref)
    (do
     (ref.null)
    )
    (catch
     (drop
      (exnref.pop)
     )
     (ref.null)
    )
   )
  )
  (drop
   (select (result externref)
    (local.get $local_externref)
    (ref.func $foo)
    (i32.const 1)
   )
  )
  (drop
   (select (result externref)
    (local.get $local_exnref)
    (local.get $local_externref)
    (i32.const 1)
   )
  )
  (drop
   (select (result externref)
    (local.get $local_externref)
    (ref.null)
    (i32.const 1)
   )
  )
  (drop
   (select (result externref)
    (ref.null)
    (ref.func $foo)
    (i32.const 1)
   )
  )
  (drop
   (select (result funcref)
    (ref.func $foo)
    (ref.null)
    (i32.const 1)
   )
  )
  (drop
   (select (result exnref)
    (ref.null)
    (local.get $local_exnref)
    (i32.const 1)
   )
  )
  (drop
   (select (result nullref)
    (ref.null)
    (ref.null)
    (i32.const 1)
   )
  )
  (drop
   (select
    (i32.const 0)
    (i32.const 2)
    (i32.const 1)
   )
  )
  (drop
   (ref.is_null
    (local.get $local_externref)
   )
  )
  (drop
   (ref.is_null
    (local.get $local_exnref)
   )
  )
  (drop
   (ref.is_null
    (ref.func $foo)
   )
  )
  (drop
   (ref.is_null
    (ref.null)
   )
  )
 )
 (func $return_externref (result externref)
  (local $local_externref externref)
  (local.get $local_externref)
 )
 (func $return_externref2 (result externref)
  (ref.func $foo)
 )
 (func $return_externref3 (result externref)
  (local $local_exnref exnref)
  (local.get $local_exnref)
 )
 (func $return_externref4 (result externref)
  (ref.null)
 )
 (func $return_funcref (result funcref)
  (ref.func $foo)
 )
 (func $return_funcref2 (result funcref)
  (ref.null)
 )
 (func $return_exnref (result exnref)
  (local $local_exnref exnref)
  (local.get $local_exnref)
 )
 (func $return_exnref2 (result exnref)
  (ref.null)
 )
 (func $return_nullref (result nullref)
  (local $local_nullref nullref)
  (local.get $local_nullref)
 )
 (func $return_externref_returns (result externref)
  (local $local_externref externref)
  (local $local_exnref exnref)
  (return
   (local.get $local_externref)
  )
  (return
   (local.get $local_exnref)
  )
  (return
   (ref.func $foo)
  )
  (return
   (ref.null)
  )
 )
 (func $return_funcref_returns (result funcref)
  (return
   (ref.func $foo)
  )
  (return
   (ref.null)
  )
 )
 (func $return_exnref_returns (result exnref)
  (local $local_exnref exnref)
  (return
   (local.get $local_exnref)
  )
  (return
   (ref.null)
  )
 )
 (func $return_nullref_returns (result nullref)
  (local $local_nullref nullref)
  (return
   (local.get $local_nullref)
  )
  (return
   (ref.null)
  )
 )
)