diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2022-11-23 20:13:44 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2022-11-24 00:03:51 +0300 |
| commit | a45a302be536126accf29764b6a3dca39d57d0fe (patch) | |
| tree | 1a5de866f2d6baad6857e7e26665ddf8d1fc42ce /compiler/rustc_resolve/src | |
| parent | f0843b89d1336962e9cb0572a40a790cd60ef4d9 (diff) | |
| download | rust-a45a302be536126accf29764b6a3dca39d57d0fe.tar.gz rust-a45a302be536126accf29764b6a3dca39d57d0fe.zip | |
effective visibility: Fix private visibility calculation for modules
Optimizations removed in the previous commit required this function to behave incorrectly, but now those optimizations are gone so we can fix the bug. Fixes https://github.com/rust-lang/rust/issues/104249
Diffstat (limited to 'compiler/rustc_resolve/src')
| -rw-r--r-- | compiler/rustc_resolve/src/effective_visibilities.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/rustc_resolve/src/effective_visibilities.rs b/compiler/rustc_resolve/src/effective_visibilities.rs index 32ab58b459a..56959586d11 100644 --- a/compiler/rustc_resolve/src/effective_visibilities.rs +++ b/compiler/rustc_resolve/src/effective_visibilities.rs @@ -9,7 +9,7 @@ use rustc_hir::def_id::LocalDefId; use rustc_hir::def_id::CRATE_DEF_ID; use rustc_middle::middle::privacy::{EffectiveVisibilities, EffectiveVisibility}; use rustc_middle::middle::privacy::{IntoDefIdTree, Level}; -use rustc_middle::ty::Visibility; +use rustc_middle::ty::{DefIdTree, Visibility}; type ImportId<'a> = Interned<'a, NameBinding<'a>>; @@ -54,10 +54,12 @@ impl Resolver<'_> { } fn private_vis_def(&mut self, def_id: LocalDefId) -> Visibility { - if def_id == CRATE_DEF_ID { - Visibility::Public + // For mod items `nearest_normal_mod` returns its argument, but we actually need its parent. + let normal_mod_id = self.nearest_normal_mod(def_id); + if normal_mod_id == def_id { + self.opt_local_parent(def_id).map_or(Visibility::Public, Visibility::Restricted) } else { - Visibility::Restricted(self.nearest_normal_mod(def_id)) + Visibility::Restricted(normal_mod_id) } } } |
