@ 261106.8
current
;; 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: )