diff options
| author | varkor <github@varkor.com> | 2018-01-05 01:11:20 +0000 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2018-01-05 01:11:20 +0000 |
| commit | 4829d502cceb779468ab7f69a95223bd31a5cf46 (patch) | |
| tree | b4ec4b65bd9e6acd8851dd5887357a79ccd945cd | |
| parent | 8e7a609e635b728eba65d471c985ab462dc4cfc7 (diff) | |
| download | rust-4829d502cceb779468ab7f69a95223bd31a5cf46.tar.gz rust-4829d502cceb779468ab7f69a95223bd31a5cf46.zip | |
Make UnsafeCell::into_inner safe
This fixes #35067. It will require a Crater run as discussed in that issue.
| -rw-r--r-- | src/libcore/cell.rs | 13 | ||||
| -rw-r--r-- | 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 c5375d1e00c..ec0d1b704dc 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -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() } } @@ -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, @@ -1220,11 +1220,6 @@ 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 /// /// ``` @@ -1232,11 +1227,11 @@ impl<T> UnsafeCell<T> { /// /// 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 e334d2014af..af125959f3f 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<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. @@ -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. |
