about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDouglas Campos <qmx@qmx.me>2018-08-10 16:22:46 +0000
committerDouglas Campos <qmx@qmx.me>2018-08-16 19:22:17 +0000
commit2b3e492194477b6c40783c022e9569bb4a41e096 (patch)
treea80f87b432a91dc7015d00edaeaaad142f374342
parent6b9b750f0abde2a0081147cc599dcd23dfce44eb (diff)
downloadrust-2b3e492194477b6c40783c022e9569bb4a41e096.tar.gz
rust-2b3e492194477b6c40783c022e9569bb4a41e096.zip
avoid looking twice into external prelude crates
-rw-r--r--src/librustc_resolve/lib.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index ad56172731c..e4a47460be2 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -4302,7 +4302,14 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
                     let mut path_segments = path_segments.clone();
                     path_segments.push(ast::PathSegment::from_ident(ident));
 
-                    if !in_module_is_extern || name_binding.vis == ty::Visibility::Public {
+                    let is_extern_crate_that_also_appears_in_prelude =
+                        name_binding.is_extern_crate() &&
+                        self.extern_prelude.contains(&ident.name);
+
+                    let is_visible_to_user =
+                        !in_module_is_extern || name_binding.vis == ty::Visibility::Public;
+
+                    if !is_extern_crate_that_also_appears_in_prelude || is_visible_to_user {
                         // add the module to the lookup
                         let is_extern = in_module_is_extern || name_binding.is_extern_crate();
                         if seen_modules.insert(module.def_id().unwrap()) {