From c5628a5e656073bd3bceacb7824c2f66845d99f3 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 12 Oct 2021 08:34:38 +0200 Subject: [PATCH] Use invalid local id for zeroth node parent. --- compiler/rustc_ast_lowering/src/index.rs | 5 ++++- compiler/rustc_hir/src/hir.rs | 4 +++- compiler/rustc_hir/src/hir_id.rs | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_ast_lowering/src/index.rs b/compiler/rustc_ast_lowering/src/index.rs index 7b0f1caaee1..dc2b1a730fb 100644 --- a/compiler/rustc_ast_lowering/src/index.rs +++ b/compiler/rustc_ast_lowering/src/index.rs @@ -47,7 +47,10 @@ pub(super) fn index_hir<'hir>( bodies: &IndexVec>>, ) -> (IndexVec>>, FxHashMap) { let mut nodes = IndexVec::new(); - nodes.push(Some(ParentedNode { parent: ItemLocalId::new(0), node: item.into() })); + // This node's parent should never be accessed: the owner's parent is computed by the + // hir_owner_parent query. Make it invalid (= ItemLocalId::MAX) to force an ICE whenever it is + // used. + nodes.push(Some(ParentedNode { parent: ItemLocalId::INVALID, node: item.into() })); let mut collector = NodeCollector { source_map: sess.source_map(), definitions, diff --git a/compiler/rustc_hir/src/hir.rs b/compiler/rustc_hir/src/hir.rs index 0530a691020..1ec37566fab 100644 --- a/compiler/rustc_hir/src/hir.rs +++ b/compiler/rustc_hir/src/hir.rs @@ -696,7 +696,9 @@ pub struct OwnerNodes<'tcx> { /// Pre-computed hash of the item signature, sithout recursing into the body. pub hash_without_bodies: Fingerprint, /// Full HIR for the current owner. - // The zeroth node's parent is trash, but is never accessed. + // The zeroth node's parent should never be accessed: the owner's parent is computed by the + // hir_owner_parent query. It is set to `ItemLocalId::INVALID` to force an ICE if accidentally + // used. pub nodes: IndexVec>>, /// Content of local bodies. pub bodies: IndexVec>>, diff --git a/compiler/rustc_hir/src/hir_id.rs b/compiler/rustc_hir/src/hir_id.rs index 0b25ebc27bd..877871f7c3d 100644 --- a/compiler/rustc_hir/src/hir_id.rs +++ b/compiler/rustc_hir/src/hir_id.rs @@ -56,6 +56,10 @@ rustc_index::newtype_index! { pub struct ItemLocalId { .. } } rustc_data_structures::impl_stable_hash_via_hash!(ItemLocalId); +impl ItemLocalId { + /// Signal local id which should never be used. + pub const INVALID: ItemLocalId = ItemLocalId::MAX; +} /// The `HirId` corresponding to `CRATE_NODE_ID` and `CRATE_DEF_INDEX`. pub const CRATE_HIR_ID: HirId = HirId {