Feature gate: #![feature(strict_provenance_atomic_ptr)]
This is a tracking issue for arithmetic and certain bitwise operations on AtomicPtr.
As part of the strict provenance experiment #95228.
This feature adds arithmetic (add, sub) and bitwise (or, end, xor) atomic operations for AtomicPtr in order to replace uses of AtomicUsize-but-actually-a-pointer to preserve provenance information for the compiler and remove usize->ptr casts from existing code.
Arithmetic ops behave as the their non-atomic wrapping versions. Bitwise ops behave as .map_addr(|x| x op val).
Public API
// core::sync::atomic
impl<T> AtomicPtr<T> {
pub fn fetch_ptr_add(&self, val: usize, order: Ordering) -> *mut T;
pub fn fetch_ptr_sub(&self, val: usize, order: Ordering) -> *mut T;
pub fn fetch_byte_add(&self, val: usize, order: Ordering) -> *mut T;
pub fn fetch_byte_sub(&self, val: usize, order: Ordering) -> *mut T;
pub fn fetch_or(&self, val: usize, order: Ordering) -> *mut T;
pub fn fetch_and(&self, val: usize, order: Ordering) -> *mut T;
pub fn fetch_xor(&self, val: usize, order: Ordering) -> *mut T;
}
Steps / History
Unresolved Questions
Feature gate:
#![feature(strict_provenance_atomic_ptr)]This is a tracking issue for arithmetic and certain bitwise operations on
AtomicPtr.As part of the strict provenance experiment #95228.
This feature adds arithmetic (
add,sub) and bitwise (or,end,xor) atomic operations forAtomicPtrin order to replace uses ofAtomicUsize-but-actually-a-pointer to preserve provenance information for the compiler and removeusize->ptrcasts from existing code.Arithmetic ops behave as the their non-atomic wrapping versions. Bitwise ops behave as
.map_addr(|x| x op val).Public API
Steps / History
Unresolved Questions
AtomicPtr::fetch_ptr_{add,sub}toAtomicPtr::fetch_{add,sub}libs-team#126)Footnotes
https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html ↩