| ;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. |
| ;; RUN: wasm-opt %s -all --strip-eh -S -o - | filecheck %s |
| |
| ;; Remove all EH instructions and tags. Converts 'throw's into 'unreachable's. |
| |
| (module |
| (tag $e-i32 (param i32)) |
| (tag $e-f32 (param f32)) |
| |
| ;; CHECK: (func $throw-i32 (type $0) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| (func $throw-i32 |
| (throw $e-i32 (i32.const 0)) |
| ) |
| ;; CHECK: (func $throw-f32 (type $0) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| (func $throw-f32 |
| (throw $e-f32 (f32.const 0.0)) |
| ) |
| |
| ;; CHECK: (func $try-catch (type $0) |
| ;; CHECK-NEXT: (call $throw-i32) |
| ;; CHECK-NEXT: ) |
| (func $try-catch |
| (try |
| (do |
| (call $throw-i32) |
| ) |
| (catch $e-i32 |
| (drop (pop i32)) |
| (call $throw-f32) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $try-catch2 (type $0) |
| ;; CHECK-NEXT: (call $throw-i32) |
| ;; CHECK-NEXT: (call $throw-f32) |
| ;; CHECK-NEXT: ) |
| (func $try-catch2 |
| (try |
| (do |
| (call $throw-i32) |
| (call $throw-f32) |
| ) |
| (catch $e-i32 |
| (drop (pop i32)) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $try-catch-all (type $0) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| (func $try-catch-all |
| (try |
| (do |
| (throw $e-i32 (i32.const 0)) |
| ) |
| (catch_all |
| (call $throw-f32) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $try-catch-nested (type $0) |
| ;; CHECK-NEXT: (call $throw-i32) |
| ;; CHECK-NEXT: ) |
| (func $try-catch-nested |
| (try |
| (do |
| (try |
| (do |
| (call $throw-i32) |
| ) |
| (catch $e-i32 |
| (drop (pop i32)) |
| ) |
| ) |
| ) |
| (catch_all |
| (try |
| (do |
| (call $throw-f32) |
| ) |
| (catch_all |
| (call $throw-f32) |
| ) |
| ) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $try-unreachable-body (type $1) (result i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-unreachable-body (result i32) |
| (i32.add |
| ;; This becomes unreachable while the parent expects i32, so this requires |
| ;; refinalization. |
| (try (result i32) |
| (do |
| (throw $e-i32 (i32.const 0)) |
| ) |
| (catch $e-i32 |
| (pop i32) |
| ) |
| ) |
| (i32.const 0) |
| ) |
| ) |
| ) |