@@ -260,7 +260,7 @@ impl<'a, T: 'a + Array> Drop for Drain<'a, T> {
260
260
#[ cfg( feature = "union" ) ]
261
261
union SmallVecData < A : Array > {
262
262
inline : MaybeUninit < A > ,
263
- heap : ( * mut A :: Item , usize ) ,
263
+ heap : ( NonNull < A :: Item > , usize ) ,
264
264
}
265
265
266
266
#[ cfg( feature = "union" ) ]
@@ -283,37 +283,39 @@ impl<A: Array> SmallVecData<A> {
283
283
}
284
284
#[ inline]
285
285
unsafe fn heap ( & self ) -> ( * mut A :: Item , usize ) {
286
- self . heap
286
+ ( self . heap . 0 . as_ptr ( ) , self . heap . 1 )
287
287
}
288
288
#[ inline]
289
- unsafe fn heap_mut ( & mut self ) -> & mut ( * mut A :: Item , usize ) {
290
- & mut self . heap
289
+ unsafe fn heap_mut ( & mut self ) -> ( * mut A :: Item , & mut usize ) {
290
+ ( self . heap . 0 . as_ptr ( ) , & mut self . heap . 1 )
291
291
}
292
292
#[ inline]
293
293
fn from_heap ( ptr : * mut A :: Item , len : usize ) -> SmallVecData < A > {
294
- SmallVecData { heap : ( ptr, len) }
294
+ SmallVecData {
295
+ heap : ( NonNull :: new ( ptr) . unwrap ( ) , len) ,
296
+ }
295
297
}
296
298
}
297
299
298
300
#[ cfg( not( feature = "union" ) ) ]
299
301
enum SmallVecData < A : Array > {
300
302
Inline ( MaybeUninit < A > ) ,
301
- Heap ( ( * mut A :: Item , usize ) ) ,
303
+ Heap ( ( NonNull < A :: Item > , usize ) ) ,
302
304
}
303
305
304
306
#[ cfg( not( feature = "union" ) ) ]
305
307
impl < A : Array > SmallVecData < A > {
306
308
#[ inline]
307
309
unsafe fn inline ( & self ) -> * const A :: Item {
308
- match * self {
309
- SmallVecData :: Inline ( ref a) => a. as_ptr ( ) as * const A :: Item ,
310
+ match self {
311
+ SmallVecData :: Inline ( a) => a. as_ptr ( ) as * const A :: Item ,
310
312
_ => debug_unreachable ! ( ) ,
311
313
}
312
314
}
313
315
#[ inline]
314
316
unsafe fn inline_mut ( & mut self ) -> * mut A :: Item {
315
- match * self {
316
- SmallVecData :: Inline ( ref mut a) => a. as_mut_ptr ( ) as * mut A :: Item ,
317
+ match self {
318
+ SmallVecData :: Inline ( a) => a. as_mut_ptr ( ) as * mut A :: Item ,
317
319
_ => debug_unreachable ! ( ) ,
318
320
}
319
321
}
@@ -330,21 +332,21 @@ impl<A: Array> SmallVecData<A> {
330
332
}
331
333
#[ inline]
332
334
unsafe fn heap ( & self ) -> ( * mut A :: Item , usize ) {
333
- match * self {
334
- SmallVecData :: Heap ( data) => data,
335
+ match self {
336
+ SmallVecData :: Heap ( data) => ( data. 0 . as_ptr ( ) , data . 1 ) ,
335
337
_ => debug_unreachable ! ( ) ,
336
338
}
337
339
}
338
340
#[ inline]
339
- unsafe fn heap_mut ( & mut self ) -> & mut ( * mut A :: Item , usize ) {
340
- match * self {
341
- SmallVecData :: Heap ( ref mut data) => data,
341
+ unsafe fn heap_mut ( & mut self ) -> ( * mut A :: Item , & mut usize ) {
342
+ match self {
343
+ SmallVecData :: Heap ( data) => ( data. 0 . as_ptr ( ) , & mut data . 1 ) ,
342
344
_ => debug_unreachable ! ( ) ,
343
345
}
344
346
}
345
347
#[ inline]
346
348
fn from_heap ( ptr : * mut A :: Item , len : usize ) -> SmallVecData < A > {
347
- SmallVecData :: Heap ( ( ptr, len) )
349
+ SmallVecData :: Heap ( ( NonNull :: new ( ptr) . unwrap ( ) , len) )
348
350
}
349
351
}
350
352
@@ -571,7 +573,7 @@ impl<A: Array> SmallVec<A> {
571
573
fn triple_mut ( & mut self ) -> ( * mut A :: Item , & mut usize , usize ) {
572
574
unsafe {
573
575
if self . spilled ( ) {
574
- let & mut ( ptr, ref mut len_ptr) = self . data . heap_mut ( ) ;
576
+ let ( ptr, len_ptr) = self . data . heap_mut ( ) ;
575
577
( ptr, len_ptr, self . capacity )
576
578
} else {
577
579
( self . data . inline_mut ( ) , & mut self . capacity , A :: size ( ) )
0 commit comments