Closed
Description
Make slice::from_raw_parts
and slice::from_raw_parts_mut
a const fn available under a feature flag.
This would require a change in the ptr
module as well, as slice module just forwards to it.
slice::from_raw_parts[mut]
is used in alot of places (e.g slice::from_ref[mut]
, which would get one step closer into constification if slice::from_raw_parts[mut]
is a const fn.
Here is a little playground to show it's possible:
https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=dd5c506a3e082c619f557d972e9956ff
In order to get this working, the following functions and functionalities need to be constified:
ptr::slice_from_raw_parts
(Make ptr::slice_from_raw_parts a const fn available under a feature flag #67462)
Implementation PR for ptr::slice_from_raw_parts
: #67462
Partially stabilized in #97522; remaining unstable functions:
// core::ptr
pub const fn slice_from_raw_parts_mut<T>(data: *mut T, len: usize) -> *mut [T];
// core::slice
pub const unsafe fn from_raw_parts_mut<'a, T>(data: *mut T, len: usize) -> &'a mut [T];
// core::ptr::NonNull
pub const fn slice_from_raw_parts(data: NonNull<T>, len: usize) -> Self
Metadata
Metadata
Assignees
Labels
Area: Constant evaluation, covers all const contexts (static, const fn, ...)Area: raw pointers, MaybeUninit, NonNullArea: `[T]`Blocker: Implemented in the nightly compiler and unstable.Category: An issue tracking the progress of sth. like the implementation of an RFCLibs issues that are considered "small" or self-containedLibs issues that are tracked on the team's project board.Relevant to the library API team, which will review and decide on the PR/issue.This issue / PR is in PFCP or FCP with a disposition to merge it.The final comment period is finished for this PR / Issue.
Activity
Rollup merge of rust-lang#67462 - DutchGhost:const_slice_from_raw_par…
Rollup merge of rust-lang#67462 - DutchGhost:const_slice_from_raw_par…
[-]feature request: const slice::from_raw_parts[/-][+]Tracking issue for const slice::from_raw_parts[/+]DoumanAsh commentedon Apr 22, 2020
Is there particular reason why it remains gated by feature flag instead of just being const fn as it is?
DutchGhost commentedon Apr 23, 2020
The constant versions of function's and methods in libcore/libstd need a period of time under a feature flag before they can be stabilized as a const function/method. Const functions are 'relatively' new, and the ability of what one can do inside isn't fully determined yet I think.
One of those abilities is how to handle raw pointers, which
slice::from_raw_parts[mut]
needs.josephlr commentedon Apr 24, 2020
@DutchGhost would it make sense for the
slice::{from_raw_parts[_mut], from_ref, from_mut}
to be constified behind this feature as well? The only thing that seems blocking that is this debug_assert which callsis_aligned_and_not_null
.Checking the alignment will need support from the MIR interpreter, see #62420
58 remaining items