From 8b2e8dc8de8d3c72282dab072c2147adf179c8b2 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 13 Oct 2018 21:21:08 +0300 Subject: Copy extern prelude from resolver to global context --- src/librustc/ty/context.rs | 3 ++- src/librustc/ty/mod.rs | 3 ++- src/librustc_driver/driver.rs | 1 + src/librustc_resolve/lib.rs | 2 +- src/librustc_typeck/check_unused.rs | 2 +- src/librustdoc/core.rs | 1 + 6 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 6738267b5b8..5acbf9b424d 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -927,8 +927,8 @@ pub struct GlobalCtxt<'tcx> { freevars: FxHashMap>>, maybe_unused_trait_imports: FxHashSet, - maybe_unused_extern_crates: Vec<(DefId, Span)>, + pub extern_prelude: FxHashSet, // Internal cache for metadata decoding. No need to track deps on this. pub rcache: Lock>>, @@ -1245,6 +1245,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { .into_iter() .map(|(id, sp)| (hir.local_def_id(id), sp)) .collect(), + extern_prelude: resolutions.extern_prelude, hir, def_path_hash_to_def_id, queries: query::Queries::new( diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index d9e3bdaf266..bfbd91cdaea 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -36,7 +36,7 @@ use ty::subst::{Subst, Substs}; use ty::util::{IntTypeExt, Discr}; use ty::walk::TypeWalker; use util::captures::Captures; -use util::nodemap::{NodeSet, DefIdMap, FxHashMap}; +use util::nodemap::{NodeSet, DefIdMap, FxHashMap, FxHashSet}; use arena::SyncDroplessArena; use session::DataTypeKind; @@ -139,6 +139,7 @@ pub struct Resolutions { pub maybe_unused_trait_imports: NodeSet, pub maybe_unused_extern_crates: Vec<(NodeId, Span)>, pub export_map: ExportMap, + pub extern_prelude: FxHashSet, } #[derive(Clone, Copy, PartialEq, Eq, Debug)] diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 7fb66ea97f2..3b0acfd6f8c 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -790,6 +790,7 @@ where trait_map: resolver.trait_map, maybe_unused_trait_imports: resolver.maybe_unused_trait_imports, maybe_unused_extern_crates: resolver.maybe_unused_extern_crates, + extern_prelude: resolver.extern_prelude, }, analysis: ty::CrateAnalysis { diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 8581ab21291..d479b6e2d80 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1361,7 +1361,7 @@ pub struct Resolver<'a, 'b: 'a> { graph_root: Module<'a>, prelude: Option>, - extern_prelude: FxHashSet, + pub extern_prelude: FxHashSet, /// n.b. This is used only for better diagnostics, not name resolution itself. has_self: FxHashSet, diff --git a/src/librustc_typeck/check_unused.rs b/src/librustc_typeck/check_unused.rs index 4b3f08a10ff..9d62afa232b 100644 --- a/src/librustc_typeck/check_unused.rs +++ b/src/librustc_typeck/check_unused.rs @@ -158,7 +158,7 @@ fn unused_crates_lint<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>) { // If the extern crate isn't in the extern prelude, // there is no way it can be written as an `use`. let orig_name = extern_crate.orig_name.unwrap_or(item.name); - if !tcx.sess.extern_prelude.contains(&orig_name) { + if !tcx.extern_prelude.contains(&orig_name) { continue; } diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index ee0c6ee005d..7b46b632b1a 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -457,6 +457,7 @@ pub fn run_core(search_paths: SearchPaths, trait_map: resolver.trait_map.clone(), maybe_unused_trait_imports: resolver.maybe_unused_trait_imports.clone(), maybe_unused_extern_crates: resolver.maybe_unused_extern_crates.clone(), + extern_prelude: resolver.extern_prelude.clone(), }; let analysis = ty::CrateAnalysis { access_levels: Lrc::new(AccessLevels::default()), -- cgit 1.4.1-3-g733a5