diff options
Diffstat (limited to 'library/alloc/src/sync.rs')
| -rw-r--r-- | library/alloc/src/sync.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/library/alloc/src/sync.rs b/library/alloc/src/sync.rs index ba3187294e6..e2b9890850b 100644 --- a/library/alloc/src/sync.rs +++ b/library/alloc/src/sync.rs @@ -895,7 +895,8 @@ impl<T: ?Sized> Arc<T> { let offset = data_offset(ptr); // Reverse the offset to find the original ArcInner. - let arc_ptr = (ptr as *mut ArcInner<T>).set_ptr_value((ptr as *mut u8).offset(-offset)); + let arc_ptr = + (ptr as *mut u8).offset(-offset).with_metadata_of(ptr as *mut ArcInner<T>); Self::from_ptr(arc_ptr) } @@ -1182,7 +1183,7 @@ impl<T: ?Sized> Arc<T> { Self::allocate_for_layout( Layout::for_value(&*ptr), |layout| Global.allocate(layout), - |mem| (ptr as *mut ArcInner<T>).set_ptr_value(mem) as *mut ArcInner<T>, + |mem| mem.with_metadata_of(ptr as *mut ArcInner<T>), ) } } @@ -1888,7 +1889,7 @@ impl<T: ?Sized> Weak<T> { let offset = unsafe { data_offset(ptr) }; // Thus, we reverse the offset to get the whole RcBox. // SAFETY: the pointer originated from a Weak, so this offset is safe. - unsafe { (ptr as *mut ArcInner<T>).set_ptr_value((ptr as *mut u8).offset(-offset)) } + unsafe { (ptr as *mut u8).offset(-offset).with_metadata_of(ptr as *mut ArcInner<T>) } }; // SAFETY: we now have recovered the original Weak pointer, so can create the Weak. |
