1
Fork 0

Add proper cfgs for struct HirIdValidator used only with debug assertions

This commit is contained in:
r0cky 2024-03-06 22:54:22 +08:00
parent 2064c19886
commit f41537981b
3 changed files with 18 additions and 24 deletions

View file

@ -686,6 +686,11 @@ pub fn create_global_ctxt<'tcx>(
/// Runs the type-checking, region checking and other miscellaneous analysis /// Runs the type-checking, region checking and other miscellaneous analysis
/// passes on the crate. /// passes on the crate.
fn analysis(tcx: TyCtxt<'_>, (): ()) -> Result<()> { fn analysis(tcx: TyCtxt<'_>, (): ()) -> Result<()> {
if tcx.sess.opts.unstable_opts.hir_stats {
rustc_passes::hir_stats::print_hir_stats(tcx);
}
#[cfg(debug_assertions)]
rustc_passes::hir_id_validator::check_crate(tcx); rustc_passes::hir_id_validator::check_crate(tcx);
let sess = tcx.sess; let sess = tcx.sess;

View file

@ -1,38 +1,26 @@
use rustc_data_structures::sync::Lock; use rustc_data_structures::sync::Lock;
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::def_id::LocalDefId; use rustc_hir::def_id::LocalDefId;
use rustc_hir::intravisit; use rustc_hir::{intravisit, HirId, ItemLocalId};
use rustc_hir::{HirId, ItemLocalId};
use rustc_index::bit_set::GrowableBitSet; use rustc_index::bit_set::GrowableBitSet;
use rustc_middle::hir::nested_filter; use rustc_middle::hir::nested_filter;
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
pub fn check_crate(tcx: TyCtxt<'_>) { pub fn check_crate(tcx: TyCtxt<'_>) {
if tcx.sess.opts.unstable_opts.hir_stats { let errors = Lock::new(Vec::new());
crate::hir_stats::print_hir_stats(tcx);
}
#[cfg(debug_assertions)] tcx.hir().par_for_each_module(|module_id| {
{ let mut v =
let errors = Lock::new(Vec::new()); HirIdValidator { tcx, owner: None, hir_ids_seen: Default::default(), errors: &errors };
tcx.hir().par_for_each_module(|module_id| { tcx.hir().visit_item_likes_in_module(module_id, &mut v);
let mut v = HirIdValidator { });
tcx,
owner: None,
hir_ids_seen: Default::default(),
errors: &errors,
};
tcx.hir().visit_item_likes_in_module(module_id, &mut v); let errors = errors.into_inner();
});
let errors = errors.into_inner(); if !errors.is_empty() {
let message = errors.iter().fold(String::new(), |s1, s2| s1 + "\n" + s2);
if !errors.is_empty() { tcx.dcx().delayed_bug(message);
let message = errors.iter().fold(String::new(), |s1, s2| s1 + "\n" + s2);
tcx.dcx().delayed_bug(message);
}
} }
} }
@ -90,7 +78,7 @@ impl<'a, 'hir> HirIdValidator<'a, 'hir> {
self.error(|| { self.error(|| {
format!( format!(
"ItemLocalIds not assigned densely in {pretty_owner}. \ "ItemLocalIds not assigned densely in {pretty_owner}. \
Max ItemLocalId = {max}, missing IDs = {missing_items:#?}; seen IDs = {seen_items:#?}" Max ItemLocalId = {max}, missing IDs = {missing_items:#?}; seen IDs = {seen_items:#?}"
) )
}); });
} }

View file

@ -28,6 +28,7 @@ mod debugger_visualizer;
mod diagnostic_items; mod diagnostic_items;
pub mod entry; pub mod entry;
mod errors; mod errors;
#[cfg(debug_assertions)]
pub mod hir_id_validator; pub mod hir_id_validator;
pub mod hir_stats; pub mod hir_stats;
mod lang_items; mod lang_items;