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