From 0e316e29e6f7166989cb3e8342b145f16dc48cca Mon Sep 17 00:00:00 2001 From: =?utf8?q?John=20K=C3=A5re=20Alsaker?= Date: Sun, 9 Feb 2020 17:11:02 +0100 Subject: [PATCH] Fix HIR map validation --- src/librustc/hir/map/hir_id_validator.rs | 25 ++++++++++++------------ src/librustc/hir/map/mod.rs | 1 + src/librustc_interface/passes.rs | 2 ++ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/librustc/hir/map/hir_id_validator.rs b/src/librustc/hir/map/hir_id_validator.rs index 281056684a1..c4c23c1a754 100644 --- a/src/librustc/hir/map/hir_id_validator.rs +++ b/src/librustc/hir/map/hir_id_validator.rs @@ -1,18 +1,20 @@ +use crate::hir::map::Map; use crate::ty::TyCtxt; -/*use rustc_data_structures::fx::FxHashSet; +use rustc_data_structures::fx::FxHashSet; use rustc_data_structures::sync::{par_iter, Lock, ParallelIterator}; use rustc_hir as hir; use rustc_hir::def_id::{DefId, DefIndex, CRATE_DEF_INDEX}; use rustc_hir::intravisit; use rustc_hir::itemlikevisit::ItemLikeVisitor; -use rustc_hir::{HirId, ItemLocalId};*/ +use rustc_hir::{HirId, ItemLocalId}; -pub fn check_crate(_tcx: TyCtxt<'_>) { - /*tcx.dep_graph.assert_ignored(); +pub fn check_crate(tcx: TyCtxt<'_>) { + tcx.dep_graph.assert_ignored(); let errors = Lock::new(Vec::new()); + let hir_map = tcx.hir(); - par_iter(&hir_map.krate.modules).for_each(|(module_id, _)| { + par_iter(&hir_map.krate().modules).for_each(|(module_id, _)| { let local_def_id = hir_map.local_def_id(*module_id); hir_map.visit_item_likes_in_module( local_def_id, @@ -25,23 +27,23 @@ pub fn check_crate(_tcx: TyCtxt<'_>) { if !errors.is_empty() { let message = errors.iter().fold(String::new(), |s1, s2| s1 + "\n" + s2); tcx.sess.delay_span_bug(rustc_span::DUMMY_SP, &message); - }*/ + } } -/* + struct HirIdValidator<'a, 'hir> { - hir_map: &'a EarlyMap<'hir>, + hir_map: Map<'hir>, owner_def_index: Option, hir_ids_seen: FxHashSet, errors: &'a Lock>, } struct OuterVisitor<'a, 'hir> { - hir_map: &'a EarlyMap<'hir>, + hir_map: Map<'hir>, errors: &'a Lock>, } impl<'a, 'hir> OuterVisitor<'a, 'hir> { - fn new_inner_visitor(&self, hir_map: &'a EarlyMap<'hir>) -> HirIdValidator<'a, 'hir> { + fn new_inner_visitor(&self, hir_map: Map<'hir>) -> HirIdValidator<'a, 'hir> { HirIdValidator { hir_map, owner_def_index: None, @@ -133,7 +135,7 @@ fn check)>(&mut self, hir_id: HirId, wal } impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> { - type Map = EarlyMap<'hir>; + type Map = Map<'hir>; fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap { intravisit::NestedVisitorMap::OnlyBodies(self.hir_map) @@ -173,4 +175,3 @@ fn visit_impl_item_ref(&mut self, _: &'hir hir::ImplItemRef<'hir>) { // different owner. } } -*/ diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index d3aff7c963f..8b13f008a89 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -25,6 +25,7 @@ mod collector; pub mod definitions; mod hir_id_validator; +pub use hir_id_validator::check_crate; /// Represents an entry and its parent `HirId`. #[derive(Copy, Clone, Debug)] diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs index a250fcc217a..4fe7a06e560 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -762,6 +762,8 @@ pub fn create_global_ctxt<'tcx>( fn analysis(tcx: TyCtxt<'_>, cnum: CrateNum) -> Result<()> { assert_eq!(cnum, LOCAL_CRATE); + rustc::hir::map::check_crate(tcx); + let sess = tcx.sess; let mut entry_point = None; -- 2.44.0