From d71150bd93a1ff16f4ddd7d91a7dc223641817d8 Mon Sep 17 00:00:00 2001 From: al8n Date: Sat, 26 Oct 2024 07:16:14 +0800 Subject: [PATCH] Update pointer.rs --- src/wal/pointer.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/wal/pointer.rs b/src/wal/pointer.rs index e95c4db0..0780e960 100644 --- a/src/wal/pointer.rs +++ b/src/wal/pointer.rs @@ -181,7 +181,7 @@ where impl<'a, K: ?Sized, V: ?Sized> TypeRef<'a> for GenericPointer { unsafe fn from_slice(src: &'a [u8]) -> Self { - let ptr = usize::from_le_bytes((&src[..PTR_SIZE]).try_into().unwrap()) as *const u8; + let ptr = usize_to_addr(usize::from_le_bytes((&src[..PTR_SIZE]).try_into().unwrap())); let mut offset = PTR_SIZE; let flag = EntryFlags::from_bits_retain(src[offset]); offset += 1; @@ -407,7 +407,7 @@ where impl<'a, K: ?Sized, V: ?Sized> TypeRef<'a> for GenericVersionPointer { unsafe fn from_slice(src: &'a [u8]) -> Self { - let ptr = usize::from_le_bytes((&src[..PTR_SIZE]).try_into().unwrap()) as *const u8; + let ptr = usize_to_addr(usize::from_le_bytes((&src[..PTR_SIZE]).try_into().unwrap())); let mut offset = PTR_SIZE; let flag = EntryFlags::from_bits_retain(src[offset]); offset += 1; @@ -445,3 +445,15 @@ impl WithVersion for GenericVersionPointer {} impl crate::sealed::GenericPointer for GenericVersionPointer {} impl WithoutVersion for GenericPointer {} impl crate::sealed::GenericPointer for GenericPointer {} + +#[cfg(not(miri))] +#[inline] +const fn usize_to_addr(addr: usize) -> *const T { + addr as *const T +} + +#[cfg(miri)] +#[inline] +fn usize_to_addr(addr: usize) -> *const T { + core::ptr::with_exposed_provenance(addr) +} \ No newline at end of file