@@ -236,7 +236,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
236236 // (i.e. variants, fields, and trait items) inherits from the visibility
237237 // of the enum or trait.
238238 ModuleKind::Def(DefKind::Enum | DefKind::Trait, def_id, _) => {
239- self.r.visibilities[& def_id.expect_local()]
239+ self.r.tcx.visibility( def_id) .expect_local()
240240 }
241241 // Otherwise, the visibility is restricted to the nearest parent `mod` item.
242242 _ => ty::Visibility::Restricted(
@@ -404,6 +404,10 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
404404 parent_prefix, use_tree, nested
405405 );
406406
407+ if nested {
408+ self.r.feed_visibility(self.r.local_def_id(id), vis);
409+ }
410+
407411 let mut prefix_iter = parent_prefix
408412 .iter()
409413 .cloned()
@@ -442,8 +446,6 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
442446 let mut source = module_path.pop().unwrap();
443447 let mut type_ns_only = false;
444448
445- self.r.visibilities.insert(self.r.local_def_id(id), vis);
446-
447449 if nested {
448450 // Correctly handle `self`
449451 if source.ident.name == kw::SelfLower {
@@ -557,7 +559,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
557559 max_vis: Cell::new(None),
558560 id,
559561 };
560- self.r.visibilities.insert(self.r.local_def_id(id), vis);
562+
561563 self.add_import(prefix, kind, use_tree.span, item, root_span, item.id, vis);
562564 }
563565 ast::UseTreeKind::Nested(ref items) => {
@@ -636,7 +638,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
636638 let def_kind = self.r.tcx.def_kind(def_id);
637639 let res = Res::Def(def_kind, def_id);
638640
639- self.r.visibilities.insert (local_def_id, vis);
641+ self.r.feed_visibility (local_def_id, vis);
640642
641643 match item.kind {
642644 ItemKind::Use(ref use_tree) => {
@@ -753,7 +755,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
753755 let ctor_def_id = self.r.local_def_id(ctor_node_id);
754756 let ctor_res = self.res(ctor_def_id);
755757 self.r.define(parent, ident, ValueNS, (ctor_res, ctor_vis, sp, expansion));
756- self.r.visibilities.insert (ctor_def_id, ctor_vis);
758+ self.r.feed_visibility (ctor_def_id, ctor_vis);
757759 // We need the field visibility spans also for the constructor for E0603.
758760 self.insert_field_visibilities_local(ctor_def_id.to_def_id(), vdata);
759761
@@ -897,7 +899,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
897899 let expansion = self.parent_scope.expansion;
898900 let vis = self.resolve_visibility(&item.vis);
899901 self.r.define(parent, item.ident, ns, (self.res(def_id), vis, item.span, expansion));
900- self.r.visibilities.insert (local_def_id, vis);
902+ self.r.feed_visibility (local_def_id, vis);
901903 }
902904
903905 fn build_reduced_graph_for_block(&mut self, block: &Block) {
@@ -1228,7 +1230,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
12281230 self.r.check_reserved_macro_name(ident, res);
12291231 self.insert_unused_macro(ident, def_id, item.id);
12301232 }
1231- self.r.visibilities.insert (def_id, vis);
1233+ self.r.feed_visibility (def_id, vis);
12321234 let scope = self.r.arenas.alloc_macro_rules_scope(MacroRulesScope::Binding(
12331235 self.r.arenas.alloc_macro_rules_binding(MacroRulesBinding {
12341236 parent_macro_rules_scope: parent_scope.macro_rules,
@@ -1252,7 +1254,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
12521254 self.insert_unused_macro(ident, def_id, item.id);
12531255 }
12541256 self.r.define(module, ident, MacroNS, (res, vis, span, expansion));
1255- self.r.visibilities.insert (def_id, vis);
1257+ self.r.feed_visibility (def_id, vis);
12561258 self.parent_scope.macro_rules
12571259 }
12581260 }
@@ -1354,7 +1356,7 @@ impl<'a, 'b, 'tcx> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b, 'tcx> {
13541356 // Trait impl item visibility is inherited from its trait when not specified
13551357 // explicitly. In that case we cannot determine it here in early resolve,
13561358 // so we leave a hole in the visibility table to be filled later.
1357- self.r.visibilities.insert (local_def_id, vis);
1359+ self.r.feed_visibility (local_def_id, vis);
13581360 }
13591361
13601362 if ctxt == AssocCtxt::Trait {
@@ -1432,7 +1434,7 @@ impl<'a, 'b, 'tcx> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b, 'tcx> {
14321434 self.visit_invoc(sf.id);
14331435 } else {
14341436 let vis = self.resolve_visibility(&sf.vis);
1435- self.r.visibilities.insert (self.r.local_def_id(sf.id), vis);
1437+ self.r.feed_visibility (self.r.local_def_id(sf.id), vis);
14361438 visit::walk_field_def(self, sf);
14371439 }
14381440 }
@@ -1453,7 +1455,7 @@ impl<'a, 'b, 'tcx> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b, 'tcx> {
14531455 let def_id = self.r.local_def_id(variant.id);
14541456 let vis = self.resolve_visibility(&variant.vis);
14551457 self.r.define(parent, ident, TypeNS, (self.res(def_id), vis, variant.span, expn_id));
1456- self.r.visibilities.insert (def_id, vis);
1458+ self.r.feed_visibility (def_id, vis);
14571459
14581460 // If the variant is marked as non_exhaustive then lower the visibility to within the crate.
14591461 let ctor_vis =
@@ -1468,7 +1470,7 @@ impl<'a, 'b, 'tcx> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b, 'tcx> {
14681470 let ctor_def_id = self.r.local_def_id(ctor_node_id);
14691471 let ctor_res = self.res(ctor_def_id);
14701472 self.r.define(parent, ident, ValueNS, (ctor_res, ctor_vis, variant.span, expn_id));
1471- self.r.visibilities.insert (ctor_def_id, ctor_vis);
1473+ self.r.feed_visibility (ctor_def_id, ctor_vis);
14721474 }
14731475
14741476 // Record field names for error reporting.
0 commit comments