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