| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| |
| ;; Regression test for a bug in IRBuilder would assign end offsets incorrectly |
| ;; when control flow structures required wrapping. |
| |
| ;; RUN: env BINARYEN_PRINT_FULL=1 wasm-opt %s.wasm -all --debuginfo --print -o /dev/null | filecheck %s |
| |
| ;; Test module generated with `wasm-tools parse` on the following wat: |
| ;; (module |
| ;; ;; Add a dummy DWARF section so the parser will collect code offsets. |
| ;; (@custom ".debug_info" "") |
| ;; (tag $e) |
| ;; (func |
| ;; ;; The end offset would never be set because it would be assigned to the |
| ;; ;; wrapper block instead. |
| ;; try |
| ;; br 0 |
| ;; catch $e |
| ;; end |
| ;; ;; Same here. Two instructions having the same end offset (0) would cause an |
| ;; ;; assertion failure. |
| ;; try |
| ;; br 0 |
| ;; catch $e |
| ;; end |
| ;; ) |
| ;; ) |
| |
| ;; CHECK: (type $0 (func)) |
| |
| ;; CHECK: (tag $e (type $0)) |
| |
| ;; CHECK: (func $0 (type $0) (; (ref (exact $func.0)) ;) |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: (block (; none ;) |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: ;; code offset: 0x3 - 0xa |
| ;; CHECK-NEXT: (block $label (; none ;) |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: ;; code offset: 0x5 - 0x7 |
| ;; CHECK-NEXT: (br $label) (; unreachable ;) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ;; code offset: 0x7 |
| ;; CHECK-NEXT: (catch $e |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: (block (; none ;) |
| ;; CHECK-NEXT: ) ;; end block (; none ;) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) ;; end try (; none ;) |
| ;; CHECK-NEXT: ) ;; end block label |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: ;; code offset: 0xa - 0x11 |
| ;; CHECK-NEXT: (block $label1 (; none ;) |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: ;; code offset: 0xc - 0xe |
| ;; CHECK-NEXT: (br $label1) (; unreachable ;) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ;; code offset: 0xe |
| ;; CHECK-NEXT: (catch $e |
| ;; CHECK-NEXT: ;;@ |
| ;; CHECK-NEXT: (block (; none ;) |
| ;; CHECK-NEXT: ) ;; end block (; none ;) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) ;; end try (; none ;) |
| ;; CHECK-NEXT: ) ;; end block label1 (; none ;) |
| ;; CHECK-NEXT: ) ;; end block (; none ;) |
| ;; CHECK-NEXT: ) |