Skip to content

Commit 421fed1

Browse files
committed
Change compare_exchange to return a Result<T, T>
1 parent 235d774 commit 421fed1

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)