Partially stabilize maybe_uninit_extra
This covers: impl<T> MaybeUninit<T> { pub unsafe fn assume_init_read(&self) -> T { ... } pub unsafe fn assume_init_drop(&mut self) { ... } } It does not cover the const-ness of `write` under `const_maybe_uninit_write` nor the const-ness of `assume_init_read` (this commit adds `const_maybe_uninit_assume_init_read` for that). FCP: https://github.com/rust-lang/rust/issues/63567#issuecomment-958590287. Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
e4b1d58414
commit
8680a44c0f
@ -119,7 +119,6 @@
|
|||||||
#![feature(inplace_iteration)]
|
#![feature(inplace_iteration)]
|
||||||
#![feature(iter_advance_by)]
|
#![feature(iter_advance_by)]
|
||||||
#![feature(layout_for_ptr)]
|
#![feature(layout_for_ptr)]
|
||||||
#![feature(maybe_uninit_extra)]
|
|
||||||
#![feature(maybe_uninit_slice)]
|
#![feature(maybe_uninit_slice)]
|
||||||
#![cfg_attr(test, feature(new_uninit))]
|
#![cfg_attr(test, feature(new_uninit))]
|
||||||
#![feature(nonnull_slice_from_raw_parts)]
|
#![feature(nonnull_slice_from_raw_parts)]
|
||||||
|
@ -330,7 +330,7 @@ impl<T> MaybeUninit<T> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// #![feature(maybe_uninit_uninit_array, maybe_uninit_extra, maybe_uninit_slice)]
|
/// #![feature(maybe_uninit_uninit_array, maybe_uninit_slice)]
|
||||||
///
|
///
|
||||||
/// use std::mem::MaybeUninit;
|
/// use std::mem::MaybeUninit;
|
||||||
///
|
///
|
||||||
@ -662,7 +662,6 @@ impl<T> MaybeUninit<T> {
|
|||||||
/// Correct usage of this method:
|
/// Correct usage of this method:
|
||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// #![feature(maybe_uninit_extra)]
|
|
||||||
/// use std::mem::MaybeUninit;
|
/// use std::mem::MaybeUninit;
|
||||||
///
|
///
|
||||||
/// let mut x = MaybeUninit::<u32>::uninit();
|
/// let mut x = MaybeUninit::<u32>::uninit();
|
||||||
@ -683,7 +682,6 @@ impl<T> MaybeUninit<T> {
|
|||||||
/// *Incorrect* usage of this method:
|
/// *Incorrect* usage of this method:
|
||||||
///
|
///
|
||||||
/// ```rust,no_run
|
/// ```rust,no_run
|
||||||
/// #![feature(maybe_uninit_extra)]
|
|
||||||
/// use std::mem::MaybeUninit;
|
/// use std::mem::MaybeUninit;
|
||||||
///
|
///
|
||||||
/// let mut x = MaybeUninit::<Option<Vec<u32>>>::uninit();
|
/// let mut x = MaybeUninit::<Option<Vec<u32>>>::uninit();
|
||||||
@ -693,8 +691,8 @@ impl<T> MaybeUninit<T> {
|
|||||||
/// // We now created two copies of the same vector, leading to a double-free ⚠️ when
|
/// // We now created two copies of the same vector, leading to a double-free ⚠️ when
|
||||||
/// // they both get dropped!
|
/// // they both get dropped!
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "maybe_uninit_extra", issue = "63567")]
|
#[stable(feature = "maybe_uninit_extra", since = "1.60.0")]
|
||||||
#[rustc_const_unstable(feature = "maybe_uninit_extra", issue = "63567")]
|
#[rustc_const_unstable(feature = "const_maybe_uninit_assume_init_read", issue = "63567")]
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub const unsafe fn assume_init_read(&self) -> T {
|
pub const unsafe fn assume_init_read(&self) -> T {
|
||||||
@ -728,7 +726,7 @@ impl<T> MaybeUninit<T> {
|
|||||||
///
|
///
|
||||||
/// [`assume_init`]: MaybeUninit::assume_init
|
/// [`assume_init`]: MaybeUninit::assume_init
|
||||||
/// [`Vec<T>`]: ../../std/vec/struct.Vec.html
|
/// [`Vec<T>`]: ../../std/vec/struct.Vec.html
|
||||||
#[unstable(feature = "maybe_uninit_extra", issue = "63567")]
|
#[stable(feature = "maybe_uninit_extra", since = "1.60.0")]
|
||||||
pub unsafe fn assume_init_drop(&mut self) {
|
pub unsafe fn assume_init_drop(&mut self) {
|
||||||
// SAFETY: the caller must guarantee that `self` is initialized and
|
// SAFETY: the caller must guarantee that `self` is initialized and
|
||||||
// satisfies all invariants of `T`.
|
// satisfies all invariants of `T`.
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#![feature(const_convert)]
|
#![feature(const_convert)]
|
||||||
#![feature(const_maybe_uninit_as_mut_ptr)]
|
#![feature(const_maybe_uninit_as_mut_ptr)]
|
||||||
#![feature(const_maybe_uninit_assume_init)]
|
#![feature(const_maybe_uninit_assume_init)]
|
||||||
|
#![feature(const_maybe_uninit_assume_init_read)]
|
||||||
#![feature(const_num_from_num)]
|
#![feature(const_num_from_num)]
|
||||||
#![feature(const_ptr_read)]
|
#![feature(const_ptr_read)]
|
||||||
#![feature(const_ptr_write)]
|
#![feature(const_ptr_write)]
|
||||||
@ -46,7 +47,6 @@
|
|||||||
#![feature(slice_take)]
|
#![feature(slice_take)]
|
||||||
#![feature(maybe_uninit_uninit_array)]
|
#![feature(maybe_uninit_uninit_array)]
|
||||||
#![feature(maybe_uninit_array_assume_init)]
|
#![feature(maybe_uninit_array_assume_init)]
|
||||||
#![feature(maybe_uninit_extra)]
|
|
||||||
#![feature(maybe_uninit_write_slice)]
|
#![feature(maybe_uninit_write_slice)]
|
||||||
#![feature(min_specialization)]
|
#![feature(min_specialization)]
|
||||||
#![feature(numfmt)]
|
#![feature(numfmt)]
|
||||||
|
@ -297,7 +297,6 @@
|
|||||||
#![feature(llvm_asm)]
|
#![feature(llvm_asm)]
|
||||||
#![feature(log_syntax)]
|
#![feature(log_syntax)]
|
||||||
#![feature(map_try_insert)]
|
#![feature(map_try_insert)]
|
||||||
#![feature(maybe_uninit_extra)]
|
|
||||||
#![feature(maybe_uninit_slice)]
|
#![feature(maybe_uninit_slice)]
|
||||||
#![feature(maybe_uninit_uninit_array)]
|
#![feature(maybe_uninit_uninit_array)]
|
||||||
#![feature(maybe_uninit_write_slice)]
|
#![feature(maybe_uninit_write_slice)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user