;;; TOOL: run-roundtrip
;;; ARGS: --stdout --fold-exprs --enable-function-references
(module
  (type $i_i (func (param i32) (result i32)))

  (func $i32_r_i32 (type $i_i)
    i32.const 1)

  (func $i32_f32_r_f32 (param i32 f32) (result f32)
    f32.const 0)

  (func $f32_f32_f32_f32_r_v (param f32 f32 f32 f32))

  (elem declare funcref (ref.func $i32_r_i32) (ref.func $i32_f32_r_f32) (ref.func $f32_f32_f32_f32_r_v))

  (func $fold-callref (result i32)
    i32.const 1
    ref.func $i32_r_i32
    call_ref
    drop
    i32.const 2
    ref.func $i32_r_i32
    call_ref)

  (func $fold-call-2
    f32.const 0
    f32.const 1
    f32.const 2
    i32.const 3
    f32.const 4
    ref.func $i32_f32_r_f32
    call_ref
    ref.func $f32_f32_f32_f32_r_v
    call_ref)
)

(;; STDOUT ;;;
(module
  (type (;0;) (func (param i32) (result i32)))
  (type (;1;) (func (param i32 f32) (result f32)))
  (type (;2;) (func (param f32 f32 f32 f32)))
  (type (;3;) (func (result i32)))
  (type (;4;) (func))
  (func (;0;) (type 0) (param i32) (result i32)
    (i32.const 1))
  (func (;1;) (type 1) (param i32 f32) (result f32)
    (f32.const 0x0p+0 (;=0;)))
  (func (;2;) (type 2) (param f32 f32 f32 f32))
  (func (;3;) (type 3) (result i32)
    (drop
      (call_ref (i32.const 1)
        (ref.func 0)))
    (call_ref (i32.const 2)
      (ref.func 0)))
  (func (;4;) (type 4)
    (call_ref (f32.const 0x0p+0 (;=0;))
      (f32.const 0x1p+0 (;=1;))
      (f32.const 0x1p+1 (;=2;))
      (call_ref (i32.const 3)
        (f32.const 0x1p+2 (;=4;))
        (ref.func 1))
      (ref.func 2)))
  (elem (;0;) declare func 0 1 2))
;;; STDOUT ;;)
