Skip to content

Commit

Permalink
Auto merge of rust-lang#111371 - compiler-errors:revert-110907, r=pet…
Browse files Browse the repository at this point in the history
…rochenkov

Revert "Populate effective visibilities in `rustc_privacy`"

This reverts commit cff85f2, cc rust-lang#110907. It needs to be fixed, but there are too many issues being reported that I wanted to put up a revert until a proper fix can be committed.

Fixes a ton of issues where private but still reachable impls were missing during codegen:
Fixes rust-lang#111320
Fixes rust-lang#111321
Fixes rust-lang#111334
Fixes rust-lang#111357
Fixes rust-lang#111368
Fixes rust-lang#111373
Fixes rust-lang#111377
Fixes rust-lang#111386
Fixes rust-lang#111387

`@bors` p=1

r? `@petrochenkov`
  • Loading branch information
bors committed May 9, 2023
2 parents f7b831a + 5fcf2e6 commit 3a37c2f
Show file tree
Hide file tree
Showing 6 changed files with 178 additions and 181 deletions.
45 changes: 26 additions & 19 deletions compiler/rustc_middle/src/middle/privacy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,26 +64,14 @@ impl EffectiveVisibility {
self.at_level(level).is_public()
}

pub const fn from_vis(vis: Visibility) -> EffectiveVisibility {
pub fn from_vis(vis: Visibility) -> EffectiveVisibility {
EffectiveVisibility {
direct: vis,
reexported: vis,
reachable: vis,
reachable_through_impl_trait: vis,
}
}

#[must_use]
pub fn min(mut self, lhs: EffectiveVisibility, tcx: TyCtxt<'_>) -> Self {
for l in Level::all_levels() {
let rhs_vis = self.at_level_mut(l);
let lhs_vis = *lhs.at_level(l);
if rhs_vis.is_at_least(lhs_vis, tcx) {
*rhs_vis = lhs_vis;
};
}
self
}
}

/// Holds a map of effective visibilities for reachable HIR nodes.
Expand Down Expand Up @@ -149,6 +137,24 @@ impl EffectiveVisibilities {
};
}

pub fn set_public_at_level(
&mut self,
id: LocalDefId,
lazy_private_vis: impl FnOnce() -> Visibility,
level: Level,
) {
let mut effective_vis = self
.effective_vis(id)
.copied()
.unwrap_or_else(|| EffectiveVisibility::from_vis(lazy_private_vis()));
for l in Level::all_levels() {
if l <= level {
*effective_vis.at_level_mut(l) = Visibility::Public;
}
}
self.map.insert(id, effective_vis);
}

pub fn check_invariants(&self, tcx: TyCtxt<'_>, early: bool) {
if !cfg!(debug_assertions) {
return;
Expand Down Expand Up @@ -213,7 +219,7 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
pub fn update(
&mut self,
id: Id,
nominal_vis: Option<Visibility>,
nominal_vis: Visibility,
lazy_private_vis: impl FnOnce() -> Visibility,
inherited_effective_vis: EffectiveVisibility,
level: Level,
Expand All @@ -237,11 +243,12 @@ impl<Id: Eq + Hash> EffectiveVisibilities<Id> {
if !(inherited_effective_vis_at_prev_level == inherited_effective_vis_at_level
&& level != l)
{
calculated_effective_vis = if let Some(nominal_vis) = nominal_vis && !nominal_vis.is_at_least(inherited_effective_vis_at_level, tcx) {
nominal_vis
} else {
inherited_effective_vis_at_level
}
calculated_effective_vis =
if nominal_vis.is_at_least(inherited_effective_vis_at_level, tcx) {
inherited_effective_vis_at_level
} else {
nominal_vis
};
}
// effective visibility can't be decreased at next update call for the
// same id
Expand Down
Loading

0 comments on commit 3a37c2f

Please sign in to comment.