blob: 5701f64458722ba3e33bead04165201bc5c73669 [file]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; Test that the label of a legacy `try` survives the binary format even when
;; nothing branches to it and nothing delegates to it. Unlike an `if`, a `try`
;; can hold a name in Binaryen IR, so keeping it costs nothing.
;; RUN: wasm-as %s -all -g -o %t.wasm
;; RUN: wasm-dis %t.wasm -all -o - | filecheck %s --check-prefix=CHECK-BIN
;; RUN: wasm-as %s -all -o %t.nodebug.wasm
;; RUN: wasm-dis %t.nodebug.wasm -all -o - | filecheck %s --check-prefix=CHECK-BIN-NODEBUG
(module
;; CHECK-BIN: (type $0 (func))
;; CHECK-BIN: (tag $e (type $0))
(tag $e)
;; CHECK-BIN: (func $f (type $0)
;; CHECK-BIN-NEXT: (try $plain-try
;; CHECK-BIN-NEXT: (do
;; CHECK-BIN-NEXT: (nop)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (catch_all
;; CHECK-BIN-NEXT: (nop)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (block $block
;; CHECK-BIN-NEXT: (try $branched-try
;; CHECK-BIN-NEXT: (do
;; CHECK-BIN-NEXT: (br $block)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (catch_all
;; CHECK-BIN-NEXT: (nop)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (try $delegating
;; CHECK-BIN-NEXT: (do
;; CHECK-BIN-NEXT: (try
;; CHECK-BIN-NEXT: (do
;; CHECK-BIN-NEXT: (nop)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (delegate $delegating)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (catch_all
;; CHECK-BIN-NEXT: (nop)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $f
;; Nothing targets this one.
(try $plain-try
(do (nop))
(catch_all (nop))
)
;; A branch to a try needs a wrapper block. The name stays on the try and the
;; block gets a generated one.
(try $branched-try
(do (br $branched-try))
(catch_all (nop))
)
;; A delegate targets the try's own label.
(try $delegating
(do (try (do (nop)) (delegate $delegating)))
(catch_all (nop))
)
)
)
;; CHECK-BIN-NODEBUG: (type $0 (func))
;; CHECK-BIN-NODEBUG: (tag $tag$0 (type $0))
;; CHECK-BIN-NODEBUG: (func $0 (type $0)
;; CHECK-BIN-NODEBUG-NEXT: (try
;; CHECK-BIN-NODEBUG-NEXT: (do
;; CHECK-BIN-NODEBUG-NEXT: (nop)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (catch_all
;; CHECK-BIN-NODEBUG-NEXT: (nop)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (block $block
;; CHECK-BIN-NODEBUG-NEXT: (try
;; CHECK-BIN-NODEBUG-NEXT: (do
;; CHECK-BIN-NODEBUG-NEXT: (br $block)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (catch_all
;; CHECK-BIN-NODEBUG-NEXT: (nop)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (try $label
;; CHECK-BIN-NODEBUG-NEXT: (do
;; CHECK-BIN-NODEBUG-NEXT: (try
;; CHECK-BIN-NODEBUG-NEXT: (do
;; CHECK-BIN-NODEBUG-NEXT: (nop)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (delegate $label)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (catch_all
;; CHECK-BIN-NODEBUG-NEXT: (nop)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )