diff --git a/lib/wasm/src/code_translator.rs b/lib/wasm/src/code_translator.rs index 0ffa89806e..0b540782f6 100644 --- a/lib/wasm/src/code_translator.rs +++ b/lib/wasm/src/code_translator.rs @@ -118,11 +118,7 @@ pub fn translate_function_body( let parser_state = parser.read(); match *parser_state { ParserState::CodeOperator(ref op) => { - debug_assert!( - state.phantom_unreachable_stack_depth == 0 || - state.real_unreachable_stack_depth > 0 - ); - if state.real_unreachable_stack_depth > 0 { + if state.in_unreachable_code() { translate_unreachable_operator(op, &mut builder, &mut state) } else { translate_operator( diff --git a/lib/wasm/src/state.rs b/lib/wasm/src/state.rs index 5e9d0186e5..d9fabb1194 100644 --- a/lib/wasm/src/state.rs +++ b/lib/wasm/src/state.rs @@ -200,4 +200,14 @@ impl TranslationState { reachable: false, }); } + + /// Test if the translation state is currently in unreachable code. + pub fn in_unreachable_code(&self) -> bool { + if self.real_unreachable_stack_depth > 0 { + true + } else { + debug_assert_eq!(self.phantom_unreachable_stack_depth, 0, "in reachable code"); + false + } + } }