blob: 46c1053b981f56953eb1b610abccf94056fb54ee [file] [edit]
;; 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: )