diff --git a/compiler/rustc_hir/src/intravisit.rs b/compiler/rustc_hir/src/intravisit.rs index 2c8558571de..2dd49eba442 100644 --- a/compiler/rustc_hir/src/intravisit.rs +++ b/compiler/rustc_hir/src/intravisit.rs @@ -32,7 +32,6 @@ //! example generator inference, and possibly also HIR borrowck. use crate::hir::*; -use crate::hir_id::CRATE_HIR_ID; use crate::itemlikevisit::{ItemLikeVisitor, ParItemLikeVisitor}; use rustc_ast::walk_list; use rustc_ast::{Attribute, Label}; @@ -477,17 +476,6 @@ pub trait Visitor<'v>: Sized { } } -/// Walks the contents of a crate. See also `Crate::visit_all_items`. -pub fn walk_crate_and_attributes<'v, V: Visitor<'v>>(visitor: &mut V, krate: &'v Crate<'v>) { - let top_mod = krate.module(); - visitor.visit_mod(top_mod, top_mod.inner, CRATE_HIR_ID); - for (&id, attrs) in krate.attrs.iter() { - for a in *attrs { - visitor.visit_attribute(id, a) - } - } -} - pub fn walk_mod<'v, V: Visitor<'v>>(visitor: &mut V, module: &'v Mod<'v>, mod_hir_id: HirId) { visitor.visit_id(mod_hir_id); for &item_id in module.item_ids { diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs index 5dc57f6023b..3eb588c7ff0 100644 --- a/compiler/rustc_interface/src/passes.rs +++ b/compiler/rustc_interface/src/passes.rs @@ -464,10 +464,6 @@ pub fn lower_to_hir<'res, 'tcx>( arena, ); - if sess.opts.debugging_opts.hir_stats { - hir_stats::print_hir_stats(&hir_crate); - } - sess.time("early_lint_checks", || { rustc_lint::check_ast_crate( sess, diff --git a/compiler/rustc_passes/src/hir_id_validator.rs b/compiler/rustc_passes/src/hir_id_validator.rs index 944a3097a61..18f61c6e1c1 100644 --- a/compiler/rustc_passes/src/hir_id_validator.rs +++ b/compiler/rustc_passes/src/hir_id_validator.rs @@ -11,6 +11,10 @@ use rustc_middle::ty::TyCtxt; pub fn check_crate(tcx: TyCtxt<'_>) { tcx.dep_graph.assert_ignored(); + if tcx.sess.opts.debugging_opts.hir_stats { + crate::hir_stats::print_hir_stats(tcx); + } + let errors = Lock::new(Vec::new()); let hir_map = tcx.hir(); diff --git a/compiler/rustc_passes/src/hir_stats.rs b/compiler/rustc_passes/src/hir_stats.rs index 4868f8b04e9..58693cdda90 100644 --- a/compiler/rustc_passes/src/hir_stats.rs +++ b/compiler/rustc_passes/src/hir_stats.rs @@ -9,6 +9,7 @@ use rustc_hir as hir; use rustc_hir::intravisit as hir_visit; use rustc_hir::HirId; use rustc_middle::hir::map::Map; +use rustc_middle::ty::TyCtxt; use rustc_middle::util::common::to_readable_str; use rustc_span::Span; @@ -25,18 +26,19 @@ struct NodeData { } struct StatCollector<'k> { - krate: Option<&'k hir::Crate<'k>>, + krate: Option>, data: FxHashMap<&'static str, NodeData>, seen: FxHashSet, } -pub fn print_hir_stats(krate: &hir::Crate<'_>) { +pub fn print_hir_stats(tcx: TyCtxt<'_>) { let mut collector = StatCollector { - krate: Some(krate), + krate: Some(tcx.hir()), data: FxHashMap::default(), seen: FxHashSet::default(), }; - hir_visit::walk_crate_and_attributes(&mut collector, krate); + tcx.hir().walk_crate(&mut collector); + tcx.hir().walk_attributes(&mut collector); collector.print("HIR STATS"); }