diff options
| author | bors <bors@rust-lang.org> | 2018-07-06 08:59:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-07-06 08:59:22 +0000 |
| commit | 0072c95aff4dc2c41fb8ed012f984b450bfce846 (patch) | |
| tree | fba380cd17444258e3ed86e2bdd3f139eb26f8b3 /src/liballoc | |
| parent | 4d9fa2326e184314749ccf79203f5ecc35e6225c (diff) | |
| parent | f9145d01e16d98b7dc969b66ffb6068df9cdd01d (diff) | |
| download | rust-0072c95aff4dc2c41fb8ed012f984b450bfce846.tar.gz rust-0072c95aff4dc2c41fb8ed012f984b450bfce846.zip | |
Auto merge of #51953 - japaric:atomic-load-store, r=alexcrichton
enable Atomic*.{load,store} for ARMv6-M / MSP430
closes #45085
as proposed in https://github.com/rust-lang/rust/issues/45085#issuecomment-384825434
this commit adds an `atomic_cas` target option and extends the `#[cfg(target_has_atomic)]`
attribute to enable a subset of the `Atomic*` API on architectures that don't support atomic CAS
natively, like MSP430 and ARMv6-M.
r? @alexcrichton
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/lib.rs | 5 | ||||
| -rw-r--r-- | src/liballoc/task.rs | 15 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index 493448eaf88..35bf8d1b792 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -162,7 +162,10 @@ mod boxed { #[cfg(test)] mod boxed_test; pub mod collections; -#[cfg(target_has_atomic = "ptr")] +#[cfg(any( + all(stage0, target_has_atomic = "ptr"), + all(not(stage0), target_has_atomic = "ptr", target_has_atomic = "cas") +))] pub mod sync; pub mod rc; pub mod raw_vec; diff --git a/src/liballoc/task.rs b/src/liballoc/task.rs index f14fe3a20da..9792d52dd66 100644 --- a/src/liballoc/task.rs +++ b/src/liballoc/task.rs @@ -12,10 +12,16 @@ pub use core::task::*; -#[cfg(target_has_atomic = "ptr")] +#[cfg(any( + all(stage0, target_has_atomic = "ptr"), + all(not(stage0), target_has_atomic = "ptr", target_has_atomic = "cas") +))] pub use self::if_arc::*; -#[cfg(target_has_atomic = "ptr")] +#[cfg(any( + all(stage0, target_has_atomic = "ptr"), + all(not(stage0), target_has_atomic = "ptr", target_has_atomic = "cas") +))] mod if_arc { use super::*; use core::marker::PhantomData; @@ -47,7 +53,10 @@ mod if_arc { } } - #[cfg(target_has_atomic = "ptr")] + #[cfg(any( + all(stage0, target_has_atomic = "ptr"), + all(not(stage0), target_has_atomic = "ptr", target_has_atomic = "cas") + ))] struct ArcWrapped<T>(PhantomData<T>); unsafe impl<T: Wake + 'static> UnsafeWake for ArcWrapped<T> { |
