@@ -16,6 +16,7 @@ use super::{read::*, DeserializeInner};
1616use crate :: deser;
1717use crate :: traits:: * ;
1818use core:: mem:: MaybeUninit ;
19+ use core:: ptr:: NonNull ;
1920
2021/// Full-copy deserialize a zero-copy structure.
2122///
@@ -85,10 +86,10 @@ pub unsafe fn deserialize_eps_zero<'a, T: ZeroCopy>(
8586) -> deser:: Result < & ' a T > {
8687 let bytes = core:: mem:: size_of :: < T > ( ) ;
8788 if bytes == 0 {
88- // SAFETY: T is zero-sized and `assume_init` is safe.
89+ // SAFETY: T is zero-sized (see the from_raw_parts docs)
8990 #[ allow( invalid_value) ]
9091 #[ allow( clippy:: uninit_assumed_init) ]
91- return Ok ( unsafe { MaybeUninit :: uninit ( ) . assume_init ( ) } ) ;
92+ return Ok ( unsafe { NonNull :: < T > :: dangling ( ) . as_ref ( ) } ) ;
9293 }
9394 backend. align :: < T > ( ) ?;
9495 let ( pre, data, after) = unsafe { backend. data [ ..bytes] . align_to :: < T > ( ) } ;
@@ -111,10 +112,10 @@ pub unsafe fn deserialize_eps_slice_zero<'a, T: ZeroCopy>(
111112 let len = usize:: _deserialize_full_inner ( backend) ?;
112113 let bytes = len * core:: mem:: size_of :: < T > ( ) ;
113114 if core:: mem:: size_of :: < T > ( ) == 0 {
114- // SAFETY: T is zero-sized and `assume_init` is safe.
115+ // SAFETY: T is zero-sized (see the from_raw_parts docs)
115116 #[ allow( invalid_value) ]
116117 #[ allow( clippy:: uninit_assumed_init) ]
117- return Ok ( unsafe { std:: slice:: from_raw_parts ( MaybeUninit :: uninit ( ) . assume_init ( ) , len) } ) ;
118+ return Ok ( unsafe { std:: slice:: from_raw_parts ( NonNull :: dangling ( ) . as_ref ( ) , len) } ) ;
118119 }
119120 backend. align :: < T > ( ) ?;
120121 let ( pre, data, after) = unsafe { backend. data [ ..bytes] . align_to :: < T > ( ) } ;
0 commit comments