Skip to content

Commit a0d8a32

Browse files
committed
Remove unsound TrustedRandomAccess implementations
Removes the implementations that depend on the user-definable trait `Copy`.
1 parent eba3228 commit a0d8a32

File tree

1 file changed

+1
-30
lines changed

1 file changed

+1
-30
lines changed

library/alloc/src/vec/into_iter.rs

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::alloc::{Allocator, Global};
22
use crate::raw_vec::RawVec;
33
use core::fmt;
44
use core::intrinsics::arith_offset;
5-
use core::iter::{FusedIterator, InPlaceIterable, SourceIter, TrustedLen, TrustedRandomAccess};
5+
use core::iter::{FusedIterator, InPlaceIterable, SourceIter, TrustedLen};
66
use core::marker::PhantomData;
77
use core::mem::{self};
88
use core::ptr::{self, NonNull};
@@ -162,24 +162,6 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
162162
fn count(self) -> usize {
163163
self.len()
164164
}
165-
166-
#[doc(hidden)]
167-
unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> Self::Item
168-
where
169-
Self: TrustedRandomAccess,
170-
{
171-
// SAFETY: the caller must guarantee that `i` is in bounds of the
172-
// `Vec<T>`, so `i` cannot overflow an `isize`, and the `self.ptr.add(i)`
173-
// is guaranteed to pointer to an element of the `Vec<T>` and
174-
// thus guaranteed to be valid to dereference.
175-
//
176-
// Also note the implementation of `Self: TrustedRandomAccess` requires
177-
// that `T: Copy` so reading elements from the buffer doesn't invalidate
178-
// them for `Drop`.
179-
unsafe {
180-
if mem::size_of::<T>() == 0 { mem::zeroed() } else { ptr::read(self.ptr.add(i)) }
181-
}
182-
}
183165
}
184166

185167
#[stable(feature = "rust1", since = "1.0.0")]
@@ -215,17 +197,6 @@ impl<T, A: Allocator> FusedIterator for IntoIter<T, A> {}
215197
#[unstable(feature = "trusted_len", issue = "37572")]
216198
unsafe impl<T, A: Allocator> TrustedLen for IntoIter<T, A> {}
217199

218-
#[doc(hidden)]
219-
#[unstable(issue = "none", feature = "std_internals")]
220-
// T: Copy as approximation for !Drop since get_unchecked does not advance self.ptr
221-
// and thus we can't implement drop-handling
222-
unsafe impl<T, A: Allocator> TrustedRandomAccess for IntoIter<T, A>
223-
where
224-
T: Copy,
225-
{
226-
const MAY_HAVE_SIDE_EFFECT: bool = false;
227-
}
228-
229200
#[cfg(not(no_global_oom_handling))]
230201
#[stable(feature = "vec_into_iter_clone", since = "1.8.0")]
231202
impl<T: Clone, A: Allocator + Clone> Clone for IntoIter<T, A> {

0 commit comments

Comments
 (0)