From 4cf5d19acefcf905f9e2d2d5a7603e90f58c15b5 Mon Sep 17 00:00:00 2001 From: Brian Carroll Date: Tue, 6 Dec 2022 20:23:34 +0000 Subject: [PATCH] wasm_interp: Fix bug where all arguments were being set as I32 --- crates/wasm_interp/src/call_stack.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/wasm_interp/src/call_stack.rs b/crates/wasm_interp/src/call_stack.rs index f6af7da50a..b6d6371a60 100644 --- a/crates/wasm_interp/src/call_stack.rs +++ b/crates/wasm_interp/src/call_stack.rs @@ -74,8 +74,18 @@ impl<'a> CallStack<'a> { // Pop arguments off the value stack and into locals for (i, type_byte) in arg_type_bytes.iter().copied().enumerate().rev() { let arg = value_stack.pop(); - assert_eq!(ValueType::from(arg), ValueType::from(type_byte)); + let ty = ValueType::from(arg); + let expected_type = ValueType::from(type_byte); + assert_eq!(ty, expected_type); self.set_local_help(i as u32, arg); + self.is_64.set( + frame_offset + i, + matches!(ty, ValueType::I64 | ValueType::F64), + ); + self.is_float.set( + frame_offset + i, + matches!(ty, ValueType::F32 | ValueType::F64), + ); } self.value_stack_bases.push(value_stack.len() as u32);