diff --git a/crates/core/src/typed.rs b/crates/core/src/typed.rs index 93669c0e39..c5c123fdb1 100644 --- a/crates/core/src/typed.rs +++ b/crates/core/src/typed.rs @@ -93,7 +93,12 @@ macro_rules! impl_from_typed_value_for { // since the whole translation process assumes that Wasm validation // was already performed and thus type checking does not necessarily // need to happen redundantly outside of debug builds. - debug_assert!(matches!(typed_value.ty, <$ty as Typed>::TY)); + debug_assert!( + matches!(typed_value.ty, <$ty as Typed>::TY), + "type mismatch: expected {:?} but found {:?}", + <$ty as Typed>::TY, + typed_value.ty, + ); Self::from(typed_value.value) } } diff --git a/crates/core/src/untyped.rs b/crates/core/src/untyped.rs index f04504a896..add2c656e1 100644 --- a/crates/core/src/untyped.rs +++ b/crates/core/src/untyped.rs @@ -35,6 +35,12 @@ pub trait ReadAs { fn read_as(&self) -> T; } +impl ReadAs for UntypedVal { + fn read_as(&self) -> UntypedVal { + *self + } +} + macro_rules! impl_read_as_for_int { ( $( $int:ty ),* $(,)? ) => { $( @@ -83,6 +89,12 @@ pub trait WriteAs { fn write_as(&mut self, value: T); } +impl WriteAs for UntypedVal { + fn write_as(&mut self, value: UntypedVal) { + *self = value; + } +} + macro_rules! impl_write_as_for_int { ( $( $int:ty as $as:ty ),* $(,)? ) => { $( diff --git a/crates/fuzz/src/oracle/wasmi.rs b/crates/fuzz/src/oracle/wasmi.rs index b585a513b8..1a22b5cd08 100644 --- a/crates/fuzz/src/oracle/wasmi.rs +++ b/crates/fuzz/src/oracle/wasmi.rs @@ -166,16 +166,16 @@ impl From for FuzzError { return FuzzError::Other; }; let trap_code = match trap_code { - TrapCode::UnreachableCodeReached => crate::TrapCode::UnreachableCodeReached, - TrapCode::MemoryOutOfBounds => crate::TrapCode::MemoryOutOfBounds, - TrapCode::TableOutOfBounds => crate::TrapCode::TableOutOfBounds, - TrapCode::IndirectCallToNull => crate::TrapCode::IndirectCallToNull, - TrapCode::IntegerDivisionByZero => crate::TrapCode::IntegerDivisionByZero, - TrapCode::IntegerOverflow => crate::TrapCode::IntegerOverflow, - TrapCode::BadConversionToInteger => crate::TrapCode::BadConversionToInteger, - TrapCode::StackOverflow => crate::TrapCode::StackOverflow, - TrapCode::BadSignature => crate::TrapCode::BadSignature, - TrapCode::OutOfFuel | TrapCode::GrowthOperationLimited => return FuzzError::Other, + | TrapCode::UnreachableCodeReached => crate::TrapCode::UnreachableCodeReached, + | TrapCode::MemoryOutOfBounds => crate::TrapCode::MemoryOutOfBounds, + | TrapCode::TableOutOfBounds => crate::TrapCode::TableOutOfBounds, + | TrapCode::IndirectCallToNull => crate::TrapCode::IndirectCallToNull, + | TrapCode::IntegerDivisionByZero => crate::TrapCode::IntegerDivisionByZero, + | TrapCode::IntegerOverflow => crate::TrapCode::IntegerOverflow, + | TrapCode::BadConversionToInteger => crate::TrapCode::BadConversionToInteger, + | TrapCode::StackOverflow => crate::TrapCode::StackOverflow, + | TrapCode::BadSignature => crate::TrapCode::BadSignature, + | TrapCode::OutOfFuel | TrapCode::GrowthOperationLimited => return FuzzError::Other, }; FuzzError::Trap(trap_code) } diff --git a/crates/ir2/build/display/op_code.rs b/crates/ir2/build/display/op_code.rs index 23ae8fe46d..bfb9cd889f 100644 --- a/crates/ir2/build/display/op_code.rs +++ b/crates/ir2/build/display/op_code.rs @@ -75,6 +75,7 @@ impl Display for DisplayOpCode<&'_ Isa> { \n\ {indent}impl TryFrom for OpCode {{\n\ {indent} type Error = InvalidOpCode;\n\ + {indent} #[inline(always)] {indent} fn try_from(value: u16) -> Result {{\n\ {indent} let op_code = match value {{\n\ {match_arms_tryfrom},\n\ diff --git a/crates/ir2/build/op.rs b/crates/ir2/build/op.rs index d2ce0896f5..bf944bd0b6 100644 --- a/crates/ir2/build/op.rs +++ b/crates/ir2/build/op.rs @@ -2150,7 +2150,7 @@ impl TableSetOp { } pub fn fields(&self) -> [Field; 3] { - [self.index_field(), self.value_field(), self.table_field()] + [self.table_field(), self.index_field(), self.value_field()] } } diff --git a/crates/ir2/src/decode/mod.rs b/crates/ir2/src/decode/mod.rs index aba08590a2..fdb92dd175 100644 --- a/crates/ir2/src/decode/mod.rs +++ b/crates/ir2/src/decode/mod.rs @@ -169,6 +169,7 @@ macro_rules! impl_decode_fallible_using { ( $($ty:ty as $as:ty = $e:expr),* $(,)? ) => { $( impl Decode for $ty { + #[inline(always)] fn decode(decoder: &mut D) -> Result { $e(<$as as Decode>::decode(decoder)?) } diff --git a/crates/ir2/src/index.rs b/crates/ir2/src/index.rs index 16676930f4..c03691a005 100644 --- a/crates/ir2/src/index.rs +++ b/crates/ir2/src/index.rs @@ -62,6 +62,12 @@ macro_rules! define_index { } for_each_index!(define_index); +impl From for u32 { + fn from(value: Memory) -> Self { + u32::from(value.0) + } +} + impl TryFrom for Memory { type Error = Error;