(module (event $e0 (attr 0) (param i32)) (func $exnref_test (param $0 exnref) (result exnref) (local.get $0) ) (func $foo) (func $bar) (func $eh_test (local $exn exnref) (try (throw $e0 (i32.const 0)) (catch ;; Multi-value is not available yet, so block can't take a value from ;; stack. So this uses locals for now. (local.set $exn (exnref.pop)) (drop (block $l0 (result i32) (rethrow (br_on_exn $l0 $e0 (local.get $exn)) ) ) ) ) ) ;; Try with a block label (try $l1 (br $l1) (catch (br $l1) ) ) ;; Empty try body (try (catch (drop (exnref.pop)) ) ) ;; Multiple instructions within try and catch bodies (try (block (call $foo) (call $bar) ) (catch (drop (exnref.pop)) (call $foo) (call $bar) ) ) ) ;; Test subtype relationship for br_on_exn and rethrow (func $subtype_test (try (catch (drop (exnref.pop)) (drop (block $l0 (result i32) (rethrow (br_on_exn $l0 $e0 (ref.null)) ) ) ) ) ) ) )