;; 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: )
