Skip to content

Commit f43ced3

Browse files
authored
Rollup merge of rust-lang#67462 - DutchGhost:const_slice_from_raw_parts, r=dtolnay
Make ptr::slice_from_raw_parts a const fn available under a feature flag A first step in the direction of rust-lang#67456 . This makes `ptr::slice_from_raw_parts` and `ptr::slice_from_raw_parts_mut` available as a const fn under a feature flag.
2 parents a01f956 + 382d370 commit f43ced3

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

src/libcore/ptr/mod.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,8 @@ pub(crate) struct FatPtr<T> {
259259
/// ```
260260
#[inline]
261261
#[unstable(feature = "slice_from_raw_parts", reason = "recently added", issue = "36925")]
262-
pub fn slice_from_raw_parts<T>(data: *const T, len: usize) -> *const [T] {
262+
#[rustc_const_unstable(feature = "const_slice_from_raw_parts", issue = "67456")]
263+
pub const fn slice_from_raw_parts<T>(data: *const T, len: usize) -> *const [T] {
263264
unsafe { Repr { raw: FatPtr { data, len } }.rust }
264265
}
265266

@@ -275,7 +276,8 @@ pub fn slice_from_raw_parts<T>(data: *const T, len: usize) -> *const [T] {
275276
/// [`from_raw_parts_mut`]: ../../std/slice/fn.from_raw_parts_mut.html
276277
#[inline]
277278
#[unstable(feature = "slice_from_raw_parts", reason = "recently added", issue = "36925")]
278-
pub fn slice_from_raw_parts_mut<T>(data: *mut T, len: usize) -> *mut [T] {
279+
#[rustc_const_unstable(feature = "const_slice_from_raw_parts", issue = "67456")]
280+
pub const fn slice_from_raw_parts_mut<T>(data: *mut T, len: usize) -> *mut [T] {
279281
unsafe { Repr { raw: FatPtr { data, len } }.rust_mut }
280282
}
281283

src/libcore/tests/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@
3636
#![feature(iter_is_partitioned)]
3737
#![feature(iter_order_by)]
3838
#![feature(cmp_min_max_by)]
39+
#![feature(slice_from_raw_parts)]
40+
#![feature(const_slice_from_raw_parts)]
41+
#![feature(const_raw_ptr_deref)]
3942

4043
extern crate test;
4144

src/libcore/tests/ptr.rs

+11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
use core::cell::RefCell;
22
use core::ptr::*;
33

4+
#[test]
5+
fn test_const_from_raw_parts() {
6+
const SLICE: &[u8] = &[1, 2, 3, 4];
7+
const FROM_RAW: &[u8] = unsafe { &*slice_from_raw_parts(SLICE.as_ptr(), SLICE.len()) };
8+
assert_eq!(SLICE, FROM_RAW);
9+
10+
let slice = &[1, 2, 3, 4, 5];
11+
let from_raw = unsafe { &*slice_from_raw_parts(slice.as_ptr(), 2) } ;
12+
assert_eq!(&slice[..2], from_raw);
13+
}
14+
415
#[test]
516
fn test() {
617
unsafe {

0 commit comments

Comments
 (0)