about summary refs log tree commit diff
path: root/library/alloc/src
diff options
context:
space:
mode:
authorThe 8472 <git@infinite-source.de>2021-12-09 00:20:13 +0100
committerThe 8472 <git@infinite-source.de>2021-12-09 00:20:13 +0100
commit2d8a11bdbb2623a4e2983870006cbd00eb210ffb (patch)
treea7a36da27f4cf43b3440c98e76c7a47f2cac4426 /library/alloc/src
parent6851b8d931381c4e7b6d60dab70002efd85dc7a9 (diff)
downloadrust-2d8a11bdbb2623a4e2983870006cbd00eb210ffb.tar.gz
rust-2d8a11bdbb2623a4e2983870006cbd00eb210ffb.zip
Use `*mut [T]` instead of `[MaybeUninit<T>]`
Diffstat (limited to 'library/alloc/src')
-rw-r--r--library/alloc/src/vec/drain.rs12
1 files changed, 5 insertions, 7 deletions
diff --git a/library/alloc/src/vec/drain.rs b/library/alloc/src/vec/drain.rs
index 053ee8033ba..089cd4db64c 100644
--- a/library/alloc/src/vec/drain.rs
+++ b/library/alloc/src/vec/drain.rs
@@ -1,7 +1,7 @@
 use crate::alloc::{Allocator, Global};
 use core::fmt;
 use core::iter::{FusedIterator, TrustedLen};
-use core::mem::{self, MaybeUninit};
+use core::mem;
 use core::ptr::{self, NonNull};
 use core::slice::{self};
 
@@ -160,12 +160,10 @@ impl<T, A: Allocator> Drop for Drain<'_, T, A> {
             // a pointer with mutable provenance is necessary. Therefore we must reconstruct
             // it from the original vec but also avoid creating a &mut to the front since that could
             // invalidate raw pointers to it which some unsafe code might rely on.
-            let vec = vec.as_mut();
-            let spare_capacity = vec.spare_capacity_mut();
-            let drop_offset = drop_ptr.offset_from(spare_capacity.as_ptr() as *const _) as usize;
-            let drop_range = drop_offset..(drop_offset + drop_len);
-            let to_drop = &mut spare_capacity[drop_range];
-            ptr::drop_in_place(MaybeUninit::slice_assume_init_mut(to_drop));
+            let vec_ptr = vec.as_mut().as_mut_ptr();
+            let drop_offset = drop_ptr.offset_from(vec_ptr) as usize;
+            let to_drop = ptr::slice_from_raw_parts_mut(vec_ptr.add(drop_offset), drop_len);
+            ptr::drop_in_place(to_drop);
         }
     }
 }