(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (event $e (attr 0) (param i32)) (func $cant-push-past-call (local $x i32) (block $out (local.set $x (i32.const 1) ) (call $cant-push-past-call) (drop (i32.const 1) ) (br_if $out (i32.const 2) ) (drop (local.get $x) ) ) ) (func $cant-push-past-throw (local $x i32) (block $out (local.set $x (i32.const 1) ) (throw $e (i32.const 0) ) (drop (i32.const 1) ) (br_if $out (i32.const 2) ) (drop (local.get $x) ) ) ) (func $can-push-past-throw-within-try (local $x i32) (block $out (try (do (throw $e (i32.const 0) ) ) (catch (drop (pop exnref) ) ) ) (drop (i32.const 1) ) (br_if $out (i32.const 2) ) (local.set $x (i32.const 1) ) (drop (local.get $x) ) ) ) (func $cant-push-past-rethrow-within-catch (local $x i32) (block $out (local.set $x (i32.const 1) ) (try (do (throw $e (i32.const 0) ) ) (catch (rethrow (pop exnref) ) ) ) (drop (i32.const 1) ) (br_if $out (i32.const 2) ) (drop (local.get $x) ) ) ) (func $push-past-br-on-exn (local $x i32) (local $y exnref) (drop (block $out (result i32) (drop (br_on_exn $out $e (local.get $y) ) ) (local.set $x (i32.const 1) ) (local.get $x) ) ) ) )