Skip to content

Commit

Permalink
Auto merge of #47204 - varkor:unsafecell-into_inner-safe, r=alexcrichton
Browse files Browse the repository at this point in the history
Make UnsafeCell::into_inner safe

This fixes #35067. It will require a Crater run as discussed in that
issue.
  • Loading branch information
bors committed Jan 28, 2018
2 parents 771873c + 4829d50 commit 21882aa
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 12 deletions.
13 changes: 4 additions & 9 deletions src/libcore/cell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ impl<T> Cell<T> {
/// ```
#[stable(feature = "move_cell", since = "1.17.0")]
pub fn into_inner(self) -> T {
unsafe { self.value.into_inner() }
self.value.into_inner()
}
}

Expand Down Expand Up @@ -569,7 +569,7 @@ impl<T> RefCell<T> {
// compiler statically verifies that it is not currently borrowed.
// Therefore the following assertion is just a `debug_assert!`.
debug_assert!(self.borrow.get() == UNUSED);
unsafe { self.value.into_inner() }
self.value.into_inner()
}

/// Replaces the wrapped value with a new one, returning the old value,
Expand Down Expand Up @@ -1220,23 +1220,18 @@ impl<T> UnsafeCell<T> {

/// Unwraps the value.
///
/// # Safety
///
/// This function is unsafe because this thread or another thread may currently be
/// inspecting the inner value.
///
/// # Examples
///
/// ```
/// use std::cell::UnsafeCell;
///
/// let uc = UnsafeCell::new(5);
///
/// let five = unsafe { uc.into_inner() };
/// let five = uc.into_inner();
/// ```
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
pub unsafe fn into_inner(self) -> T {
pub fn into_inner(self) -> T {
self.value
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/libcore/sync/atomic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ impl AtomicBool {
#[inline]
#[stable(feature = "atomic_access", since = "1.15.0")]
pub fn into_inner(self) -> bool {
unsafe { self.v.into_inner() != 0 }
self.v.into_inner() != 0
}

/// Loads a value from the bool.
Expand Down Expand Up @@ -695,7 +695,7 @@ impl<T> AtomicPtr<T> {
#[inline]
#[stable(feature = "atomic_access", since = "1.15.0")]
pub fn into_inner(self) -> *mut T {
unsafe { self.p.into_inner() }
self.p.into_inner()
}

/// Loads a value from the pointer.
Expand Down Expand Up @@ -1051,7 +1051,7 @@ macro_rules! atomic_int {
#[inline]
#[$stable_access]
pub fn into_inner(self) -> $int_type {
unsafe { self.v.into_inner() }
self.v.into_inner()
}

/// Loads a value from the atomic integer.
Expand Down

0 comments on commit 21882aa

Please sign in to comment.