diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-07-01 13:46:02 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-01 13:46:02 +0200 |
| commit | bcd804ba52b6071f938f6895a848b516ee402976 (patch) | |
| tree | 829d6a5790d2e1d5067160fdbde2f3bec0b3797d | |
| parent | ca7e27a71c9d618688d05f22a78b7cc31cf4437f (diff) | |
| parent | f9a4db731288a64eb9e3aef037128c825157c0b0 (diff) | |
| download | rust-bcd804ba52b6071f938f6895a848b516ee402976.tar.gz rust-bcd804ba52b6071f938f6895a848b516ee402976.zip | |
Rollup merge of #113196 - Bryanskiy:assoc_item, r=petrochenkov
Fix associated items effective visibility calculation for type privacy lints Fixes https://github.com/rust-lang/rust/pull/113126#discussion_r1246555520.
| -rw-r--r-- | compiler/rustc_privacy/src/lib.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/compiler/rustc_privacy/src/lib.rs b/compiler/rustc_privacy/src/lib.rs index c3e8d45d201..055006373ef 100644 --- a/compiler/rustc_privacy/src/lib.rs +++ b/compiler/rustc_privacy/src/lib.rs @@ -2135,16 +2135,18 @@ impl<'tcx> PrivateItemsInPublicInterfacesChecker<'tcx, '_> { // lints shouldn't be emmited even if `from` effective visibility // is larger than `Priv` nominal visibility and if `Priv` can leak // in some scenarios due to type inference. - let impl_ev = Some(EffectiveVisibility::of_impl::<false>( + let impl_ev = EffectiveVisibility::of_impl::<false>( item.owner_id.def_id, tcx, self.effective_visibilities, - )); + ); // check that private components do not appear in the generics or predicates of inherent impls // this check is intentionally NOT performed for impls of traits, per #90586 if impl_.of_trait.is_none() { - self.check(item.owner_id.def_id, impl_vis, impl_ev).generics().predicates(); + self.check(item.owner_id.def_id, impl_vis, Some(impl_ev)) + .generics() + .predicates(); } for impl_item_ref in impl_.items { let impl_item_vis = if impl_.of_trait.is_none() { @@ -2159,8 +2161,9 @@ impl<'tcx> PrivateItemsInPublicInterfacesChecker<'tcx, '_> { let impl_item_ev = if impl_.of_trait.is_none() { self.get(impl_item_ref.id.owner_id.def_id) + .map(|ev| ev.min(impl_ev, self.tcx)) } else { - impl_ev + Some(impl_ev) }; self.check_assoc_item( |
