]> git.lizzy.rs Git - rust.git/commitdiff
Unique/NonNull::from: make sure we convert to raw pointers ASAP
authorRalf Jung <post@ralfj.de>
Thu, 22 Nov 2018 07:55:17 +0000 (08:55 +0100)
committerRalf Jung <post@ralfj.de>
Fri, 7 Dec 2018 08:20:54 +0000 (09:20 +0100)
By going through a shared reference, we share the destination as read-only, meaning we can read but not write with the raw pointers

src/libcore/ptr.rs

index 0387708033b535ca1251395d97d69a578fc9f2ee..452f7a62f4b339b27063123ae40b9c684ad175ee 100644 (file)
@@ -2815,14 +2815,14 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
 #[unstable(feature = "ptr_internals", issue = "0")]
 impl<'a, T: ?Sized> From<&'a mut T> for Unique<T> {
     fn from(reference: &'a mut T) -> Self {
-        Unique { pointer: unsafe { NonZero(reference as _) }, _marker: PhantomData }
+        Unique { pointer: unsafe { NonZero(reference as *mut T) }, _marker: PhantomData }
     }
 }
 
 #[unstable(feature = "ptr_internals", issue = "0")]
 impl<'a, T: ?Sized> From<&'a T> for Unique<T> {
     fn from(reference: &'a T) -> Self {
-        Unique { pointer: unsafe { NonZero(reference as _) }, _marker: PhantomData }
+        Unique { pointer: unsafe { NonZero(reference as *const T) }, _marker: PhantomData }
     }
 }
 
@@ -3025,7 +3025,7 @@ fn from(unique: Unique<T>) -> Self {
 impl<'a, T: ?Sized> From<&'a mut T> for NonNull<T> {
     #[inline]
     fn from(reference: &'a mut T) -> Self {
-        NonNull { pointer: unsafe { NonZero(reference as _) } }
+        NonNull { pointer: unsafe { NonZero(reference as *mut T) } }
     }
 }
 
@@ -3033,6 +3033,6 @@ fn from(reference: &'a mut T) -> Self {
 impl<'a, T: ?Sized> From<&'a T> for NonNull<T> {
     #[inline]
     fn from(reference: &'a T) -> Self {
-        NonNull { pointer: unsafe { NonZero(reference as _) } }
+        NonNull { pointer: unsafe { NonZero(reference as *const T) } }
     }
 }