Skip to content

Commit 043f6d7

Browse files
committed
Auto merge of #77201 - matthewjasper:rename-get-unchecked, r=spastorino
Rename Iterator::get_unchecked Closes #76479 r? `@pnkfelix`
2 parents c6e4db6 + 04a0b1d commit 043f6d7

File tree

8 files changed

+74
-60
lines changed

8 files changed

+74
-60
lines changed

library/alloc/src/vec.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -2980,12 +2980,18 @@ impl<T> Iterator for IntoIter<T> {
29802980
self.len()
29812981
}
29822982

2983-
unsafe fn get_unchecked(&mut self, i: usize) -> Self::Item
2983+
unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> Self::Item
29842984
where
29852985
Self: TrustedRandomAccess,
29862986
{
2987-
// SAFETY: the caller must uphold the contract for
2988-
// `Iterator::get_unchecked`.
2987+
// SAFETY: the caller must guarantee that `i` is in bounds of the
2988+
// `Vec<T>`, so `i` cannot overflow an `isize`, and the `self.ptr.add(i)`
2989+
// is guaranteed to pointer to an element of the `Vec<T>` and
2990+
// thus guaranteed to be valid to dereference.
2991+
//
2992+
// Also note the implementation of `Self: TrustedRandomAccess` requires
2993+
// that `T: Copy` so reading elements from the buffer doesn't invalidate
2994+
// them for `Drop`.
29892995
unsafe {
29902996
if mem::size_of::<T>() == 0 { mem::zeroed() } else { ptr::read(self.ptr.add(i)) }
29912997
}

library/core/src/iter/adapters/fuse.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,13 @@ where
115115
}
116116

117117
#[inline]
118-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item
118+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item
119119
where
120120
Self: TrustedRandomAccess,
121121
{
122122
match self.iter {
123-
// SAFETY: the caller must uphold the contract for `Iterator::get_unchecked`.
123+
// SAFETY: the caller must uphold the contract for
124+
// `Iterator::__iterator_get_unchecked`.
124125
Some(ref mut iter) => unsafe { try_get_unchecked(iter, idx) },
125126
// SAFETY: the caller asserts there is an item at `i`, so we're not exhausted.
126127
None => unsafe { intrinsics::unreachable() },

library/core/src/iter/adapters/mod.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,12 @@ where
285285
self.it.count()
286286
}
287287

288-
unsafe fn get_unchecked(&mut self, idx: usize) -> T
288+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> T
289289
where
290290
Self: TrustedRandomAccess,
291291
{
292292
// SAFETY: the caller must uphold the contract for
293-
// `Iterator::get_unchecked`.
293+
// `Iterator::__iterator_get_unchecked`.
294294
*unsafe { try_get_unchecked(&mut self.it, idx) }
295295
}
296296
}
@@ -420,12 +420,12 @@ where
420420
self.it.map(T::clone).fold(init, f)
421421
}
422422

423-
unsafe fn get_unchecked(&mut self, idx: usize) -> T
423+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> T
424424
where
425425
Self: TrustedRandomAccess,
426426
{
427427
// SAFETY: the caller must uphold the contract for
428-
// `Iterator::get_unchecked`.
428+
// `Iterator::__iterator_get_unchecked`.
429429
unsafe { try_get_unchecked(&mut self.it, idx).clone() }
430430
}
431431
}
@@ -935,12 +935,12 @@ where
935935
self.iter.fold(init, map_fold(self.f, g))
936936
}
937937

938-
unsafe fn get_unchecked(&mut self, idx: usize) -> B
938+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> B
939939
where
940940
Self: TrustedRandomAccess,
941941
{
942942
// SAFETY: the caller must uphold the contract for
943-
// `Iterator::get_unchecked`.
943+
// `Iterator::__iterator_get_unchecked`.
944944
unsafe { (self.f)(try_get_unchecked(&mut self.iter, idx)) }
945945
}
946946
}
@@ -1431,12 +1431,12 @@ where
14311431
self.iter.fold(init, enumerate(self.count, fold))
14321432
}
14331433

1434-
unsafe fn get_unchecked(&mut self, idx: usize) -> <Self as Iterator>::Item
1434+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> <Self as Iterator>::Item
14351435
where
14361436
Self: TrustedRandomAccess,
14371437
{
14381438
// SAFETY: the caller must uphold the contract for
1439-
// `Iterator::get_unchecked`.
1439+
// `Iterator::__iterator_get_unchecked`.
14401440
let value = unsafe { try_get_unchecked(&mut self.iter, idx) };
14411441
(Add::add(self.count, idx), value)
14421442
}

library/core/src/iter/adapters/zip.rs

+23-19
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ where
5959
}
6060

6161
#[inline]
62-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item
62+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item
6363
where
6464
Self: TrustedRandomAccess,
6565
{
66-
// SAFETY: `ZipImpl::get_unchecked` has same safety requirements as
67-
// `Iterator::get_unchecked`.
66+
// SAFETY: `ZipImpl::__iterator_get_unchecked` has same safety
67+
// requirements as `Iterator::__iterator_get_unchecked`.
6868
unsafe { ZipImpl::get_unchecked(self, idx) }
6969
}
7070
}
@@ -93,7 +93,7 @@ trait ZipImpl<A, B> {
9393
where
9494
A: DoubleEndedIterator + ExactSizeIterator,
9595
B: DoubleEndedIterator + ExactSizeIterator;
96-
// This has the same safety requirements as `Iterator::get_unchecked`
96+
// This has the same safety requirements as `Iterator::__iterator_get_unchecked`
9797
unsafe fn get_unchecked(&mut self, idx: usize) -> <Self as Iterator>::Item
9898
where
9999
Self: Iterator + TrustedRandomAccess;
@@ -197,12 +197,14 @@ where
197197
let i = self.index;
198198
self.index += 1;
199199
// SAFETY: `i` is smaller than `self.len`, thus smaller than `self.a.len()` and `self.b.len()`
200-
unsafe { Some((self.a.get_unchecked(i), self.b.get_unchecked(i))) }
200+
unsafe {
201+
Some((self.a.__iterator_get_unchecked(i), self.b.__iterator_get_unchecked(i)))
202+
}
201203
} else if A::may_have_side_effect() && self.index < self.a.size() {
202204
// match the base implementation's potential side effects
203205
// SAFETY: we just checked that `self.index` < `self.a.len()`
204206
unsafe {
205-
self.a.get_unchecked(self.index);
207+
self.a.__iterator_get_unchecked(self.index);
206208
}
207209
self.index += 1;
208210
None
@@ -229,13 +231,13 @@ where
229231
// ensures that `end` is smaller than or equal to `self.len`,
230232
// so `i` is also smaller than `self.len`.
231233
unsafe {
232-
self.a.get_unchecked(i);
234+
self.a.__iterator_get_unchecked(i);
233235
}
234236
}
235237
if B::may_have_side_effect() {
236238
// SAFETY: same as above.
237239
unsafe {
238-
self.b.get_unchecked(i);
240+
self.b.__iterator_get_unchecked(i);
239241
}
240242
}
241243
}
@@ -277,7 +279,9 @@ where
277279
let i = self.len;
278280
// SAFETY: `i` is smaller than the previous value of `self.len`,
279281
// which is also smaller than or equal to `self.a.len()` and `self.b.len()`
280-
unsafe { Some((self.a.get_unchecked(i), self.b.get_unchecked(i))) }
282+
unsafe {
283+
Some((self.a.__iterator_get_unchecked(i), self.b.__iterator_get_unchecked(i)))
284+
}
281285
} else {
282286
None
283287
}
@@ -286,8 +290,8 @@ where
286290
#[inline]
287291
unsafe fn get_unchecked(&mut self, idx: usize) -> <Self as Iterator>::Item {
288292
// SAFETY: the caller must uphold the contract for
289-
// `Iterator::get_unchecked`.
290-
unsafe { (self.a.get_unchecked(idx), self.b.get_unchecked(idx)) }
293+
// `Iterator::__iterator_get_unchecked`.
294+
unsafe { (self.a.__iterator_get_unchecked(idx), self.b.__iterator_get_unchecked(idx)) }
291295
}
292296
}
293297

@@ -386,8 +390,8 @@ impl<A: Debug + TrustedRandomAccess, B: Debug + TrustedRandomAccess> ZipFmt<A, B
386390
///
387391
/// `size` may not be overridden.
388392
///
389-
/// `<Self as Iterator>::get_unchecked` must be safe to call provided the
390-
/// following conditions are met.
393+
/// `<Self as Iterator>::__iterator_get_unchecked` must be safe to call
394+
/// provided the following conditions are met.
391395
///
392396
/// 1. `0 <= idx` and `idx < self.size()`.
393397
/// 2. If `self: !Clone`, then `get_unchecked` is never called with the same
@@ -399,7 +403,7 @@ impl<A: Debug + TrustedRandomAccess, B: Debug + TrustedRandomAccess> ZipFmt<A, B
399403
/// * `std::clone::Clone::clone`
400404
/// * `std::iter::Iterator::size_hint()`
401405
/// * `std::iter::Iterator::next_back()`
402-
/// * `std::iter::Iterator::get_unchecked()`
406+
/// * `std::iter::Iterator::__iterator_get_unchecked()`
403407
/// * `std::iter::TrustedRandomAccess::size()`
404408
///
405409
/// Further, given that these conditions are met, it must guarantee that:
@@ -424,7 +428,7 @@ pub unsafe trait TrustedRandomAccess: Sized {
424428
fn may_have_side_effect() -> bool;
425429
}
426430

427-
/// Like `Iterator::get_unchecked`, but doesn't require the compiler to
431+
/// Like `Iterator::__iterator_get_unchecked`, but doesn't require the compiler to
428432
/// know that `U: TrustedRandomAccess`.
429433
///
430434
/// ## Safety
@@ -436,13 +440,13 @@ where
436440
I: Iterator,
437441
{
438442
// SAFETY: the caller must uphold the contract for
439-
// `Iterator::get_unchecked`.
443+
// `Iterator::__iterator_get_unchecked`.
440444
unsafe { it.try_get_unchecked(idx) }
441445
}
442446

443447
unsafe trait SpecTrustedRandomAccess: Iterator {
444448
/// If `Self: TrustedRandomAccess`, it must be safe to call a
445-
/// `Iterator::get_unchecked(self, index)`.
449+
/// `Iterator::__iterator_get_unchecked(self, index)`.
446450
unsafe fn try_get_unchecked(&mut self, index: usize) -> Self::Item;
447451
}
448452

@@ -455,7 +459,7 @@ unsafe impl<I: Iterator> SpecTrustedRandomAccess for I {
455459
unsafe impl<I: Iterator + TrustedRandomAccess> SpecTrustedRandomAccess for I {
456460
unsafe fn try_get_unchecked(&mut self, index: usize) -> Self::Item {
457461
// SAFETY: the caller must uphold the contract for
458-
// `Iterator::get_unchecked`.
459-
unsafe { self.get_unchecked(index) }
462+
// `Iterator::__iterator_get_unchecked`.
463+
unsafe { self.__iterator_get_unchecked(index) }
460464
}
461465
}

library/core/src/iter/traits/iterator.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -3241,10 +3241,12 @@ pub trait Iterator {
32413241
}
32423242

32433243
/// See [TrustedRandomAccess]
3244+
// The unusual name is to avoid name collisions in method resolution
3245+
// see #76479.
32443246
#[inline]
32453247
#[doc(hidden)]
32463248
#[unstable(feature = "trusted_random_access", issue = "none")]
3247-
unsafe fn get_unchecked(&mut self, _idx: usize) -> Self::Item
3249+
unsafe fn __iterator_get_unchecked(&mut self, _idx: usize) -> Self::Item
32483250
where
32493251
Self: TrustedRandomAccess,
32503252
{

library/core/src/slice/iter.rs

+24-23
Original file line numberDiff line numberDiff line change
@@ -1178,7 +1178,7 @@ impl<'a, T> Iterator for Windows<'a, T> {
11781178
}
11791179

11801180
#[doc(hidden)]
1181-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
1181+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
11821182
// SAFETY: since the caller guarantees that `i` is in bounds,
11831183
// which means that `i` cannot overflow an `isize`, and the
11841184
// slice created by `from_raw_parts` is a subslice of `self.v`
@@ -1324,7 +1324,7 @@ impl<'a, T> Iterator for Chunks<'a, T> {
13241324
}
13251325

13261326
#[doc(hidden)]
1327-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
1327+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
13281328
let start = idx * self.chunk_size;
13291329
let end = match start.checked_add(self.chunk_size) {
13301330
None => self.v.len(),
@@ -1480,13 +1480,13 @@ impl<'a, T> Iterator for ChunksMut<'a, T> {
14801480
}
14811481

14821482
#[doc(hidden)]
1483-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
1483+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
14841484
let start = idx * self.chunk_size;
14851485
let end = match start.checked_add(self.chunk_size) {
14861486
None => self.v.len(),
14871487
Some(end) => cmp::min(end, self.v.len()),
14881488
};
1489-
// SAFETY: see comments for `Chunks::get_unchecked`.
1489+
// SAFETY: see comments for `Chunks::__iterator_get_unchecked`.
14901490
//
14911491
// Also note that the caller also guarantees that we're never called
14921492
// with the same index again, and that no other methods that will
@@ -1642,9 +1642,9 @@ impl<'a, T> Iterator for ChunksExact<'a, T> {
16421642
}
16431643

16441644
#[doc(hidden)]
1645-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
1645+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
16461646
let start = idx * self.chunk_size;
1647-
// SAFETY: mostly identical to `Chunks::get_unchecked`.
1647+
// SAFETY: mostly identical to `Chunks::__iterator_get_unchecked`.
16481648
unsafe { from_raw_parts(self.v.as_ptr().add(start), self.chunk_size) }
16491649
}
16501650
}
@@ -1785,9 +1785,9 @@ impl<'a, T> Iterator for ChunksExactMut<'a, T> {
17851785
}
17861786

17871787
#[doc(hidden)]
1788-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
1788+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
17891789
let start = idx * self.chunk_size;
1790-
// SAFETY: see comments for `ChunksMut::get_unchecked`.
1790+
// SAFETY: see comments for `ChunksMut::__iterator_get_unchecked`.
17911791
unsafe { from_raw_parts_mut(self.v.as_mut_ptr().add(start), self.chunk_size) }
17921792
}
17931793
}
@@ -2030,10 +2030,10 @@ impl<'a, T, const N: usize> Iterator for ArrayChunks<'a, T, N> {
20302030
self.iter.last()
20312031
}
20322032

2033-
unsafe fn get_unchecked(&mut self, i: usize) -> &'a [T; N] {
2034-
// SAFETY: The safety guarantees of `get_unchecked` are transferred to
2035-
// the caller.
2036-
unsafe { self.iter.get_unchecked(i) }
2033+
unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> &'a [T; N] {
2034+
// SAFETY: The safety guarantees of `__iterator_get_unchecked` are
2035+
// transferred to the caller.
2036+
unsafe { self.iter.__iterator_get_unchecked(i) }
20372037
}
20382038
}
20392039

@@ -2141,10 +2141,10 @@ impl<'a, T, const N: usize> Iterator for ArrayChunksMut<'a, T, N> {
21412141
self.iter.last()
21422142
}
21432143

2144-
unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut [T; N] {
2145-
// SAFETY: The safety guarantees of `get_unchecked` are transferred to
2144+
unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> &'a mut [T; N] {
2145+
// SAFETY: The safety guarantees of `__iterator_get_unchecked` are transferred to
21462146
// the caller.
2147-
unsafe { self.iter.get_unchecked(i) }
2147+
unsafe { self.iter.__iterator_get_unchecked(i) }
21482148
}
21492149
}
21502150

@@ -2278,13 +2278,13 @@ impl<'a, T> Iterator for RChunks<'a, T> {
22782278
}
22792279

22802280
#[doc(hidden)]
2281-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
2281+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
22822282
let end = self.v.len() - idx * self.chunk_size;
22832283
let start = match end.checked_sub(self.chunk_size) {
22842284
None => 0,
22852285
Some(start) => start,
22862286
};
2287-
// SAFETY: mostly identical to `Chunks::get_unchecked`.
2287+
// SAFETY: mostly identical to `Chunks::__iterator_get_unchecked`.
22882288
unsafe { from_raw_parts(self.v.as_ptr().add(start), end - start) }
22892289
}
22902290
}
@@ -2431,13 +2431,14 @@ impl<'a, T> Iterator for RChunksMut<'a, T> {
24312431
}
24322432

24332433
#[doc(hidden)]
2434-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
2434+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
24352435
let end = self.v.len() - idx * self.chunk_size;
24362436
let start = match end.checked_sub(self.chunk_size) {
24372437
None => 0,
24382438
Some(start) => start,
24392439
};
2440-
// SAFETY: see comments for `RChunks::get_unchecked` and `ChunksMut::get_unchecked`
2440+
// SAFETY: see comments for `RChunks::__iterator_get_unchecked` and
2441+
// `ChunksMut::__iterator_get_unchecked`
24412442
unsafe { from_raw_parts_mut(self.v.as_mut_ptr().add(start), end - start) }
24422443
}
24432444
}
@@ -2585,11 +2586,11 @@ impl<'a, T> Iterator for RChunksExact<'a, T> {
25852586
}
25862587

25872588
#[doc(hidden)]
2588-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
2589+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
25892590
let end = self.v.len() - idx * self.chunk_size;
25902591
let start = end - self.chunk_size;
25912592
// SAFETY:
2592-
// SAFETY: mostmy identical to `Chunks::get_unchecked`.
2593+
// SAFETY: mostmy identical to `Chunks::__iterator_get_unchecked`.
25932594
unsafe { from_raw_parts(self.v.as_ptr().add(start), self.chunk_size) }
25942595
}
25952596
}
@@ -2734,10 +2735,10 @@ impl<'a, T> Iterator for RChunksExactMut<'a, T> {
27342735
}
27352736

27362737
#[doc(hidden)]
2737-
unsafe fn get_unchecked(&mut self, idx: usize) -> Self::Item {
2738+
unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item {
27382739
let end = self.v.len() - idx * self.chunk_size;
27392740
let start = end - self.chunk_size;
2740-
// SAFETY: see comments for `RChunksMut::get_unchecked`.
2741+
// SAFETY: see comments for `RChunksMut::__iterator_get_unchecked`.
27412742
unsafe { from_raw_parts_mut(self.v.as_mut_ptr().add(start), self.chunk_size) }
27422743
}
27432744
}

0 commit comments

Comments
 (0)