make alloc and collections compilable for thumbv6m-none-eabi

by cfging away `alloc::Arc` and changing OOM to abort for this target
This commit is contained in:
Jorge Aparicio
2016-10-30 22:14:05 -05:00
parent ea20ab107e
commit 907d2a1aeb
2 changed files with 17 additions and 0 deletions

View File

@@ -74,6 +74,7 @@
#![feature(allocator)] #![feature(allocator)]
#![feature(box_syntax)] #![feature(box_syntax)]
#![feature(cfg_target_has_atomic)]
#![feature(coerce_unsized)] #![feature(coerce_unsized)]
#![feature(const_fn)] #![feature(const_fn)]
#![feature(core_intrinsics)] #![feature(core_intrinsics)]
@@ -117,6 +118,7 @@ mod boxed {
} }
#[cfg(test)] #[cfg(test)]
mod boxed_test; mod boxed_test;
#[cfg(target_has_atomic = "ptr")]
pub mod arc; pub mod arc;
pub mod rc; pub mod rc;
pub mod raw_vec; pub mod raw_vec;

View File

@@ -8,10 +8,13 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
#[cfg(target_has_atomic = "ptr")]
use core::sync::atomic::{AtomicPtr, Ordering}; use core::sync::atomic::{AtomicPtr, Ordering};
#[cfg(target_has_atomic = "ptr")]
use core::mem; use core::mem;
use core::intrinsics; use core::intrinsics;
#[cfg(target_has_atomic = "ptr")]
static OOM_HANDLER: AtomicPtr<()> = AtomicPtr::new(default_oom_handler as *mut ()); static OOM_HANDLER: AtomicPtr<()> = AtomicPtr::new(default_oom_handler as *mut ());
fn default_oom_handler() -> ! { fn default_oom_handler() -> ! {
@@ -21,6 +24,7 @@ fn default_oom_handler() -> ! {
} }
/// Common out-of-memory routine /// Common out-of-memory routine
#[cfg(target_has_atomic = "ptr")]
#[cold] #[cold]
#[inline(never)] #[inline(never)]
#[unstable(feature = "oom", reason = "not a scrutinized interface", #[unstable(feature = "oom", reason = "not a scrutinized interface",
@@ -31,10 +35,21 @@ pub fn oom() -> ! {
handler(); handler();
} }
/// Common out-of-memory routine
#[cfg(not(target_has_atomic = "ptr"))]
#[cold]
#[inline(never)]
#[unstable(feature = "oom", reason = "not a scrutinized interface",
issue = "27700")]
pub fn oom() -> ! {
default_oom_handler()
}
/// Set a custom handler for out-of-memory conditions /// Set a custom handler for out-of-memory conditions
/// ///
/// To avoid recursive OOM failures, it is critical that the OOM handler does /// To avoid recursive OOM failures, it is critical that the OOM handler does
/// not allocate any memory itself. /// not allocate any memory itself.
#[cfg(target_has_atomic = "ptr")]
#[unstable(feature = "oom", reason = "not a scrutinized interface", #[unstable(feature = "oom", reason = "not a scrutinized interface",
issue = "27700")] issue = "27700")]
pub fn set_oom_handler(handler: fn() -> !) { pub fn set_oom_handler(handler: fn() -> !) {