Skip to content

Commit 8eeb506

Browse files
committed
Auto merge of #32244 - Amanieu:compare_exchange_result, r=alexcrichton
Change compare_exchange to return a Result<T, T> As per the discussion in #31767 I also changed the feature name from `extended_compare_and_swap` to `compare_exchange`. r? @alexcrichton
2 parents 151be09 + 421fed1 commit 8eeb506

File tree

6 files changed

+174
-134
lines changed

6 files changed

+174
-134
lines changed

src/libcore/intrinsics.rs

+20-4
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,35 @@ extern "rust-intrinsic" {
5353
// NB: These intrinsics take raw pointers because they mutate aliased
5454
// memory, which is not valid for either `&` or `&mut`.
5555

56+
#[cfg(stage0)]
5657
pub fn atomic_cxchg<T>(dst: *mut T, old: T, src: T) -> T;
58+
#[cfg(stage0)]
5759
pub fn atomic_cxchg_acq<T>(dst: *mut T, old: T, src: T) -> T;
60+
#[cfg(stage0)]
5861
pub fn atomic_cxchg_rel<T>(dst: *mut T, old: T, src: T) -> T;
62+
#[cfg(stage0)]
5963
pub fn atomic_cxchg_acqrel<T>(dst: *mut T, old: T, src: T) -> T;
64+
#[cfg(stage0)]
6065
pub fn atomic_cxchg_relaxed<T>(dst: *mut T, old: T, src: T) -> T;
66+
67+
#[cfg(not(stage0))]
68+
pub fn atomic_cxchg<T>(dst: *mut T, old: T, src: T) -> (T, bool);
69+
#[cfg(not(stage0))]
70+
pub fn atomic_cxchg_acq<T>(dst: *mut T, old: T, src: T) -> (T, bool);
71+
#[cfg(not(stage0))]
72+
pub fn atomic_cxchg_rel<T>(dst: *mut T, old: T, src: T) -> (T, bool);
73+
#[cfg(not(stage0))]
74+
pub fn atomic_cxchg_acqrel<T>(dst: *mut T, old: T, src: T) -> (T, bool);
75+
#[cfg(not(stage0))]
76+
pub fn atomic_cxchg_relaxed<T>(dst: *mut T, old: T, src: T) -> (T, bool);
6177
#[cfg(not(stage0))]
62-
pub fn atomic_cxchg_failrelaxed<T>(dst: *mut T, old: T, src: T) -> T;
78+
pub fn atomic_cxchg_failrelaxed<T>(dst: *mut T, old: T, src: T) -> (T, bool);
6379
#[cfg(not(stage0))]
64-
pub fn atomic_cxchg_failacq<T>(dst: *mut T, old: T, src: T) -> T;
80+
pub fn atomic_cxchg_failacq<T>(dst: *mut T, old: T, src: T) -> (T, bool);
6581
#[cfg(not(stage0))]
66-
pub fn atomic_cxchg_acq_failrelaxed<T>(dst: *mut T, old: T, src: T) -> T;
82+
pub fn atomic_cxchg_acq_failrelaxed<T>(dst: *mut T, old: T, src: T) -> (T, bool);
6783
#[cfg(not(stage0))]
68-
pub fn atomic_cxchg_acqrel_failrelaxed<T>(dst: *mut T, old: T, src: T) -> T;
84+
pub fn atomic_cxchg_acqrel_failrelaxed<T>(dst: *mut T, old: T, src: T) -> (T, bool);
6985

7086
#[cfg(not(stage0))]
7187
pub fn atomic_cxchgweak<T>(dst: *mut T, old: T, src: T) -> (T, bool);

0 commit comments

Comments
 (0)