about summary refs log tree commit diff
path: root/compiler/rustc_resolve/src
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_resolve/src')
-rw-r--r--compiler/rustc_resolve/src/effective_visibilities.rs10
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)
         }
     }
 }