blob: 828a84e9cca0bf937d8f20e14b5fb63ff51addef [file]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: wasm-opt -all %s.wasm -q -S -o - | filecheck %s
;; Test that we read label names from the name section. The wasm file was
;; produced by wasm-tools from
;;
;; (module
;; (tag $e)
;; (func $f (param $p i32) (result i32)
;; (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)))
;; (if $unused-if (local.get $p) (then (nop)))
;; (block $handler
;; (try_table $used-try-table (catch_all $handler)
;; (br $used-try-table)
;; )
;; )
;; (i32.const 42)
;; )
;; )
;; )
;;
;; The unnamed block takes label index 2, so reading the names of the labels
;; after it depends on counting it. `if` and `try_table` cannot hold names in
;; Binaryen IR, so their names are only used when they are branched to, which
;; requires a wrapper block anyhow: $used-if and $used-try-table are preserved,
;; while $unused-if is dropped rather than introducing a block for it.
;; CHECK: (type $0 (func))
;; CHECK: (type $1 (func (param i32) (result i32)))
;; CHECK: (tag $e (type $0))
;; CHECK: (func $f (type $1) (param $p i32) (result i32)
;; CHECK-NEXT: (block $named-block (result i32)
;; CHECK-NEXT: (loop $named-loop
;; CHECK-NEXT: (br_if $named-loop
;; CHECK-NEXT: (local.get $p)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block $block
;; CHECK-NEXT: (br_if $block
;; CHECK-NEXT: (local.get $p)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block $unused-block
;; CHECK-NEXT: )
;; CHECK-NEXT: (block $used-if
;; CHECK-NEXT: (if
;; CHECK-NEXT: (local.get $p)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (br $used-if)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (if
;; CHECK-NEXT: (local.get $p)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block $handler
;; CHECK-NEXT: (block $used-try-table
;; CHECK-NEXT: (try_table (catch_all $handler)
;; CHECK-NEXT: (br $used-try-table)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 42)
;; CHECK-NEXT: )
;; CHECK-NEXT: )