mirror of
https://github.com/tokio-rs/bytes.git
synced 2026-08-27 00:00:17 +02:00
Only avoid pointer casts when using miri
This commit is contained in:
+13
-2
@@ -1104,14 +1104,25 @@ unsafe fn release_shared(ptr: *mut Shared) {
|
|||||||
Box::from_raw(ptr);
|
Box::from_raw(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(miri)]
|
||||||
fn ptr_map<F>(ptr: *mut u8, f: F) -> *mut u8
|
fn ptr_map<F>(ptr: *mut u8, f: F) -> *mut u8
|
||||||
where
|
where
|
||||||
F: FnOnce(usize) -> usize,
|
F: FnOnce(usize) -> usize,
|
||||||
{
|
{
|
||||||
let old_addr = ptr as usize;
|
let old_addr = ptr as usize;
|
||||||
let new_addr = f(old_addr);
|
let new_addr = f(old_addr);
|
||||||
// this optimizes better than `ptr.wrapping_add(new_addr.wrapping_sub(old_addr))`
|
let diff = new_addr.wrapping_sub(old_addr);
|
||||||
ptr.wrapping_sub(old_addr).wrapping_add(new_addr)
|
ptr.wrapping_add(diff)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(miri))]
|
||||||
|
fn ptr_map<F>(ptr: *mut u8, f: F) -> *mut u8
|
||||||
|
where
|
||||||
|
F: FnOnce(usize) -> usize,
|
||||||
|
{
|
||||||
|
let old_addr = ptr as usize;
|
||||||
|
let new_addr = f(old_addr);
|
||||||
|
new_addr as *mut u8
|
||||||
}
|
}
|
||||||
|
|
||||||
// compile-fails
|
// compile-fails
|
||||||
|
|||||||
Reference in New Issue
Block a user