diff options
| author | Dodo <kasper199914@gmail.com> | 2019-12-20 21:42:03 +0100 |
|---|---|---|
| committer | Dodo <kasper199914@gmail.com> | 2019-12-20 21:42:03 +0100 |
| commit | 382d370c4f5750900ec8896b3659d7624fe048a0 (patch) | |
| tree | 449da325635e6a6a2e11f435dc30e97c014cc312 | |
| parent | 6b561b4917e803c4be4ca44d8e552b680cb9e380 (diff) | |
| download | rust-382d370c4f5750900ec8896b3659d7624fe048a0.tar.gz rust-382d370c4f5750900ec8896b3659d7624fe048a0.zip | |
Make ptr::slice_from_raw_parts a const fn available under a feature flag
| -rw-r--r-- | src/libcore/ptr/mod.rs | 6 | ||||
| -rw-r--r-- | src/libcore/tests/lib.rs | 3 | ||||
| -rw-r--r-- | src/libcore/tests/ptr.rs | 11 |
3 files changed, 18 insertions, 2 deletions
diff --git a/src/libcore/ptr/mod.rs b/src/libcore/ptr/mod.rs index 776165e7bd7..67a64b53b0b 100644 --- a/src/libcore/ptr/mod.rs +++ b/src/libcore/ptr/mod.rs @@ -257,7 +257,8 @@ pub(crate) struct FatPtr<T> { /// ``` #[inline] #[unstable(feature = "slice_from_raw_parts", reason = "recently added", issue = "36925")] -pub fn slice_from_raw_parts<T>(data: *const T, len: usize) -> *const [T] { +#[rustc_const_unstable(feature = "const_slice_from_raw_parts", issue = "67456")] +pub const fn slice_from_raw_parts<T>(data: *const T, len: usize) -> *const [T] { unsafe { Repr { raw: FatPtr { data, len } }.rust } } @@ -273,7 +274,8 @@ pub fn slice_from_raw_parts<T>(data: *const T, len: usize) -> *const [T] { /// [`from_raw_parts_mut`]: ../../std/slice/fn.from_raw_parts_mut.html #[inline] #[unstable(feature = "slice_from_raw_parts", reason = "recently added", issue = "36925")] -pub fn slice_from_raw_parts_mut<T>(data: *mut T, len: usize) -> *mut [T] { +#[rustc_const_unstable(feature = "const_slice_from_raw_parts", issue = "67456")] +pub const fn slice_from_raw_parts_mut<T>(data: *mut T, len: usize) -> *mut [T] { unsafe { Repr { raw: FatPtr { data, len } }.rust_mut } } diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index b28ed2eaa08..1f20ebc01e9 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -36,6 +36,9 @@ #![feature(iter_is_partitioned)] #![feature(iter_order_by)] #![feature(cmp_min_max_by)] +#![feature(slice_from_raw_parts)] +#![feature(const_slice_from_raw_parts)] +#![feature(const_raw_ptr_deref)] extern crate test; diff --git a/src/libcore/tests/ptr.rs b/src/libcore/tests/ptr.rs index eea736bc88f..473bc881d29 100644 --- a/src/libcore/tests/ptr.rs +++ b/src/libcore/tests/ptr.rs @@ -2,6 +2,17 @@ use core::cell::RefCell; use core::ptr::*; #[test] +fn test_const_from_raw_parts() { + const SLICE: &[u8] = &[1, 2, 3, 4]; + const FROM_RAW: &[u8] = unsafe { &*slice_from_raw_parts(SLICE.as_ptr(), SLICE.len()) }; + assert_eq!(SLICE, FROM_RAW); + + let slice = &[1, 2, 3, 4, 5]; + let from_raw = unsafe { &*slice_from_raw_parts(slice.as_ptr(), 2) } ; + assert_eq!(&slice[..2], from_raw); +} + +#[test] fn test() { unsafe { struct Pair { |
