diff --git a/lib/runtime/src/instance.rs b/lib/runtime/src/instance.rs index 64c90b6622..5d89e95aab 100644 --- a/lib/runtime/src/instance.rs +++ b/lib/runtime/src/instance.rs @@ -329,7 +329,7 @@ fn check_table_init_bounds(instance: &mut Instance) -> Result<(), InstantiationE } else { unsafe { instance.vmctx.imported_global(base).from } }; - start += unsafe { *(&*global).as_i32() } as u32 as usize; + start += unsafe { *(&*global).as_u32() } as usize; } // TODO: Refactor this. @@ -368,7 +368,7 @@ fn check_memory_init_bounds( } else { unsafe { instance.vmctx.imported_global(base).from } }; - start += unsafe { *(&*global).as_i32() } as u32 as usize; + start += unsafe { *(&*global).as_u32() } as usize; } // TODO: Refactor this. diff --git a/lib/runtime/src/vmcontext.rs b/lib/runtime/src/vmcontext.rs index c3327f8be0..29da5e1891 100644 --- a/lib/runtime/src/vmcontext.rs +++ b/lib/runtime/src/vmcontext.rs @@ -295,6 +295,18 @@ impl VMGlobalDefinition { &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i32) } + /// Return a reference to the value as a u32. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u32(&self) -> &u32 { + &*(self.storage.as_ref().as_ptr() as *const u8 as *const u32) + } + + /// Return a mutable reference to the value as an u32. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u32_mut(&mut self) -> &mut u32 { + &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut u32) + } + /// Return a reference to the value as an i64. #[allow(clippy::cast_ptr_alignment)] pub unsafe fn as_i64(&self) -> &i64 { @@ -307,6 +319,18 @@ impl VMGlobalDefinition { &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i64) } + /// Return a reference to the value as an u64. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u64(&self) -> &u64 { + &*(self.storage.as_ref().as_ptr() as *const u8 as *const u64) + } + + /// Return a mutable reference to the value as an u64. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u64_mut(&mut self) -> &mut u64 { + &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut u64) + } + /// Return a reference to the value as an f32. #[allow(clippy::cast_ptr_alignment)] pub unsafe fn as_f32(&self) -> &f32 {