From 48e311fffddb4639acb6cdb9a360d061fd88b695 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Tue, 19 Dec 2023 23:16:49 +0300 Subject: [PATCH] WIP --- compiler/rustc_privacy/src/lib.rs | 9 --------- compiler/rustc_resolve/src/lib.rs | 4 ++++ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_privacy/src/lib.rs b/compiler/rustc_privacy/src/lib.rs index 61f6a2b18ae60..be9c6b7258330 100644 --- a/compiler/rustc_privacy/src/lib.rs +++ b/compiler/rustc_privacy/src/lib.rs @@ -1765,15 +1765,6 @@ impl<'tcx> PrivateItemsInPublicInterfacesChecker<'tcx, '_> { pub fn provide(providers: &mut Providers) { *providers = Providers { - visibility: |tcx, def_id| { - // Unique types created for closures participate in type privacy checking. - // They have visibilities inherited from the module they are defined in. - // FIXME: Consider evaluating visibilities for closures eagerly, like for all - // other nodes. However, unlike for others, for closures it may cause a perf - // regression, because closure visibilities are not commonly queried. - assert_eq!(tcx.def_kind(def_id), DefKind::Closure); - ty::Visibility::Restricted(tcx.parent_module_from_def_id(def_id).to_def_id()) - }, effective_visibilities, check_private_in_public, check_mod_privacy, diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs index 670fdcfb0d264..5e6bcabe3bf16 100644 --- a/compiler/rustc_resolve/src/lib.rs +++ b/compiler/rustc_resolve/src/lib.rs @@ -1229,6 +1229,10 @@ impl<'tcx> Resolver<'_, 'tcx> { let feed = self.tcx.feed_local_def_id(def_id); feed.def_kind(def_kind); + if def_kind == DefKind::Closure { + let parent_mod = self.tcx.parent_module_from_def_id(def_id).to_def_id(); + feed.visibility(ty::Visibility::Restricted(parent_mod)); + } // Create the definition. if expn_id != ExpnId::root() {