Rollup merge of #131281 - RalfJung:const-cell, r=Amanieu · qinheping/verify-rust-std@fcd199d (original) (raw)

`@@ -494,8 +494,9 @@ impl Cell {

`

494

494

```` /// ```


`495`

`495`

`#[inline]

`

`496`

`496`

`#[stable(feature = "move_cell", since = "1.17.0")]

`

``

`497`

`+

#[rustc_const_unstable(feature = "const_cell", issue = "131283")]

`

`497`

`498`

`#[rustc_confusables("swap")]

`

`498`

``

`-

pub fn replace(&self, val: T) -> T {

`

``

`499`

`+

pub const fn replace(&self, val: T) -> T {

`

`499`

`500`

`// SAFETY: This can cause data races if called from a separate thread,

`

`500`

`501`

`` // but `Cell` is `!Sync` so this won't happen.

``

`501`

`502`

` mem::replace(unsafe { &mut *self.value.get() }, val)

`

`@@ -535,7 +536,8 @@ impl<T: Copy> Cell<T> {

`

`535`

`536`

```` /// ```

536

537

`#[inline]

`

537

538

`#[stable(feature = "rust1", since = "1.0.0")]

`

538

``

`-

pub fn get(&self) -> T {

`

``

539

`+

#[rustc_const_unstable(feature = "const_cell", issue = "131283")]

`

``

540

`+

pub const fn get(&self) -> T {

`

539

541

`// SAFETY: This can cause data races if called from a separate thread,

`

540

542

`` // but Cell is !Sync so this won't happen.

``

541

543

`unsafe { *self.value.get() }

`

`@@ -613,7 +615,8 @@ impl<T: ?Sized> Cell {

`

613

615

```` /// ```


`614`

`616`

`#[inline]

`

`615`

`617`

`#[stable(feature = "cell_get_mut", since = "1.11.0")]

`

`616`

``

`-

pub fn get_mut(&mut self) -> &mut T {

`

``

`618`

`+

#[rustc_const_unstable(feature = "const_cell", issue = "131283")]

`

``

`619`

`+

pub const fn get_mut(&mut self) -> &mut T {

`

`617`

`620`

`self.value.get_mut()

`

`618`

`621`

`}

`

`619`

`622`

``

`@@ -632,7 +635,8 @@ impl<T: ?Sized> Cell<T> {

`

`632`

`635`

```` /// ```

633

636

`#[inline]

`

634

637

`#[stable(feature = "as_cell", since = "1.37.0")]

`

635

``

`-

pub fn from_mut(t: &mut T) -> &Cell {

`

``

638

`+

#[rustc_const_unstable(feature = "const_cell", issue = "131283")]

`

``

639

`+

pub const fn from_mut(t: &mut T) -> &Cell {

`

636

640

`` // SAFETY: &mut ensures unique access.

``

637

641

`unsafe { &*(t as *mut T as *const Cell) }

`

638

642

`}

`

`@@ -686,7 +690,8 @@ impl Cell<[T]> {

`

686

690

`/// assert_eq!(slice_cell.len(), 3);

`

687

691

```` /// ```


`688`

`692`

`#[stable(feature = "as_cell", since = "1.37.0")]

`

`689`

``

`-

pub fn as_slice_of_cells(&self) -> &[Cell<T>] {

`

``

`693`

`+

#[rustc_const_unstable(feature = "const_cell", issue = "131283")]

`

``

`694`

`+

pub const fn as_slice_of_cells(&self) -> &[Cell<T>] {

`

`690`

`695`

`` // SAFETY: `Cell<T>` has the same memory layout as `T`.

``

`691`

`696`

`unsafe { &*(self as *const Cell<[T]> as *const [Cell<T>]) }

`

`692`

`697`

`}

`

`@@ -706,7 +711,8 @@ impl<T, const N: usize> Cell<[T; N]> {

`

`706`

`711`

`/// let array_cell: &[Cell<i32>; 3] = cell_array.as_array_of_cells();

`

`707`

`712`

```` /// ```

708

713

`#[unstable(feature = "as_array_of_cells", issue = "88248")]

`

709

``

`-

pub fn as_array_of_cells(&self) -> &[Cell; N] {

`

``

714

`+

#[rustc_const_unstable(feature = "as_array_of_cells", issue = "88248")]

`

``

715

`+

pub const fn as_array_of_cells(&self) -> &[Cell; N] {

`

710

716

`` // SAFETY: Cell<T> has the same memory layout as T.

``

711

717

`unsafe { &*(self as *const Cell<[T; N]> as *const [Cell; N]) }

`

712

718

`}

`