diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index 11c737672fb4..351d4f3eaffb 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -403,11 +403,11 @@ impl Container for Vec { // FIXME: #13996: need a way to mark the return value as `noalias` #[inline(never)] -unsafe fn alloc_or_realloc(ptr: *mut u8, size: uint, align: uint, old_size: uint) -> *mut u8 { +unsafe fn alloc_or_realloc(ptr: *mut T, size: uint, old_size: uint) -> *mut T { if old_size == 0 { - allocate(size, align) + allocate(size, min_align_of::()) as *mut T } else { - reallocate(ptr, size, align, old_size) + reallocate(ptr as *mut u8, size, min_align_of::(), old_size) as *mut T } } @@ -491,8 +491,7 @@ impl Vec { if capacity > self.cap { let size = capacity.checked_mul(&size_of::()).expect("capacity overflow"); unsafe { - self.ptr = alloc_or_realloc(self.ptr as *mut u8, size, min_align_of::(), - self.cap * size_of::()) as *mut T; + self.ptr = alloc_or_realloc(self.ptr, size, self.cap * size_of::()); } self.cap = capacity; } @@ -573,8 +572,7 @@ impl Vec { let size = max(old_size, 2 * size_of::()) * 2; if old_size > size { fail!("capacity overflow") } unsafe { - self.ptr = alloc_or_realloc(self.ptr as *mut u8, size, min_align_of::(), - self.cap * size_of::()) as *mut u8 as *mut T; + self.ptr = alloc_or_realloc(self.ptr, size, self.cap * size_of::()); } self.cap = max(self.cap, 2) * 2; }