pub use core::alloc::*;
extern "Rust" {
+ // These are the magic symbols to call the global allocator. rustc generates
+ // them from the `#[global_allocator]` attribute if there is one, or uses the
+ // default implementations in libstd (`__rdl_alloc` etc in `src/libstd/alloc.rs`)
+ // otherwise.
#[allocator]
#[rustc_allocator_nounwind]
fn __rust_alloc(size: usize, align: usize) -> *mut u8;
#[derive(Debug, Copy, Clone)]
pub struct System;
+// The Alloc impl just forwards to the GlobalAlloc impl, which is in `std::sys::*::alloc`.
#[unstable(feature = "allocator_api", issue = "32838")]
unsafe impl Alloc for System {
#[inline]
#[unstable(feature = "alloc_internals", issue = "0")]
pub mod __default_lib_allocator {
use super::{System, Layout, GlobalAlloc};
+ // These magic symbol names are used as a fallback for implementing the
+ // `__rust_alloc` etc symbols (see `src/liballoc/alloc.rs) when there is
+ // no `#[global_allocator]` attribute.
+
// for symbol names src/librustc/middle/allocator.rs
// for signatures src/librustc_allocator/lib.rs