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

;; Check that we can refine signatures to contain exact references correctly.

(module
 ;; CHECK:      (rec
 ;; CHECK-NEXT:  (type $f (func))
 (type $f (func))

 ;; CHECK:       (type $1 (func (param (ref null (exact $f))) (result (ref null (exact $f)))))

 ;; CHECK:      (func $foo (type $1) (param $0 (ref null (exact $f))) (result (ref null (exact $f)))
 ;; CHECK-NEXT:  (local $1 (ref null (exact $f)))
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $foo
 ;; CHECK-NEXT:    (local.get $1)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (local.get $1)
 ;; CHECK-NEXT: )
 (func $foo (param funcref) (result funcref)
  (local (ref null (exact $f)))
  (drop
   (call $foo
    (local.get 1)
   )
  )
  (local.get 1)
 )
)
