Skip to content

Commit

Permalink
clarify why we can do the ptr cast
Browse files Browse the repository at this point in the history
  • Loading branch information
RalfJung committed Nov 13, 2019
1 parent aba385a commit 19ebe2f
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/libcore/cell.rs
Expand Up @@ -1545,7 +1545,8 @@ impl<T: ?Sized> UnsafeCell<T> {
#[stable(feature = "rust1", since = "1.0.0")]
pub const fn get(&self) -> *mut T {
// We can just cast the pointer from `UnsafeCell<T>` to `T` because of
// #[repr(transparent)]
// #[repr(transparent)]. This exploits libstd's special status, there is
// no guarantee for user code that this will work in future versions of the compiler!
self as *const UnsafeCell<T> as *const T as *mut T
}

Expand All @@ -1572,10 +1573,11 @@ impl<T: ?Sized> UnsafeCell<T> {
/// assert_eq!(uc.into_inner(), 5);
/// ```
#[inline]
#[unstable(feature = "unsafe_cell_raw_get", issue = "0")]
#[unstable(feature = "unsafe_cell_raw_get", issue = "66358")]
pub const fn raw_get(self: *const Self) -> *mut T {
// We can just cast the pointer from `UnsafeCell<T>` to `T` because of
// #[repr(transparent)]
// #[repr(transparent)]. This exploits libstd's special status, there is
// no guarantee for user code that this will work in future versions of the compiler!
self as *const T as *mut T
}
}
Expand Down

0 comments on commit 19ebe2f

Please sign in to comment.