Make allocator_kind a query.
This commit is contained in:
parent
9543636cd6
commit
6a371d2c89
7 changed files with 10 additions and 9 deletions
|
@ -1,6 +1,6 @@
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{sym, Symbol};
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Debug, Copy, HashStable_Generic)]
|
||||||
pub enum AllocatorKind {
|
pub enum AllocatorKind {
|
||||||
Global,
|
Global,
|
||||||
Default,
|
Default,
|
||||||
|
|
|
@ -19,7 +19,7 @@ pub(crate) fn codegen(
|
||||||
});
|
});
|
||||||
if any_dynamic_crate {
|
if any_dynamic_crate {
|
||||||
false
|
false
|
||||||
} else if let Some(kind) = tcx.allocator_kind() {
|
} else if let Some(kind) = tcx.allocator_kind(()) {
|
||||||
codegen_inner(module, unwind_context, kind);
|
codegen_inner(module, unwind_context, kind);
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -180,7 +180,7 @@ fn exported_symbols_provider_local(
|
||||||
symbols.push((exported_symbol, SymbolExportLevel::C));
|
symbols.push((exported_symbol, SymbolExportLevel::C));
|
||||||
}
|
}
|
||||||
|
|
||||||
if tcx.allocator_kind().is_some() {
|
if tcx.allocator_kind(()).is_some() {
|
||||||
for method in ALLOCATOR_METHODS {
|
for method in ALLOCATOR_METHODS {
|
||||||
let symbol_name = format!("__rust_{}", method.name);
|
let symbol_name = format!("__rust_{}", method.name);
|
||||||
let exported_symbol = ExportedSymbol::NoDefId(SymbolName::new(tcx, &symbol_name));
|
let exported_symbol = ExportedSymbol::NoDefId(SymbolName::new(tcx, &symbol_name));
|
||||||
|
|
|
@ -518,7 +518,7 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
|
||||||
});
|
});
|
||||||
let allocator_module = if any_dynamic_crate {
|
let allocator_module = if any_dynamic_crate {
|
||||||
None
|
None
|
||||||
} else if let Some(kind) = tcx.allocator_kind() {
|
} else if let Some(kind) = tcx.allocator_kind(()) {
|
||||||
let llmod_id =
|
let llmod_id =
|
||||||
cgu_name_builder.build_cgu_name(LOCAL_CRATE, &["crate"], Some("allocator")).to_string();
|
cgu_name_builder.build_cgu_name(LOCAL_CRATE, &["crate"], Some("allocator")).to_string();
|
||||||
let mut modules = backend.new_metadata(tcx, &llmod_id);
|
let mut modules = backend.new_metadata(tcx, &llmod_id);
|
||||||
|
|
|
@ -1416,6 +1416,10 @@ rustc_queries! {
|
||||||
eval_always
|
eval_always
|
||||||
desc { "check whether crate {} is a private dependency", c }
|
desc { "check whether crate {} is a private dependency", c }
|
||||||
}
|
}
|
||||||
|
query allocator_kind(_: ()) -> Option<AllocatorKind> {
|
||||||
|
eval_always
|
||||||
|
desc { "allocator kind for the current crate" }
|
||||||
|
}
|
||||||
|
|
||||||
query upvars_mentioned(def_id: DefId) -> Option<&'tcx FxIndexMap<hir::HirId, hir::Upvar>> {
|
query upvars_mentioned(def_id: DefId) -> Option<&'tcx FxIndexMap<hir::HirId, hir::Upvar>> {
|
||||||
desc { |tcx| "collecting upvars mentioned in `{}`", tcx.def_path_str(def_id) }
|
desc { |tcx| "collecting upvars mentioned in `{}`", tcx.def_path_str(def_id) }
|
||||||
|
|
|
@ -26,7 +26,6 @@ use crate::ty::{
|
||||||
TraitObjectVisitor, Ty, TyKind, TyS, TyVar, TyVid, TypeAndMut, UintTy, Visibility,
|
TraitObjectVisitor, Ty, TyKind, TyS, TyVar, TyVid, TypeAndMut, UintTy, Visibility,
|
||||||
};
|
};
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_ast::expand::allocator::AllocatorKind;
|
|
||||||
use rustc_attr as attr;
|
use rustc_attr as attr;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_data_structures::profiling::SelfProfilerRef;
|
use rustc_data_structures::profiling::SelfProfilerRef;
|
||||||
|
@ -1259,10 +1258,6 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
self.all_crate_nums(())
|
self.all_crate_nums(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn allocator_kind(self) -> Option<AllocatorKind> {
|
|
||||||
self.cstore.allocator_kind()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn features(self) -> &'tcx rustc_feature::Features {
|
pub fn features(self) -> &'tcx rustc_feature::Features {
|
||||||
self.features_query(())
|
self.features_query(())
|
||||||
}
|
}
|
||||||
|
@ -2839,4 +2834,5 @@ pub fn provide(providers: &mut ty::query::Providers) {
|
||||||
// We want to check if the panic handler was defined in this crate
|
// We want to check if the panic handler was defined in this crate
|
||||||
tcx.lang_items().panic_impl().map_or(false, |did| did.is_local())
|
tcx.lang_items().panic_impl().map_or(false, |did| did.is_local())
|
||||||
};
|
};
|
||||||
|
providers.allocator_kind = |tcx, ()| tcx.cstore.allocator_kind();
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ use crate::traits::{self, ImplSource};
|
||||||
use crate::ty::subst::{GenericArg, SubstsRef};
|
use crate::ty::subst::{GenericArg, SubstsRef};
|
||||||
use crate::ty::util::AlwaysRequiresDrop;
|
use crate::ty::util::AlwaysRequiresDrop;
|
||||||
use crate::ty::{self, AdtSizedConstraint, CrateInherentImpls, ParamEnvAnd, Ty, TyCtxt};
|
use crate::ty::{self, AdtSizedConstraint, CrateInherentImpls, ParamEnvAnd, Ty, TyCtxt};
|
||||||
|
use rustc_ast::expand::allocator::AllocatorKind;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
||||||
use rustc_data_structures::steal::Steal;
|
use rustc_data_structures::steal::Steal;
|
||||||
use rustc_data_structures::svh::Svh;
|
use rustc_data_structures::svh::Svh;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue