diff --git a/lib/dynasm-backend/src/parse.rs b/lib/dynasm-backend/src/parse.rs index 73e2e0a8e..51b17417f 100644 --- a/lib/dynasm-backend/src/parse.rs +++ b/lib/dynasm-backend/src/parse.rs @@ -1,7 +1,7 @@ use crate::codegen::{CodegenError, FunctionCodeGenerator, ModuleCodeGenerator}; use std::sync::Arc; use wasmer_runtime_core::{ - backend::Backend, + backend::{Backend, ProtectedCaller}, module::{ DataInitializer, ExportIndex, ImportName, ModuleInfo, StringTable, StringTableBuilder, TableInitializer, @@ -38,7 +38,11 @@ impl From for LoadError { } } -pub fn read_module, FCG: FunctionCodeGenerator>( +pub fn read_module< + MCG: ModuleCodeGenerator, + FCG: FunctionCodeGenerator, + PC: ProtectedCaller, +>( wasm: &[u8], backend: Backend, mcg: &mut MCG, @@ -72,7 +76,6 @@ pub fn read_module, FCG: FunctionCodeGenerator>( loop { if reader.eof() { - mcg.finalize()?; return Ok(info); } @@ -285,10 +288,18 @@ pub fn read_module, FCG: FunctionCodeGenerator>( fcg.feed_local(ty, count as usize)?; } fcg.begin_body()?; + let mut last_is_return = false; for op in item.get_operators_reader()? { let op = op?; + last_is_return = match op { + Operator::Return => true, + _ => false, + }; fcg.feed_opcode(op)?; } + if !last_is_return { + fcg.feed_opcode(Operator::Return)?; + } fcg.finalize()?; } }