Skip to content

Commit 77d8059

Browse files
committed
add debug assertion to from_raw_parts testing the alignment
1 parent a80a610 commit 77d8059

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/libcore/slice/mod.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -3889,18 +3889,18 @@ unsafe impl<'a, T> TrustedRandomAccess for ExactChunksMut<'a, T> {
38893889
/// ```
38903890
/// use std::slice;
38913891
///
3892-
/// // manifest a slice out of thin air!
3893-
/// let ptr = 0x1234 as *const usize;
3894-
/// let amt = 10;
3895-
/// unsafe {
3896-
/// let slice = slice::from_raw_parts(ptr, amt);
3897-
/// }
3892+
/// // manifest a slice for a single element
3893+
/// let x = 42;
3894+
/// let ptr = &x as *const _;
3895+
/// let slice = unsafe { slice::from_raw_parts(ptr, 1) };
3896+
/// assert_eq!(slice[0], 42);
38983897
/// ```
38993898
///
39003899
/// [`NonNull::dangling()`]: ../../std/ptr/struct.NonNull.html#method.dangling
39013900
#[inline]
39023901
#[stable(feature = "rust1", since = "1.0.0")]
39033902
pub unsafe fn from_raw_parts<'a, T>(data: *const T, len: usize) -> &'a [T] {
3903+
debug_assert!(data as usize % mem::align_of::<T>() == 0, "attempt to create unaligned slice");
39043904
Repr { raw: FatPtr { data, len } }.rust
39053905
}
39063906

@@ -3914,6 +3914,7 @@ pub unsafe fn from_raw_parts<'a, T>(data: *const T, len: usize) -> &'a [T] {
39143914
#[inline]
39153915
#[stable(feature = "rust1", since = "1.0.0")]
39163916
pub unsafe fn from_raw_parts_mut<'a, T>(data: *mut T, len: usize) -> &'a mut [T] {
3917+
debug_assert!(data as usize % mem::align_of::<T>() == 0, "attempt to create unaligned slice");
39173918
Repr { raw: FatPtr { data, len} }.rust_mut
39183919
}
39193920

0 commit comments

Comments
 (0)