diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index f7798fdad7e..995bbd65388 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -535,6 +535,7 @@ define_dep_nodes!( <'tcx> [] GetPanicStrategy(CrateNum), [] IsNoBuiltins(CrateNum), [] ImplDefaultness(DefId), + [] ExportedSymbols(CrateNum), ); trait DepNodeParams<'a, 'gcx: 'tcx + 'a, 'tcx: 'a> : fmt::Debug { diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs index 8bcd76f4054..26577a94ffc 100644 --- a/src/librustc/middle/cstore.rs +++ b/src/librustc/middle/cstore.rs @@ -258,7 +258,6 @@ pub trait CrateStore { fn plugin_registrar_fn(&self, cnum: CrateNum) -> Option<DefId>; fn derive_registrar_fn(&self, cnum: CrateNum) -> Option<DefId>; fn native_libraries(&self, cnum: CrateNum) -> Vec<NativeLibrary>; - fn exported_symbols(&self, cnum: CrateNum) -> Vec<DefId>; // resolve fn def_key(&self, def: DefId) -> DefKey; @@ -367,7 +366,6 @@ impl CrateStore for DummyCrateStore { { bug!("derive_registrar_fn") } fn native_libraries(&self, cnum: CrateNum) -> Vec<NativeLibrary> { bug!("native_libraries") } - fn exported_symbols(&self, cnum: CrateNum) -> Vec<DefId> { bug!("exported_symbols") } // resolve fn def_key(&self, def: DefId) -> DefKey { bug!("def_key") } diff --git a/src/librustc/ty/maps.rs b/src/librustc/ty/maps.rs index 27d947654a4..2da806870f0 100644 --- a/src/librustc/ty/maps.rs +++ b/src/librustc/ty/maps.rs @@ -587,6 +587,12 @@ impl<'tcx> QueryDescription for queries::is_sanitizer_runtime<'tcx> { } } +impl<'tcx> QueryDescription for queries::exported_symbols<'tcx> { + fn describe(_tcx: TyCtxt, _: CrateNum) -> String { + format!("looking up the exported symbols of a crate") + } +} + // If enabled, send a message to the profile-queries thread macro_rules! profq_msg { ($tcx:expr, $msg:expr) => { @@ -1163,6 +1169,7 @@ define_maps! { <'tcx> [] fn lint_levels: lint_levels_node(CrateNum) -> Rc<lint::LintLevelMap>, [] fn impl_defaultness: ImplDefaultness(DefId) -> hir::Defaultness, + [] fn exported_symbols: ExportedSymbols(CrateNum) -> Rc<Vec<DefId>>, } fn type_param_predicates<'tcx>((item_id, param_id): (DefId, DefId)) -> DepConstructor<'tcx> { diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 8710eb2ac41..22a1205bbfc 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -163,6 +163,7 @@ provide! { <'tcx> tcx, def_id, cdata, extern_crate => { Rc::new(cdata.extern_crate.get()) } is_no_builtins => { cdata.is_no_builtins(&tcx.dep_graph) } impl_defaultness => { cdata.get_impl_defaultness(def_id.index) } + exported_symbols => { Rc::new(cdata.get_exported_symbols(&tcx.dep_graph)) } } pub fn provide_local<'tcx>(providers: &mut Providers<'tcx>) { @@ -302,11 +303,6 @@ impl CrateStore for cstore::CStore { self.get_crate_data(cnum).get_native_libraries(&self.dep_graph) } - fn exported_symbols(&self, cnum: CrateNum) -> Vec<DefId> - { - self.get_crate_data(cnum).get_exported_symbols(&self.dep_graph) - } - /// Returns the `DefKey` for a given `DefId`. This indicates the /// parent `DefId` as well as some idea of what kind of data the /// `DefId` refers to. diff --git a/src/librustc_trans/back/symbol_export.rs b/src/librustc_trans/back/symbol_export.rs index 729573a0f3a..f1b18c64dcb 100644 --- a/src/librustc_trans/back/symbol_export.rs +++ b/src/librustc_trans/back/symbol_export.rs @@ -131,8 +131,6 @@ impl ExportedSymbols { tcx.is_panic_runtime(cnum) || tcx.is_compiler_builtins(cnum); let crate_exports = tcx - .sess - .cstore .exported_symbols(cnum) .iter() .map(|&def_id| {