blob: b6dedb63588d779a8c49676f906a07058c8ab1ff [file]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; Test that we write explicit label names to the name section with -g, and
;; that we write none of them without it. Which names reach the name section is
;; checked directly in label-names-section.wast.
;; 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 (param i32) (result i32)))
;; CHECK-BIN: (func $f (type $0) (param $p i32) (result i32)
;; CHECK-BIN-NEXT: (drop
;; CHECK-BIN-NEXT: (i32.const 0)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (block $named-block (result i32)
;; CHECK-BIN-NEXT: (loop $named-loop
;; CHECK-BIN-NEXT: (br_if $named-loop
;; CHECK-BIN-NEXT: (local.get $p)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (block $block
;; CHECK-BIN-NEXT: (br_if $block
;; CHECK-BIN-NEXT: (local.get $p)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (block $unused-block
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (block $used-if
;; CHECK-BIN-NEXT: (if
;; CHECK-BIN-NEXT: (local.get $p)
;; CHECK-BIN-NEXT: (then
;; CHECK-BIN-NEXT: (br $used-if)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (i32.const 42)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $f (param $p i32) (result i32)
(drop (i32.const 0))
(block $named-block (result i32)
(loop $named-loop
(br_if $named-loop (local.get $p))
)
(block ;; unnamed: still takes a label index
(br_if 0 (local.get $p))
)
(block $unused-block)
(if $used-if (local.get $p) (then (br $used-if)))
(i32.const 42)
)
)
;; Branches to a try target a block wrapping it, and delegates target the try
;; itself. Either way the name stays on the try, and the wrapping block, when
;; one is needed, gets a generated name.
;; CHECK-BIN: (func $try (type $0) (param $p i32) (result i32)
;; CHECK-BIN-NEXT: (drop
;; CHECK-BIN-NEXT: (block $block (result i32)
;; CHECK-BIN-NEXT: (try $branch-only (result i32)
;; CHECK-BIN-NEXT: (do
;; CHECK-BIN-NEXT: (drop
;; CHECK-BIN-NEXT: (br_if $block
;; CHECK-BIN-NEXT: (i32.const 0)
;; CHECK-BIN-NEXT: (local.get $p)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (i32.const 1)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (catch_all
;; CHECK-BIN-NEXT: (i32.const 2)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (block $block1 (result i32)
;; CHECK-BIN-NEXT: (try $both (result i32)
;; CHECK-BIN-NEXT: (do
;; CHECK-BIN-NEXT: (drop
;; CHECK-BIN-NEXT: (br_if $block1
;; CHECK-BIN-NEXT: (i32.const 0)
;; CHECK-BIN-NEXT: (local.get $p)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (try
;; CHECK-BIN-NEXT: (do
;; CHECK-BIN-NEXT: (nop)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (delegate $both)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (i32.const 1)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: (catch_all
;; CHECK-BIN-NEXT: (i32.const 2)
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
;; CHECK-BIN-NEXT: )
(func $try (param $p i32) (result i32)
(drop
(try $branch-only (result i32)
(do (drop (br_if $branch-only (i32.const 0) (local.get $p))) (i32.const 1))
(catch_all (i32.const 2))
)
)
(try $both (result i32)
(do
(drop (br_if $both (i32.const 0) (local.get $p)))
(try (do (nop)) (delegate $both))
(i32.const 1)
)
(catch_all (i32.const 2))
)
)
)
;; CHECK-BIN-NODEBUG: (type $0 (func (param i32) (result i32)))
;; CHECK-BIN-NODEBUG: (func $0 (type $0) (param $0 i32) (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (drop
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (block (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (loop $label
;; CHECK-BIN-NODEBUG-NEXT: (br_if $label
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (block $block
;; CHECK-BIN-NODEBUG-NEXT: (br_if $block
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (block
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (block $block1
;; CHECK-BIN-NODEBUG-NEXT: (if
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: (then
;; CHECK-BIN-NODEBUG-NEXT: (br $block1)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 42)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG: (func $1 (type $0) (param $0 i32) (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (drop
;; CHECK-BIN-NODEBUG-NEXT: (block $block (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (try (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (do
;; CHECK-BIN-NODEBUG-NEXT: (drop
;; CHECK-BIN-NODEBUG-NEXT: (br_if $block
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0)
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (catch_all
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 2)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (block $block1 (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (try $label (result i32)
;; CHECK-BIN-NODEBUG-NEXT: (do
;; CHECK-BIN-NODEBUG-NEXT: (drop
;; CHECK-BIN-NODEBUG-NEXT: (br_if $block1
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0)
;; CHECK-BIN-NODEBUG-NEXT: (local.get $0)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; 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: (i32.const 1)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: (catch_all
;; CHECK-BIN-NODEBUG-NEXT: (i32.const 2)
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )
;; CHECK-BIN-NODEBUG-NEXT: )