diff options
| author | Douglas Campos <qmx@qmx.me> | 2018-08-10 16:22:46 +0000 |
|---|---|---|
| committer | Douglas Campos <qmx@qmx.me> | 2018-08-16 19:22:17 +0000 |
| commit | 2b3e492194477b6c40783c022e9569bb4a41e096 (patch) | |
| tree | a80f87b432a91dc7015d00edaeaaad142f374342 | |
| parent | 6b9b750f0abde2a0081147cc599dcd23dfce44eb (diff) | |
| download | rust-2b3e492194477b6c40783c022e9569bb4a41e096.tar.gz rust-2b3e492194477b6c40783c022e9569bb4a41e096.zip | |
avoid looking twice into external prelude crates
| -rw-r--r-- | src/librustc_resolve/lib.rs | 9 |
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()) { |
