about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorJorge Aparicio <jorge@japaric.io>2018-06-30 14:56:08 -0500
committerJorge Aparicio <jorge@japaric.io>2018-07-05 16:44:29 -0500
commitbbf688a84de7001d033764b848a50cbad42f3d5a (patch)
tree1a631bf9f7239612dcc09c72be1df3d749a39850 /src/liballoc
parent94eb1760551096363ec04e42367b6b195592dbd8 (diff)
downloadrust-bbf688a84de7001d033764b848a50cbad42f3d5a.tar.gz
rust-bbf688a84de7001d033764b848a50cbad42f3d5a.zip
enable Atomic*.{load,store} for ARMv6-M / MSP430
closes #45085

this commit adds an `atomic_cas` target option and an unstable `#[cfg(target_has_atomic_cas)]`
attribute to enable a subset of the `Atomic*` API on architectures that don't support atomic CAS
natively, like MSP430 and ARMv6-M.
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/lib.rs4
-rw-r--r--src/liballoc/task.rs9
2 files changed, 9 insertions, 4 deletions
diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs
index 493448eaf88..66bf8de1993 100644
--- a/src/liballoc/lib.rs
+++ b/src/liballoc/lib.rs
@@ -86,6 +86,7 @@
 #![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(cfg_target_has_atomic)]
+#![cfg_attr(not(stage0), feature(cfg_target_has_atomic_cas))]
 #![feature(coerce_unsized)]
 #![feature(collections_range)]
 #![feature(const_fn)]
@@ -162,7 +163,8 @@ mod boxed {
 #[cfg(test)]
 mod boxed_test;
 pub mod collections;
-#[cfg(target_has_atomic = "ptr")]
+#[cfg_attr(stage0, cfg(target_has_atomic = "ptr"))]
+#[cfg_attr(not(stage0), cfg(all(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..c8e3e770ed2 100644
--- a/src/liballoc/task.rs
+++ b/src/liballoc/task.rs
@@ -12,10 +12,12 @@
 
 pub use core::task::*;
 
-#[cfg(target_has_atomic = "ptr")]
+#[cfg_attr(stage0, cfg(target_has_atomic = "ptr"))]
+#[cfg_attr(not(stage0), cfg(all(target_has_atomic = "ptr", target_has_atomic_cas)))]
 pub use self::if_arc::*;
 
-#[cfg(target_has_atomic = "ptr")]
+#[cfg_attr(stage0, cfg(target_has_atomic = "ptr"))]
+#[cfg_attr(not(stage0), cfg(all(target_has_atomic = "ptr", target_has_atomic_cas)))]
 mod if_arc {
     use super::*;
     use core::marker::PhantomData;
@@ -47,7 +49,8 @@ mod if_arc {
         }
     }
 
-    #[cfg(target_has_atomic = "ptr")]
+    #[cfg_attr(stage0, cfg(target_has_atomic = "ptr"))]
+    #[cfg_attr(not(stage0), cfg(all(target_has_atomic = "ptr", target_has_atomic_cas)))]
     struct ArcWrapped<T>(PhantomData<T>);
 
     unsafe impl<T: Wake + 'static> UnsafeWake for ArcWrapped<T> {