blob: ce94582880277e9c8130f72368a2821eddcb4627 [file] [log] [blame]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: wasm-opt %s -all -o %t.text.wast -g -S
;; RUN: wasm-as %s -all -g -o %t.wasm
;; RUN: wasm-dis %t.wasm -all -o %t.bin.wast
;; RUN: wasm-as %s -all -o %t.nodebug.wasm
;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.bin.nodebug.wast
;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT
;; RUN: cat %t.bin.wast | filecheck %s --check-prefix=CHECK-BIN
;; RUN: cat %t.bin.nodebug.wast | filecheck %s --check-prefix=CHECK-BIN-NODEBUG
(module
;; CHECK-TEXT: (type $ft (func (param i32) (result i32)))
;; CHECK-BIN: (type $ft (func (param i32) (result i32)))
(type $ft (func (param i32) (result i32)))
;; CHECK-TEXT: (type $ct (cont $ft))
;; CHECK-BIN: (type $ct (cont $ft))
(type $ct (cont $ft))
;; CHECK-TEXT: (type $2 (func (result (ref $ct))))
;; CHECK-TEXT: (type $3 (func (result (ref cont))))
;; CHECK-TEXT: (elem declare func $g)
;; CHECK-TEXT: (func $f (type $2) (result (ref $ct))
;; CHECK-TEXT-NEXT: (block ;; (replaces unreachable ContNew we can't emit)
;; CHECK-TEXT-NEXT: (drop
;; CHECK-TEXT-NEXT: (unreachable)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: (unreachable)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (type $2 (func (result (ref $ct))))
;; CHECK-BIN: (type $3 (func (result (ref cont))))
;; CHECK-BIN: (elem declare func $g)
;; CHECK-BIN: (func $f (type $2) (result (ref $ct))
;; CHECK-BIN-NEXT: (unreachable)
;; CHECK-BIN-NEXT: )
(func $f (result (ref $ct))
(cont.new $ct (unreachable)))
;; CHECK-TEXT: (func $g (type $ft) (param $0 i32) (result i32)
;; CHECK-TEXT-NEXT: (i32.const 123)
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $g (type $ft) (param $0 i32) (result i32)
;; CHECK-BIN-NEXT: (i32.const 123)
;; CHECK-BIN-NEXT: )
(func $g (param i32) (result i32)
(i32.const 123)
)
;; CHECK-BIN-NODEBUG: (type $0 (func (param i32) (result i32)))
;; CHECK-BIN-NODEBUG: (type $1 (cont $0))
;; CHECK-BIN-NODEBUG: (type $2 (func (result (ref $1))))
;; CHECK-BIN-NODEBUG: (type $3 (func (result (ref cont))))
;; CHECK-BIN-NODEBUG: (elem declare func $1)
(elem declare func $g)
;; CHECK-TEXT: (func $h (type $2) (result (ref $ct))
;; CHECK-TEXT-NEXT: (cont.new $ct
;; CHECK-TEXT-NEXT: (ref.func $g)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $h (type $2) (result (ref $ct))
;; CHECK-BIN-NEXT: (cont.new $ct
;; CHECK-BIN-NEXT: (ref.func $g)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $h (result (ref $ct))
(cont.new $ct (ref.func $g))
)
;; CHECK-TEXT: (func $k (type $3) (result (ref cont))
;; CHECK-TEXT-NEXT: (cont.new $ct
;; CHECK-TEXT-NEXT: (ref.null nofunc)
;; CHECK-TEXT-NEXT: )
;; CHECK-TEXT-NEXT: )
;; CHECK-BIN: (func $k (type $3) (result (ref cont))
;; CHECK-BIN-NEXT: (cont.new $ct
;; CHECK-BIN-NEXT: (ref.null nofunc)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $k (result (ref cont))
(cont.new $ct (ref.null nofunc)))
)
;; CHECK-BIN-NODEBUG: (func $0 (type $2) (result (ref $1))
;; CHECK-BIN-NODEBUG-NEXT: (unreachable)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $1 (type $0) (param $0 i32) (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 123)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $2 (type $2) (result (ref $1))
;; CHECK-BIN-NODEBUG-NEXT: (cont.new $1
;; CHECK-BIN-NODEBUG-NEXT: (ref.func $1)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $3 (type $3) (result (ref cont))
;; CHECK-BIN-NODEBUG-NEXT: (cont.new $1
;; CHECK-BIN-NODEBUG-NEXT: (ref.null nofunc)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )