Add proper cfgs for struct HirIdValidator used only with debug assertions
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs
index 6614016..84bee45 100644
--- a/compiler/rustc_interface/src/passes.rs
+++ b/compiler/rustc_interface/src/passes.rs
@@ -686,6 +686,11 @@ pub fn create_global_ctxt<'tcx>(
/// Runs the type-checking, region checking and other miscellaneous analysis
/// passes on the crate.
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);
let sess = tcx.sess;
diff --git a/compiler/rustc_passes/src/hir_id_validator.rs b/compiler/rustc_passes/src/hir_id_validator.rs
index 02f56ec..dd6c116 100644
--- a/compiler/rustc_passes/src/hir_id_validator.rs
+++ b/compiler/rustc_passes/src/hir_id_validator.rs
@@ -1,38 +1,26 @@
use rustc_data_structures::sync::Lock;
use rustc_hir as hir;
use rustc_hir::def_id::LocalDefId;
-use rustc_hir::intravisit;
-use rustc_hir::{HirId, ItemLocalId};
+use rustc_hir::{intravisit, HirId, ItemLocalId};
use rustc_index::bit_set::GrowableBitSet;
use rustc_middle::hir::nested_filter;
use rustc_middle::ty::TyCtxt;
pub fn check_crate(tcx: TyCtxt<'_>) {
- if tcx.sess.opts.unstable_opts.hir_stats {
- crate::hir_stats::print_hir_stats(tcx);
- }
+ let errors = Lock::new(Vec::new());
- #[cfg(debug_assertions)]
- {
- let errors = Lock::new(Vec::new());
+ tcx.hir().par_for_each_module(|module_id| {
+ let mut v =
+ HirIdValidator { tcx, owner: None, hir_ids_seen: Default::default(), errors: &errors };
- tcx.hir().par_for_each_module(|module_id| {
- 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);
+ });
- 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);
- tcx.dcx().delayed_bug(message);
- }
+ if !errors.is_empty() {
+ let message = errors.iter().fold(String::new(), |s1, s2| s1 + "\n" + s2);
+ tcx.dcx().delayed_bug(message);
}
}
@@ -90,7 +78,7 @@ fn check<F: FnOnce(&mut HirIdValidator<'a, 'hir>)>(&mut self, owner: hir::OwnerI
self.error(|| {
format!(
"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:#?}"
)
});
}
diff --git a/compiler/rustc_passes/src/lib.rs b/compiler/rustc_passes/src/lib.rs
index 7227b18..e03052b 100644
--- a/compiler/rustc_passes/src/lib.rs
+++ b/compiler/rustc_passes/src/lib.rs
@@ -28,6 +28,7 @@
mod diagnostic_items;
pub mod entry;
mod errors;
+#[cfg(debug_assertions)]
pub mod hir_id_validator;
pub mod hir_stats;
mod lang_items;