@@ -11,13 +11,13 @@ use crate::{array, ptr, ub_checks};
11
11
///
12
12
/// Behavior is undefined if any of the following conditions are violated:
13
13
///
14
- /// * `data` must be [valid] for reads for `len * mem::size_of::<T>()` many bytes,
14
+ /// * `data` must be non-null, [valid] for reads for `len * mem::size_of::<T>()` many bytes,
15
15
/// and it must be properly aligned. This means in particular:
16
16
///
17
17
/// * The entire memory range of this slice must be contained within a single allocated object!
18
18
/// Slices can never span across multiple allocated objects. See [below](#incorrect-usage)
19
19
/// for an example incorrectly not taking this into account.
20
- /// * `data` must be non-null and aligned even for zero-length slices. One
20
+ /// * `data` must be non-null and aligned even for zero-length slices or slices of ZSTs . One
21
21
/// reason for this is that enum layout optimizations may rely on references
22
22
/// (including slices of any length) being aligned and non-null to distinguish
23
23
/// them from other data. You can obtain a pointer that is usable as `data`
@@ -146,12 +146,12 @@ pub const unsafe fn from_raw_parts<'a, T>(data: *const T, len: usize) -> &'a [T]
146
146
///
147
147
/// Behavior is undefined if any of the following conditions are violated:
148
148
///
149
- /// * `data` must be [valid] for both reads and writes for `len * mem::size_of::<T>()` many bytes,
149
+ /// * `data` must be non-null, [valid] for both reads and writes for `len * mem::size_of::<T>()` many bytes,
150
150
/// and it must be properly aligned. This means in particular:
151
151
///
152
152
/// * The entire memory range of this slice must be contained within a single allocated object!
153
153
/// Slices can never span across multiple allocated objects.
154
- /// * `data` must be non-null and aligned even for zero-length slices. One
154
+ /// * `data` must be non-null and aligned even for zero-length slices or slices of ZSTs . One
155
155
/// reason for this is that enum layout optimizations may rely on references
156
156
/// (including slices of any length) being aligned and non-null to distinguish
157
157
/// them from other data. You can obtain a pointer that is usable as `data`
@@ -219,7 +219,7 @@ pub const fn from_mut<T>(s: &mut T) -> &mut [T] {
219
219
///
220
220
/// Behavior is undefined if any of the following conditions are violated:
221
221
///
222
- /// * The `start` pointer of the range must be a [valid] and properly aligned pointer
222
+ /// * The `start` pointer of the range must be a non-null, [valid] and properly aligned pointer
223
223
/// to the first element of a slice.
224
224
///
225
225
/// * The `end` pointer must be a [valid] and properly aligned pointer to *one past*
@@ -235,7 +235,7 @@ pub const fn from_mut<T>(s: &mut T) -> &mut [T] {
235
235
/// of lifetime `'a`, except inside an `UnsafeCell`.
236
236
///
237
237
/// * The total length of the range must be no larger than `isize::MAX`,
238
- /// and adding that size to `data ` must not "wrap around" the address space.
238
+ /// and adding that size to `start ` must not "wrap around" the address space.
239
239
/// See the safety documentation of [`pointer::offset`].
240
240
///
241
241
/// Note that a range created from [`slice::as_ptr_range`] fulfills these requirements.
@@ -288,7 +288,7 @@ pub const unsafe fn from_ptr_range<'a, T>(range: Range<*const T>) -> &'a [T] {
288
288
///
289
289
/// Behavior is undefined if any of the following conditions are violated:
290
290
///
291
- /// * The `start` pointer of the range must be a [valid] and properly aligned pointer
291
+ /// * The `start` pointer of the range must be a non-null, [valid] and properly aligned pointer
292
292
/// to the first element of a slice.
293
293
///
294
294
/// * The `end` pointer must be a [valid] and properly aligned pointer to *one past*
@@ -305,7 +305,7 @@ pub const unsafe fn from_ptr_range<'a, T>(range: Range<*const T>) -> &'a [T] {
305
305
/// Both read and write accesses are forbidden.
306
306
///
307
307
/// * The total length of the range must be no larger than `isize::MAX`,
308
- /// and adding that size to `data ` must not "wrap around" the address space.
308
+ /// and adding that size to `start ` must not "wrap around" the address space.
309
309
/// See the safety documentation of [`pointer::offset`].
310
310
///
311
311
/// Note that a range created from [`slice::as_mut_ptr_range`] fulfills these requirements.
0 commit comments