diff --git a/src/c-writer.cc b/src/c-writer.cc index 923397bf98..74252fb599 100644 --- a/src/c-writer.cc +++ b/src/c-writer.cc @@ -4187,7 +4187,9 @@ void CWriter::Write(const ExprList& exprs) { Write("wasm_rt_load_exception(", ex, "_tag, ", ex, "_size, ", ex, ");", Newline()); WriteThrow(); - } break; + // Stop processing this ExprList, since the following are unreachable. + return; + } case ExprType::Try: { const TryExpr& tryexpr = *cast(&expr); diff --git a/test/wasm2c/unreachable-after-rethrow.txt b/test/wasm2c/unreachable-after-rethrow.txt new file mode 100644 index 0000000000..e4bffbfcfd --- /dev/null +++ b/test/wasm2c/unreachable-after-rethrow.txt @@ -0,0 +1,15 @@ +;;; TOOL: run-spec-wasm2c +;;; ARGS*: --enable-exceptions +(module + (memory 1) + (func (export "test") + try + nop + catch_all + rethrow 0 + i32.store + end)) +(assert_return (invoke "test")) +(;; STDOUT ;;; +1/1 tests passed. +;;; STDOUT ;;)