From 98b74c580fabe1b29059462a288ffbd8d06de084 Mon Sep 17 00:00:00 2001
From: Alex Crichton <alex@alexcrichton.com>
Date: Mon, 28 Aug 2017 17:06:03 -0700
Subject: [PATCH] rustc: Migrate `CStore::expored_symbols` to a query

---
 src/librustc/dep_graph/dep_node.rs       | 1 +
 src/librustc/middle/cstore.rs            | 2 --
 src/librustc/ty/maps.rs                  | 7 +++++++
 src/librustc_metadata/cstore_impl.rs     | 6 +-----
 src/librustc_trans/back/symbol_export.rs | 2 --
 5 files changed, 9 insertions(+), 9 deletions(-)

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| {