| 
51 | 51 |     /// iterator (either via `IntoIterator` for arrays or via another way).  | 
52 | 52 |     #[unstable(feature = "array_value_iter", issue = "65798")]  | 
53 | 53 |     pub fn new(array: [T; N]) -> Self {  | 
54 |  | -        // The transmute here is actually safe. The docs of `MaybeUninit`  | 
 | 54 | +        // SAFETY: The transmute here is actually safe. The docs of `MaybeUninit`  | 
55 | 55 |         // promise:  | 
56 | 56 |         //  | 
57 | 57 |         // > `MaybeUninit<T>` is guaranteed to have the same size and alignment  | 
@@ -84,10 +84,10 @@ where  | 
84 | 84 |     /// Returns an immutable slice of all elements that have not been yielded  | 
85 | 85 |     /// yet.  | 
86 | 86 |     fn as_slice(&self) -> &[T] {  | 
87 |  | -        // This transmute is safe. As mentioned in `new`, `MaybeUninit` retains  | 
 | 87 | +        let slice = &self.data[self.alive.clone()];  | 
 | 88 | +        // SAFETY: This transmute is safe. As mentioned in `new`, `MaybeUninit` retains  | 
88 | 89 |         // the size and alignment of `T`. Furthermore, we know that all  | 
89 | 90 |         // elements within `alive` are properly initialized.  | 
90 |  | -        let slice = &self.data[self.alive.clone()];  | 
91 | 91 |         unsafe {  | 
92 | 92 |             mem::transmute::<&[MaybeUninit<T>], &[T]>(slice)  | 
93 | 93 |         }  | 
@@ -117,7 +117,8 @@ where  | 
117 | 117 |         let idx = self.alive.start;  | 
118 | 118 |         self.alive.start += 1;  | 
119 | 119 | 
 
  | 
120 |  | -        // Read the element from the array. This is safe: `idx` is an index  | 
 | 120 | +        // Read the element from the array.  | 
 | 121 | +        // SAFETY: This is safe: `idx` is an index  | 
121 | 122 |         // into the "alive" region of the array. Reading this element means  | 
122 | 123 |         // that `data[idx]` is regarded as dead now (i.e. do not touch). As  | 
123 | 124 |         // `idx` was the start of the alive-zone, the alive zone is now  | 
@@ -163,7 +164,8 @@ where  | 
163 | 164 |         // + 1]`.  | 
164 | 165 |         self.alive.end -= 1;  | 
165 | 166 | 
 
  | 
166 |  | -        // Read the element from the array. This is safe: `alive.end` is an  | 
 | 167 | +        // Read the element from the array.  | 
 | 168 | +        // SAFETY: This is safe: `alive.end` is an  | 
167 | 169 |         // index into the "alive" region of the array. Compare the previous  | 
168 | 170 |         // comment that states that the alive region is  | 
169 | 171 |         // `data[alive.start..alive.end + 1]`. Reading this element means that  | 
@@ -226,6 +228,7 @@ where  | 
226 | 228 |     [T; N]: LengthAtMost32,  | 
227 | 229 | {  | 
228 | 230 |     fn clone(&self) -> Self {  | 
 | 231 | +        // SAFETY: each point of unsafety is documented inside the unsafe block  | 
229 | 232 |         unsafe {  | 
230 | 233 |             // This creates a new uninitialized array. Note that the `assume_init`  | 
231 | 234 |             // refers to the array, not the individual elements. And it is Ok if  | 
 | 
0 commit comments