From 7b47fd793fba4e0ce6c7fb4e50652bae0ff95fc0 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Mon, 20 Aug 2018 00:03:40 +0300 Subject: [PATCH] resolve: Reject some inaccessible candidates sooner during import resolution This allows import resolution to progress in cases like #53140 --- src/librustc_resolve/resolve_imports.rs | 5 +++++ src/test/ui/imports/issue-53140.rs | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/test/ui/imports/issue-53140.rs diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index e16039bc239c0..d6388131684e7 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -296,6 +296,8 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> { }; match self.resolve_ident_in_module(module, ident, ns, false, path_span) { Err(Determined) => continue, + Ok(binding) + if !self.is_accessible_from(binding.vis, single_import.parent) => continue, Ok(_) | Err(Undetermined) => return Err(Undetermined), } } @@ -365,8 +367,11 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> { path_span, ); self.current_module = orig_current_module; + match result { Err(Determined) => continue, + Ok(binding) + if !self.is_accessible_from(binding.vis, glob_import.parent) => continue, Ok(_) | Err(Undetermined) => return Err(Undetermined), } } diff --git a/src/test/ui/imports/issue-53140.rs b/src/test/ui/imports/issue-53140.rs new file mode 100644 index 0000000000000..dcfa054f2513f --- /dev/null +++ b/src/test/ui/imports/issue-53140.rs @@ -0,0 +1,21 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-pass + +mod m { + pub struct S(u8); + + use S as Z; +} + +use m::*; + +fn main() {}