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