|
|
|
@@ -2199,7 +2199,6 @@ pub fn update(
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(strict_provenance_atomic_ptr)]
|
|
|
|
|
/// use core::sync::atomic::{AtomicPtr, Ordering};
|
|
|
|
|
///
|
|
|
|
|
/// let atom = AtomicPtr::<i64>::new(core::ptr::null_mut());
|
|
|
|
@@ -2209,7 +2208,7 @@ pub fn update(
|
|
|
|
|
/// ```
|
|
|
|
|
#[inline]
|
|
|
|
|
#[cfg(target_has_atomic = "ptr")]
|
|
|
|
|
#[unstable(feature = "strict_provenance_atomic_ptr", issue = "99108")]
|
|
|
|
|
#[stable(feature = "strict_provenance_atomic_ptr", since = "CURRENT_RUSTC_VERSION")]
|
|
|
|
|
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
|
|
|
|
|
pub fn fetch_ptr_add(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
self.fetch_byte_add(val.wrapping_mul(size_of::<T>()), order)
|
|
|
|
@@ -2240,7 +2239,6 @@ pub fn fetch_ptr_add(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(strict_provenance_atomic_ptr)]
|
|
|
|
|
/// use core::sync::atomic::{AtomicPtr, Ordering};
|
|
|
|
|
///
|
|
|
|
|
/// let array = [1i32, 2i32];
|
|
|
|
@@ -2254,7 +2252,7 @@ pub fn fetch_ptr_add(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// ```
|
|
|
|
|
#[inline]
|
|
|
|
|
#[cfg(target_has_atomic = "ptr")]
|
|
|
|
|
#[unstable(feature = "strict_provenance_atomic_ptr", issue = "99108")]
|
|
|
|
|
#[stable(feature = "strict_provenance_atomic_ptr", since = "CURRENT_RUSTC_VERSION")]
|
|
|
|
|
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
|
|
|
|
|
pub fn fetch_ptr_sub(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
self.fetch_byte_sub(val.wrapping_mul(size_of::<T>()), order)
|
|
|
|
@@ -2279,7 +2277,6 @@ pub fn fetch_ptr_sub(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(strict_provenance_atomic_ptr)]
|
|
|
|
|
/// use core::sync::atomic::{AtomicPtr, Ordering};
|
|
|
|
|
///
|
|
|
|
|
/// let atom = AtomicPtr::<i64>::new(core::ptr::null_mut());
|
|
|
|
@@ -2289,7 +2286,7 @@ pub fn fetch_ptr_sub(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// ```
|
|
|
|
|
#[inline]
|
|
|
|
|
#[cfg(target_has_atomic = "ptr")]
|
|
|
|
|
#[unstable(feature = "strict_provenance_atomic_ptr", issue = "99108")]
|
|
|
|
|
#[stable(feature = "strict_provenance_atomic_ptr", since = "CURRENT_RUSTC_VERSION")]
|
|
|
|
|
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
|
|
|
|
|
pub fn fetch_byte_add(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
// SAFETY: data races are prevented by atomic intrinsics.
|
|
|
|
@@ -2315,7 +2312,6 @@ pub fn fetch_byte_add(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(strict_provenance_atomic_ptr)]
|
|
|
|
|
/// use core::sync::atomic::{AtomicPtr, Ordering};
|
|
|
|
|
///
|
|
|
|
|
/// let mut arr = [0i64, 1];
|
|
|
|
@@ -2325,7 +2321,7 @@ pub fn fetch_byte_add(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// ```
|
|
|
|
|
#[inline]
|
|
|
|
|
#[cfg(target_has_atomic = "ptr")]
|
|
|
|
|
#[unstable(feature = "strict_provenance_atomic_ptr", issue = "99108")]
|
|
|
|
|
#[stable(feature = "strict_provenance_atomic_ptr", since = "CURRENT_RUSTC_VERSION")]
|
|
|
|
|
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
|
|
|
|
|
pub fn fetch_byte_sub(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
// SAFETY: data races are prevented by atomic intrinsics.
|
|
|
|
@@ -2361,7 +2357,6 @@ pub fn fetch_byte_sub(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(strict_provenance_atomic_ptr)]
|
|
|
|
|
/// use core::sync::atomic::{AtomicPtr, Ordering};
|
|
|
|
|
///
|
|
|
|
|
/// let pointer = &mut 3i64 as *mut i64;
|
|
|
|
@@ -2376,7 +2371,7 @@ pub fn fetch_byte_sub(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// ```
|
|
|
|
|
#[inline]
|
|
|
|
|
#[cfg(target_has_atomic = "ptr")]
|
|
|
|
|
#[unstable(feature = "strict_provenance_atomic_ptr", issue = "99108")]
|
|
|
|
|
#[stable(feature = "strict_provenance_atomic_ptr", since = "CURRENT_RUSTC_VERSION")]
|
|
|
|
|
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
|
|
|
|
|
pub fn fetch_or(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
// SAFETY: data races are prevented by atomic intrinsics.
|
|
|
|
@@ -2412,7 +2407,6 @@ pub fn fetch_or(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(strict_provenance_atomic_ptr)]
|
|
|
|
|
/// use core::sync::atomic::{AtomicPtr, Ordering};
|
|
|
|
|
///
|
|
|
|
|
/// let pointer = &mut 3i64 as *mut i64;
|
|
|
|
@@ -2426,7 +2420,7 @@ pub fn fetch_or(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// ```
|
|
|
|
|
#[inline]
|
|
|
|
|
#[cfg(target_has_atomic = "ptr")]
|
|
|
|
|
#[unstable(feature = "strict_provenance_atomic_ptr", issue = "99108")]
|
|
|
|
|
#[stable(feature = "strict_provenance_atomic_ptr", since = "CURRENT_RUSTC_VERSION")]
|
|
|
|
|
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
|
|
|
|
|
pub fn fetch_and(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
// SAFETY: data races are prevented by atomic intrinsics.
|
|
|
|
@@ -2462,7 +2456,6 @@ pub fn fetch_and(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// # Examples
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// #![feature(strict_provenance_atomic_ptr)]
|
|
|
|
|
/// use core::sync::atomic::{AtomicPtr, Ordering};
|
|
|
|
|
///
|
|
|
|
|
/// let pointer = &mut 3i64 as *mut i64;
|
|
|
|
@@ -2474,7 +2467,7 @@ pub fn fetch_and(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
/// ```
|
|
|
|
|
#[inline]
|
|
|
|
|
#[cfg(target_has_atomic = "ptr")]
|
|
|
|
|
#[unstable(feature = "strict_provenance_atomic_ptr", issue = "99108")]
|
|
|
|
|
#[stable(feature = "strict_provenance_atomic_ptr", since = "CURRENT_RUSTC_VERSION")]
|
|
|
|
|
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
|
|
|
|
|
pub fn fetch_xor(&self, val: usize, order: Ordering) -> *mut T {
|
|
|
|
|
// SAFETY: data races are prevented by atomic intrinsics.
|
|
|
|
|