From 4829d502cceb779468ab7f69a95223bd31a5cf46 Mon Sep 17 00:00:00 2001 From: varkor Date: Fri, 5 Jan 2018 01:11:20 +0000 Subject: [PATCH] Make UnsafeCell::into_inner safe This fixes #35067. It will require a Crater run as discussed in that issue. --- src/libcore/cell.rs | 13 ++++--------- src/libcore/sync/atomic.rs | 6 +++--- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index c5375d1e00cb1..ec0d1b704dceb 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -450,7 +450,7 @@ impl Cell { /// ``` #[stable(feature = "move_cell", since = "1.17.0")] pub fn into_inner(self) -> T { - unsafe { self.value.into_inner() } + self.value.into_inner() } } @@ -569,7 +569,7 @@ impl RefCell { // 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, @@ -1220,11 +1220,6 @@ impl UnsafeCell { /// Unwraps the value. /// - /// # Safety - /// - /// This function is unsafe because this thread or another thread may currently be - /// inspecting the inner value. - /// /// # Examples /// /// ``` @@ -1232,11 +1227,11 @@ impl 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 } } diff --git a/src/libcore/sync/atomic.rs b/src/libcore/sync/atomic.rs index e334d2014af7c..af125959f3f09 100644 --- a/src/libcore/sync/atomic.rs +++ b/src/libcore/sync/atomic.rs @@ -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. @@ -695,7 +695,7 @@ impl AtomicPtr { #[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. @@ -1050,7 +1050,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.