Skip to content

Commit

Permalink
wip: CR fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
yotamofek committed Jan 27, 2024
1 parent 540689b commit dd8b7ee
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 14 deletions.
11 changes: 5 additions & 6 deletions library/core/src/ptr/const_ptr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1783,8 +1783,8 @@ impl<T, const N: usize> *const [T; N] {
/// assert_eq!(arr.as_ptr(), ptr::null());
/// ```
#[inline]
#[unstable(feature = "array_ptr_get", issue = "119411")]
#[rustc_const_unstable(feature = "array_ptr_get", issue = "119411")]
#[unstable(feature = "array_ptr_get", issue = "119834")]
#[rustc_const_unstable(feature = "array_ptr_get", issue = "119834")]
pub const fn as_ptr(self) -> *const T {
self as *const T
}
Expand All @@ -1801,11 +1801,10 @@ impl<T, const N: usize> *const [T; N] {
/// assert_eq!(slice.len(), 3);
/// ```
#[inline]
#[unstable(feature = "array_ptr_get", issue = "119411")]
#[rustc_const_unstable(feature = "array_ptr_get", issue = "119411")]
#[unstable(feature = "array_ptr_get", issue = "119834")]
#[rustc_const_unstable(feature = "array_ptr_get", issue = "119834")]
pub const fn as_slice(self) -> *const [T] {
// SAFETY: `N` is the length of the array, so the pointer is always in-bounds.
unsafe { slice::from_raw_parts(self.as_ptr(), N) }
slice_from_raw_parts(self.as_ptr(), N)
}
}

Expand Down
17 changes: 9 additions & 8 deletions library/core/src/ptr/mut_ptr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2198,7 +2198,7 @@ impl<T> *mut [T] {
impl<T, const N: usize> *mut [T; N] {
/// Returns a raw pointer to the array's buffer.
///
/// This is equivalent to casting `self` to `*const T`, but more type-safe.
/// This is equivalent to casting `self` to `*mut T`, but more type-safe.
///
/// # Examples
///
Expand All @@ -2210,12 +2210,13 @@ impl<T, const N: usize> *mut [T; N] {
/// assert_eq!(arr.as_mut_ptr(), ptr::null_mut());
/// ```
#[inline]
#[unstable(feature = "array_ptr_get", issue = "119411")]
pub fn as_mut_ptr(self) -> *mut T {
#[unstable(feature = "array_ptr_get", issue = "119834")]
#[rustc_const_unstable(feature = "array_ptr_get", issue = "119834")]
pub const fn as_mut_ptr(self) -> *mut T {
self as *mut T
}

/// Returns a raw pointer to a unique slice containing the entire array.
/// Returns a raw pointer to a mutable slice containing the entire array.
///
/// # Examples
///
Expand All @@ -2230,10 +2231,10 @@ impl<T, const N: usize> *mut [T; N] {
/// assert_eq!(arr, [3, 4, 5]);
/// ```
#[inline]
#[unstable(feature = "array_ptr_get", issue = "119411")]
pub fn as_mut_slice(self) -> *mut [T] {
// SAFETY: `N` is the length of the array, so the pointer is always in-bounds.
unsafe { slice::from_raw_parts_mut(self.as_mut_ptr(), N) }
#[unstable(feature = "array_ptr_get", issue = "119834")]
#[rustc_const_unstable(feature = "array_ptr_get", issue = "119834")]
pub const fn as_mut_slice(self) -> *mut [T] {
slice_from_raw_parts_mut(self.as_mut_ptr(), N)
}
}

Expand Down
2 changes: 2 additions & 0 deletions library/core/tests/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#![feature(alloc_layout_extra)]
#![feature(array_chunks)]
#![feature(array_ptr_get)]
#![feature(array_windows)]
#![feature(ascii_char)]
#![feature(ascii_char_variants)]
Expand Down Expand Up @@ -49,6 +50,7 @@
#![feature(sort_internals)]
#![feature(slice_take)]
#![feature(slice_from_ptr_range)]
#![feature(slice_ptr_len)]
#![feature(slice_split_once)]
#![feature(split_as_slice)]
#![feature(maybe_uninit_uninit_array)]
Expand Down
13 changes: 13 additions & 0 deletions library/core/tests/ptr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1142,3 +1142,16 @@ fn test_const_copy() {
assert!(*ptr2 == 1);
};
}

#[test]
fn test_null_array_as_slice() {
let arr: *mut [u8; 4] = null_mut();
let ptr: *mut [u8] = arr.as_mut_slice();
assert!(ptr.is_null());
assert_eq!(ptr.len(), 4);

let arr: *const [u8; 4] = null();
let ptr: *const [u8] = arr.as_slice();
assert!(ptr.is_null());
assert_eq!(ptr.len(), 4);
}

0 comments on commit dd8b7ee

Please sign in to comment.