@@ -527,7 +527,8 @@ impl<T> MaybeUninit<T> {
527
527
#[ inline( always) ]
528
528
pub const fn as_ptr ( & self ) -> * const T {
529
529
// `MaybeUninit` and `ManuallyDrop` are both `repr(transparent)` so we can cast the pointer.
530
- self as * const _ as * const T
530
+ // FIXME: consider `ptr::from_ref` once that's const-stable
531
+ ptr:: addr_of!( * self ) . cast :: < T > ( )
531
532
}
532
533
533
534
/// Gets a mutable pointer to the contained value. Reading from this pointer or turning it
@@ -566,7 +567,7 @@ impl<T> MaybeUninit<T> {
566
567
#[ inline( always) ]
567
568
pub const fn as_mut_ptr ( & mut self ) -> * mut T {
568
569
// `MaybeUninit` and `ManuallyDrop` are both `repr(transparent)` so we can cast the pointer.
569
- self as * mut _ as * mut T
570
+ ptr :: from_mut ( self ) . cast :: < T > ( )
570
571
}
571
572
572
573
/// Extracts the value from the `MaybeUninit<T>` container. This is a great way
@@ -947,7 +948,7 @@ impl<T> MaybeUninit<T> {
947
948
// And thus the conversion is safe
948
949
let ret = unsafe {
949
950
intrinsics:: assert_inhabited :: < [ T ; N ] > ( ) ;
950
- ( & array as * const _ as * const [ T ; N ] ) . read ( )
951
+ ptr :: from_ref ( & array) . cast :: < [ T ; N ] > ( ) . read ( )
951
952
} ;
952
953
953
954
// FIXME: required to avoid `~const Destruct` bound
@@ -1002,15 +1003,15 @@ impl<T> MaybeUninit<T> {
1002
1003
#[ rustc_const_unstable( feature = "maybe_uninit_slice" , issue = "63569" ) ]
1003
1004
#[ inline( always) ]
1004
1005
pub const fn slice_as_ptr ( this : & [ MaybeUninit < T > ] ) -> * const T {
1005
- this. as_ptr ( ) as * const T
1006
+ this. as_ptr ( ) . cast :: < T > ( )
1006
1007
}
1007
1008
1008
1009
/// Gets a mutable pointer to the first element of the array.
1009
1010
#[ unstable( feature = "maybe_uninit_slice" , issue = "63569" ) ]
1010
1011
#[ rustc_const_unstable( feature = "maybe_uninit_slice" , issue = "63569" ) ]
1011
1012
#[ inline( always) ]
1012
1013
pub const fn slice_as_mut_ptr ( this : & mut [ MaybeUninit < T > ] ) -> * mut T {
1013
- this. as_mut_ptr ( ) as * mut T
1014
+ this. as_mut_ptr ( ) . cast :: < T > ( )
1014
1015
}
1015
1016
1016
1017
/// Copies the elements from `src` to `this`, returning a mutable reference to the now initialized contents of `this`.
@@ -1182,7 +1183,7 @@ impl<T> MaybeUninit<T> {
1182
1183
pub fn as_bytes ( & self ) -> & [ MaybeUninit < u8 > ] {
1183
1184
// SAFETY: MaybeUninit<u8> is always valid, even for padding bytes
1184
1185
unsafe {
1185
- slice:: from_raw_parts ( self . as_ptr ( ) as * const MaybeUninit < u8 > , mem:: size_of :: < T > ( ) )
1186
+ slice:: from_raw_parts ( self . as_ptr ( ) . cast :: < MaybeUninit < u8 > > ( ) , mem:: size_of :: < T > ( ) )
1186
1187
}
1187
1188
}
1188
1189
@@ -1214,7 +1215,7 @@ impl<T> MaybeUninit<T> {
1214
1215
// SAFETY: MaybeUninit<u8> is always valid, even for padding bytes
1215
1216
unsafe {
1216
1217
slice:: from_raw_parts_mut (
1217
- self . as_mut_ptr ( ) as * mut MaybeUninit < u8 > ,
1218
+ self . as_mut_ptr ( ) . cast :: < MaybeUninit < u8 > > ( ) ,
1218
1219
mem:: size_of :: < T > ( ) ,
1219
1220
)
1220
1221
}
@@ -1244,7 +1245,7 @@ impl<T> MaybeUninit<T> {
1244
1245
// SAFETY: MaybeUninit<u8> is always valid, even for padding bytes
1245
1246
unsafe {
1246
1247
slice:: from_raw_parts (
1247
- this. as_ptr ( ) as * const MaybeUninit < u8 > ,
1248
+ this. as_ptr ( ) . cast :: < MaybeUninit < u8 > > ( ) ,
1248
1249
this. len ( ) * mem:: size_of :: < T > ( ) ,
1249
1250
)
1250
1251
}
@@ -1277,7 +1278,7 @@ impl<T> MaybeUninit<T> {
1277
1278
// SAFETY: MaybeUninit<u8> is always valid, even for padding bytes
1278
1279
unsafe {
1279
1280
slice:: from_raw_parts_mut (
1280
- this. as_mut_ptr ( ) as * mut MaybeUninit < u8 > ,
1281
+ this. as_mut_ptr ( ) . cast :: < MaybeUninit < u8 > > ( ) ,
1281
1282
this. len ( ) * mem:: size_of :: < T > ( ) ,
1282
1283
)
1283
1284
}
0 commit comments