Tracking Issue for arithmetic and certain bitwise ops on AtomicPtr
· Issue #99108 · rust-lang/rust (original) (raw)
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 AtomicPtr { 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
- Implementation: Allow arithmetic and certain bitwise ops on AtomicPtr #96935
- Final comment period (FCP)1
- Stabilization PR
Unresolved Questions
- Naming (some discussion at Rename AtomicPtr::fetch_ptr_{add,sub} to AtomicPtr::fetch_{add,sub} libs-team#126)