| ;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. |
| |
| ;; RUN: wasm-opt %s --vacuum --fuzz-exec -all -q -o /dev/null 2>&1 | filecheck %s |
| ;; Test the effect of vaccum on delegation. The delegate target must not |
| ;; "escape" the current function scope and affect anything external, that is, |
| ;; it must be cleared on function exit. |
| |
| (module |
| (tag $tag$0 (param i32)) |
| ;; CHECK: [fuzz-exec] calling export-1 |
| ;; CHECK-NEXT: [exception thrown: tag$0 0] |
| (func $export-1 (export "export-1") |
| (try |
| (do |
| (try |
| (do |
| (throw $tag$0 |
| (i32.const 0) |
| ) |
| ) |
| ;; A delegation that leads to the caller. This sets the delegate field on |
| ;; this function scope. |
| (delegate 1) |
| ) |
| ) |
| (catch_all |
| (nop) |
| ) |
| ) |
| ) |
| ;; CHECK: [fuzz-exec] calling export-2 |
| ;; CHECK-NEXT: [trap unreachable] |
| (func $export-2 (export "export-2") |
| (call $inner) |
| (unreachable) |
| ) |
| (func $inner |
| ;; This inner function must not notice the delegate field that was set by |
| ;; the call to the previous export (if it does notice it, it would delegate |
| ;; to the caller or something else invalid, and the execution results would |
| ;; differ, causing fuzz-exec to fail). |
| (try |
| (do |
| (throw $tag$0 |
| (i32.const 0) |
| ) |
| ) |
| (catch_all |
| (nop) |
| ) |
| ) |
| ) |
| ) |
| ;; CHECK: [fuzz-exec] calling export-1 |
| ;; CHECK-NEXT: [exception thrown: tag$0 0] |
| |
| ;; CHECK: [fuzz-exec] calling export-2 |
| ;; CHECK-NEXT: [trap unreachable] |
| ;; CHECK-NEXT: [fuzz-exec] comparing export-1 |
| ;; CHECK-NEXT: [fuzz-exec] comparing export-2 |