diff --git a/src/librustc_trans/back/symbol_export.rs b/src/librustc_trans/back/symbol_export.rs index 72071f8cec990..971483e91b6f3 100644 --- a/src/librustc_trans/back/symbol_export.rs +++ b/src/librustc_trans/back/symbol_export.rs @@ -13,6 +13,7 @@ use rustc::util::nodemap::{FxHashMap, NodeSet}; use rustc::hir::def_id::{DefId, CrateNum, LOCAL_CRATE, INVALID_CRATE, CRATE_DEF_INDEX}; use rustc::session::config; use rustc::ty::TyCtxt; +use rustc_allocator::ALLOCATOR_METHODS; use syntax::attr; /// The SymbolExportLevel of a symbols specifies from which kinds of crates @@ -83,6 +84,14 @@ impl ExportedSymbols { SymbolExportLevel::C)); } + if tcx.sess.allocator_kind.get().is_some() { + for method in ALLOCATOR_METHODS { + local_crate.push((format!("__rust_{}", method.name), + INVALID_DEF_ID, + SymbolExportLevel::Rust)); + } + } + if let Some(id) = tcx.sess.derive_registrar_fn.get() { let def_id = tcx.hir.local_def_id(id); let idx = def_id.index; diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index bd9c9c7478489..f7748aa3f041f 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -318,6 +318,22 @@ #![default_lib_allocator] +// Always use alloc_system during stage0 since we don't know if the alloc_* +// crate the stage0 compiler will pick by default is enabled (e.g. +// if the user has disabled jemalloc in `./configure`). +// `force_alloc_system` is *only* intended as a workaround for local rebuilds +// with a rustc without jemalloc. +// The not(stage0+msvc) gates will only last until the next stage0 bump +#![cfg_attr(all( + not(all(stage0, target_env = "msvc")), + any(stage0, feature = "force_alloc_system")), + feature(global_allocator))] +#[cfg(all( + not(all(stage0, target_env = "msvc")), + any(stage0, feature = "force_alloc_system")))] +#[global_allocator] +static ALLOC: alloc_system::System = alloc_system::System; + // Explicitly import the prelude. The compiler uses this same unstable attribute // to import the prelude implicitly when building crates that depend on std. #[prelude_import] diff --git a/src/tools/tidy/src/pal.rs b/src/tools/tidy/src/pal.rs index 1065749a6961c..10c9971382046 100644 --- a/src/tools/tidy/src/pal.rs +++ b/src/tools/tidy/src/pal.rs @@ -69,6 +69,7 @@ const EXCEPTION_PATHS: &'static [&'static str] = &[ "src/libstd/path.rs", "src/libstd/f32.rs", "src/libstd/f64.rs", + "src/libstd/lib.rs", // Until next stage0 snapshot bump "src/libstd/sys_common/mod.rs", "src/libstd/sys_common/net.rs", "src/libterm", // Not sure how to make this crate portable, but test needs it