@@ -41,7 +41,7 @@ use core::{
41
41
iter:: { IntoIterator , FromIterator , repeat} ,
42
42
mem:: { ManuallyDrop , self } ,
43
43
ops,
44
- ptr,
44
+ ptr:: { self , NonNull } ,
45
45
slice,
46
46
} ;
47
47
#[ cfg( feature = "std" ) ]
@@ -214,7 +214,7 @@ impl<'a, T: 'a> Drop for Drain<'a,T> {
214
214
#[ cfg( feature = "union" ) ]
215
215
union SmallVecData < A : Array > {
216
216
inline : ManuallyDrop < A > ,
217
- heap : ( * mut A :: Item , usize ) ,
217
+ heap : ( NonNull < A :: Item > , usize ) ,
218
218
}
219
219
220
220
#[ cfg( feature = "union" ) ]
@@ -235,22 +235,22 @@ impl<A: Array> SmallVecData<A> {
235
235
unsafe fn into_inline ( self ) -> A { ManuallyDrop :: into_inner ( self . inline ) }
236
236
#[ inline]
237
237
unsafe fn heap ( & self ) -> ( * mut A :: Item , usize ) {
238
- self . heap
238
+ ( self . heap . 0 . as_ptr ( ) , self . heap . 1 )
239
239
}
240
240
#[ 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 )
243
243
}
244
244
#[ inline]
245
245
fn from_heap ( ptr : * mut A :: Item , len : usize ) -> SmallVecData < A > {
246
- SmallVecData { heap : ( ptr, len) }
246
+ SmallVecData { heap : ( NonNull :: new ( ptr) . unwrap ( ) , len) }
247
247
}
248
248
}
249
249
250
250
#[ cfg( not( feature = "union" ) ) ]
251
251
enum SmallVecData < A : Array > {
252
252
Inline ( ManuallyDrop < A > ) ,
253
- Heap ( ( * mut A :: Item , usize ) ) ,
253
+ Heap ( ( NonNull < A :: Item > , usize ) ) ,
254
254
}
255
255
256
256
#[ cfg( not( feature = "union" ) ) ]
@@ -283,20 +283,20 @@ impl<A: Array> SmallVecData<A> {
283
283
#[ inline]
284
284
unsafe fn heap ( & self ) -> ( * mut A :: Item , usize ) {
285
285
match * self {
286
- SmallVecData :: Heap ( data) => data,
286
+ SmallVecData :: Heap ( data) => ( data. 0 . as_ptr ( ) , data . 1 ) ,
287
287
_ => debug_unreachable ! ( ) ,
288
288
}
289
289
}
290
290
#[ 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 ) {
292
292
match * self {
293
- SmallVecData :: Heap ( ref mut data) => data,
293
+ SmallVecData :: Heap ( ref mut data) => ( data. 0 . as_ptr ( ) , & mut data . 1 ) ,
294
294
_ => debug_unreachable ! ( ) ,
295
295
}
296
296
}
297
297
#[ inline]
298
298
fn from_heap ( ptr : * mut A :: Item , len : usize ) -> SmallVecData < A > {
299
- SmallVecData :: Heap ( ( ptr, len) )
299
+ SmallVecData :: Heap ( ( NonNull :: new ( ptr) . unwrap ( ) , len) )
300
300
}
301
301
}
302
302
@@ -519,7 +519,7 @@ impl<A: Array> SmallVec<A> {
519
519
fn triple_mut ( & mut self ) -> ( * mut A :: Item , & mut usize , usize ) {
520
520
unsafe {
521
521
if self . spilled ( ) {
522
- let & mut ( ptr, ref mut len_ptr) = self . data . heap_mut ( ) ;
522
+ let ( ptr, len_ptr) = self . data . heap_mut ( ) ;
523
523
( ptr, len_ptr, self . capacity )
524
524
} else {
525
525
( self . data . inline_mut ( ) . as_mut_ptr ( ) , & mut self . capacity , A :: size ( ) )
0 commit comments