@@ -403,11 +403,11 @@ impl<T> Container for Vec<T> {
403
403
404
404
// FIXME: #13996: need a way to mark the return value as `noalias`
405
405
#[ inline( never) ]
406
- unsafe fn alloc_or_realloc ( ptr : * mut u8 , size : uint , align : uint , old_size : uint ) -> * mut u8 {
406
+ unsafe fn alloc_or_realloc < T > ( ptr : * mut T , size : uint , old_size : uint ) -> * mut T {
407
407
if old_size == 0 {
408
- allocate ( size, align )
408
+ allocate ( size, min_align_of :: < T > ( ) ) as * mut T
409
409
} else {
410
- reallocate ( ptr, size, align , old_size)
410
+ reallocate ( ptr as * mut u8 , size, min_align_of :: < T > ( ) , old_size) as * mut T
411
411
}
412
412
}
413
413
@@ -491,8 +491,7 @@ impl<T> Vec<T> {
491
491
if capacity > self . cap {
492
492
let size = capacity. checked_mul ( & size_of :: < T > ( ) ) . expect ( "capacity overflow" ) ;
493
493
unsafe {
494
- self . ptr = alloc_or_realloc ( self . ptr as * mut u8 , size, min_align_of :: < T > ( ) ,
495
- self . cap * size_of :: < T > ( ) ) as * mut T ;
494
+ self . ptr = alloc_or_realloc ( self . ptr , size, self . cap * size_of :: < T > ( ) ) ;
496
495
}
497
496
self . cap = capacity;
498
497
}
@@ -573,8 +572,7 @@ impl<T> Vec<T> {
573
572
let size = max ( old_size, 2 * size_of :: < T > ( ) ) * 2 ;
574
573
if old_size > size { fail ! ( "capacity overflow" ) }
575
574
unsafe {
576
- self . ptr = alloc_or_realloc ( self . ptr as * mut u8 , size, min_align_of :: < T > ( ) ,
577
- self . cap * size_of :: < T > ( ) ) as * mut u8 as * mut T ;
575
+ self . ptr = alloc_or_realloc ( self . ptr , size, self . cap * size_of :: < T > ( ) ) ;
578
576
}
579
577
self . cap = max ( self . cap , 2 ) * 2 ;
580
578
}
0 commit comments