about summary refs log tree commit diff
path: root/src/libcore/iter
diff options
context:
space:
mode:
authorLeSeulArtichaut <leseulartichaut@gmail.com>2020-04-23 23:21:53 +0200
committerLeSeulArtichaut <leseulartichaut@gmail.com>2020-04-24 01:48:48 +0200
commitd515168f3ba481ee633099753f75e4e62750e6b4 (patch)
treea86c94e3ff0a18d9723831151db3e02ce4decfb8 /src/libcore/iter
parent413a12909f3b149af17d75268ed4a136afb82c36 (diff)
downloadrust-d515168f3ba481ee633099753f75e4e62750e6b4.tar.gz
rust-d515168f3ba481ee633099753f75e4e62750e6b4.zip
Document unsafety in `core::{panicking, alloc::layout, hint, iter::adapters::zip}`
Diffstat (limited to 'src/libcore/iter')
-rw-r--r--src/libcore/iter/adapters/zip.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libcore/iter/adapters/zip.rs b/src/libcore/iter/adapters/zip.rs
index b13e12e2e86..e83d36a580f 100644
--- a/src/libcore/iter/adapters/zip.rs
+++ b/src/libcore/iter/adapters/zip.rs
@@ -1,5 +1,3 @@
-// ignore-tidy-undocumented-unsafe
-
 use crate::cmp;
 
 use super::super::{DoubleEndedIterator, ExactSizeIterator, FusedIterator, Iterator, TrustedLen};
@@ -176,9 +174,11 @@ where
         if self.index < self.len {
             let i = self.index;
             self.index += 1;
+            // SAFETY: `i` is smaller than `self.len`, thus smaller than `self.a.len()` and `self.b.len()`
             unsafe { Some((self.a.get_unchecked(i), self.b.get_unchecked(i))) }
         } else if A::may_have_side_effect() && self.index < self.a.len() {
             // match the base implementation's potential side effects
+            // SAFETY: we just checked that `self.index` < `self.a.len()`
             unsafe {
                 self.a.get_unchecked(self.index);
             }
@@ -203,11 +203,15 @@ where
             let i = self.index;
             self.index += 1;
             if A::may_have_side_effect() {
+                // SAFETY: the usage of `cmp::min` to calculate `delta`
+                // ensures that `end` is smaller than or equal to `self.len`,
+                // so `i` is also smaller than `self.len`.
                 unsafe {
                     self.a.get_unchecked(i);
                 }
             }
             if B::may_have_side_effect() {
+                // SAFETY: same as above.
                 unsafe {
                     self.b.get_unchecked(i);
                 }
@@ -243,6 +247,8 @@ where
         if self.index < self.len {
             self.len -= 1;
             let i = self.len;
+            // SAFETY: `i` is smaller than the previous value of `self.len`,
+            // which is also smaller than or equal to `self.a.len()` and `self.b.len()`
             unsafe { Some((self.a.get_unchecked(i), self.b.get_unchecked(i))) }
         } else {
             None