Skip to content

Commit

Permalink
Only avoid pointer casts when using miri
Browse files Browse the repository at this point in the history
  • Loading branch information
Darksonn committed Apr 29, 2022
1 parent 0a2c43a commit 89061c3
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/bytes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1104,14 +1104,25 @@ unsafe fn release_shared(ptr: *mut Shared) {
Box::from_raw(ptr);
}

#[cfg(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);
// this optimizes better than `ptr.wrapping_add(new_addr.wrapping_sub(old_addr))`
ptr.wrapping_sub(old_addr).wrapping_add(new_addr)
let diff = new_addr.wrapping_sub(old_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
Expand Down

0 comments on commit 89061c3

Please sign in to comment.