blob: 060dba2026e463d0c1161410f009375bbded780b [file] [edit]
;; 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
;; cont.bind places restrictions on signature refining.
(module
(rec
;; CHECK: (rec
;; CHECK-NEXT: (type $A (func (result (ref null $cont-A))))
(type $A (func (result (ref null $cont-A))))
;; CHECK: (type $B (func (result (ref null $cont-A))))
(type $B (func (result (ref null $cont-A))))
;; CHECK: (type $cont-A (cont $A))
(type $cont-A (cont $A))
;; CHECK: (type $cont-B (cont $B))
(type $cont-B (cont $B))
)
;; CHECK: (elem declare func $0)
;; CHECK: (func $1 (type $A) (result (ref null $cont-A))
;; CHECK-NEXT: (cont.bind $cont-B $cont-A
;; CHECK-NEXT: (cont.new $cont-B
;; CHECK-NEXT: (ref.func $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $1 (type $A) (result (ref null $cont-A))
;; cont.bind requires that the continuation type's results match, so we
;; cannot refine the type $A: if we make it return an exact result, we would
;; be binding a continuation that returns an inexact result to an exact one.
(cont.bind $cont-B $cont-A
(cont.new $cont-B
(ref.func $0)
)
)
)
;; CHECK: (func $0 (type $B) (result (ref null $cont-A))
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
(func $0 (type $B) (result (ref null $cont-A))
(unreachable)
)
)