@@ -41,7 +41,7 @@ use core::{
4141 iter:: { IntoIterator , FromIterator , repeat} ,
4242 mem:: { ManuallyDrop , self } ,
4343 ops,
44- ptr,
44+ ptr:: { self , NonNull } ,
4545 slice,
4646} ;
4747#[ cfg( feature = "std" ) ]
@@ -214,7 +214,7 @@ impl<'a, T: 'a> Drop for Drain<'a,T> {
214214#[ cfg( feature = "union" ) ]
215215union SmallVecData < A : Array > {
216216 inline : ManuallyDrop < A > ,
217- heap : ( * mut A :: Item , usize ) ,
217+ heap : ( NonNull < A :: Item > , usize ) ,
218218}
219219
220220#[ cfg( feature = "union" ) ]
@@ -235,22 +235,22 @@ impl<A: Array> SmallVecData<A> {
235235 unsafe fn into_inline ( self ) -> A { ManuallyDrop :: into_inner ( self . inline ) }
236236 #[ inline]
237237 unsafe fn heap ( & self ) -> ( * mut A :: Item , usize ) {
238- self . heap
238+ ( self . heap . 0 . as_ptr ( ) , self . heap . 1 )
239239 }
240240 #[ inline]
241- unsafe fn heap_mut ( & mut self ) -> & mut ( * mut A :: Item , usize ) {
242- & mut self . heap
241+ unsafe fn heap_mut ( & mut self ) -> ( * mut A :: Item , & mut usize ) {
242+ ( self . heap . 0 . as_ptr ( ) , & mut self . heap . 1 )
243243 }
244244 #[ inline]
245245 fn from_heap ( ptr : * mut A :: Item , len : usize ) -> SmallVecData < A > {
246- SmallVecData { heap : ( ptr, len) }
246+ SmallVecData { heap : ( NonNull :: new ( ptr) . unwrap ( ) , len) }
247247 }
248248}
249249
250250#[ cfg( not( feature = "union" ) ) ]
251251enum SmallVecData < A : Array > {
252252 Inline ( ManuallyDrop < A > ) ,
253- Heap ( ( * mut A :: Item , usize ) ) ,
253+ Heap ( ( NonNull < A :: Item > , usize ) ) ,
254254}
255255
256256#[ cfg( not( feature = "union" ) ) ]
@@ -283,20 +283,20 @@ impl<A: Array> SmallVecData<A> {
283283 #[ inline]
284284 unsafe fn heap ( & self ) -> ( * mut A :: Item , usize ) {
285285 match * self {
286- SmallVecData :: Heap ( data) => data,
286+ SmallVecData :: Heap ( data) => ( data. 0 . as_ptr ( ) , data . 1 ) ,
287287 _ => debug_unreachable ! ( ) ,
288288 }
289289 }
290290 #[ inline]
291- unsafe fn heap_mut ( & mut self ) -> & mut ( * mut A :: Item , usize ) {
291+ unsafe fn heap_mut ( & mut self ) -> ( * mut A :: Item , & mut usize ) {
292292 match * self {
293- SmallVecData :: Heap ( ref mut data) => data,
293+ SmallVecData :: Heap ( ref mut data) => ( data. 0 . as_ptr ( ) , & mut data . 1 ) ,
294294 _ => debug_unreachable ! ( ) ,
295295 }
296296 }
297297 #[ inline]
298298 fn from_heap ( ptr : * mut A :: Item , len : usize ) -> SmallVecData < A > {
299- SmallVecData :: Heap ( ( ptr, len) )
299+ SmallVecData :: Heap ( ( NonNull :: new ( ptr) . unwrap ( ) , len) )
300300 }
301301}
302302
@@ -519,7 +519,7 @@ impl<A: Array> SmallVec<A> {
519519 fn triple_mut ( & mut self ) -> ( * mut A :: Item , & mut usize , usize ) {
520520 unsafe {
521521 if self . spilled ( ) {
522- let & mut ( ptr, ref mut len_ptr) = self . data . heap_mut ( ) ;
522+ let ( ptr, len_ptr) = self . data . heap_mut ( ) ;
523523 ( ptr, len_ptr, self . capacity )
524524 } else {
525525 ( self . data . inline_mut ( ) . as_mut_ptr ( ) , & mut self . capacity , A :: size ( ) )
0 commit comments