File tree Expand file tree Collapse file tree 1 file changed +19
-2
lines changed Expand file tree Collapse file tree 1 file changed +19
-2
lines changed Original file line number Diff line number Diff line change @@ -1104,14 +1104,31 @@ unsafe fn release_shared(ptr: *mut Shared) {
1104
1104
Box :: from_raw ( ptr) ;
1105
1105
}
1106
1106
1107
+ // Ideally we would always use this version of `ptr_map` since it is strict
1108
+ // provenance compatible, but it results in worse codegen. We will however still
1109
+ // use it on miri because it gives better diagnostics for people who test bytes
1110
+ // code with miri.
1111
+ //
1112
+ // See https://github.com/tokio-rs/bytes/pull/545 for more info.
1113
+ #[ cfg( miri) ]
1107
1114
fn ptr_map < F > ( ptr : * mut u8 , f : F ) -> * mut u8
1108
1115
where
1109
1116
F : FnOnce ( usize ) -> usize ,
1110
1117
{
1111
1118
let old_addr = ptr as usize ;
1112
1119
let new_addr = f ( old_addr) ;
1113
- // this optimizes better than `ptr.wrapping_add(new_addr.wrapping_sub(old_addr))`
1114
- ptr. wrapping_sub ( old_addr) . wrapping_add ( new_addr)
1120
+ let diff = new_addr. wrapping_sub ( old_addr) ;
1121
+ ptr. wrapping_add ( diff)
1122
+ }
1123
+
1124
+ #[ cfg( not( miri) ) ]
1125
+ fn ptr_map < F > ( ptr : * mut u8 , f : F ) -> * mut u8
1126
+ where
1127
+ F : FnOnce ( usize ) -> usize ,
1128
+ {
1129
+ let old_addr = ptr as usize ;
1130
+ let new_addr = f ( old_addr) ;
1131
+ new_addr as * mut u8
1115
1132
}
1116
1133
1117
1134
// compile-fails
You can’t perform that action at this time.
0 commit comments