From fb5ced0fbd7625316ee28d4f2f7230aac35753dd Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 27 Apr 2021 19:58:46 +0200 Subject: [PATCH] Add sanity check. We force the relative span's parent to be absolute. This avoids having to handle long dependency chains. --- compiler/rustc_ast_lowering/src/lib.rs | 4 ++-- compiler/rustc_hir/src/definitions.rs | 4 ++++ compiler/rustc_interface/src/callbacks.rs | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index 9232be8ea2b..9edc30ceb19 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -788,7 +788,7 @@ fn lifetime_to_generic_param( node_id, DefPathData::LifetimeNs(str_name), ExpnId::root(), - span, + span.with_parent(None), ); hir::GenericParam { @@ -1520,7 +1520,7 @@ fn lower_opaque_impl_trait( def_node_id, DefPathData::LifetimeNs(name.ident().name), ExpnId::root(), - span, + span.with_parent(None), ); let (name, kind) = match name { diff --git a/compiler/rustc_hir/src/definitions.rs b/compiler/rustc_hir/src/definitions.rs index ada012b6697..5f56f3a32ad 100644 --- a/compiler/rustc_hir/src/definitions.rs +++ b/compiler/rustc_hir/src/definitions.rs @@ -345,6 +345,8 @@ pub fn new(stable_crate_id: StableCrateId, crate_span: Span) -> Definitions { assert_eq!(root.local_def_index, CRATE_DEF_INDEX); let mut def_id_to_span = IndexVec::new(); + // A relative span's parent must be an absolute span. + debug_assert_eq!(crate_span.data_untracked().parent, None); let _root = def_id_to_span.push(crate_span); debug_assert_eq!(_root, root); @@ -394,6 +396,8 @@ pub fn create_def( self.expansions_that_defined.insert(def_id, expn_id); } + // A relative span's parent must be an absolute span. + debug_assert_eq!(span.data_untracked().parent, None); let _id = self.def_id_to_span.push(span); debug_assert_eq!(_id, def_id); diff --git a/compiler/rustc_interface/src/callbacks.rs b/compiler/rustc_interface/src/callbacks.rs index 03c75655d6a..95bd2993456 100644 --- a/compiler/rustc_interface/src/callbacks.rs +++ b/compiler/rustc_interface/src/callbacks.rs @@ -28,7 +28,9 @@ fn span_debug(span: rustc_span::Span, f: &mut fmt::Formatter<'_>) -> fmt::Result fn track_span_parent(def_id: rustc_span::def_id::LocalDefId) { tls::with_opt(|tcx| { if let Some(tcx) = tcx { - let _ = tcx.source_span(def_id); + let _span = tcx.source_span(def_id); + // Sanity check: relative span's parent must be an absolute span. + debug_assert_eq!(_span.data_untracked().parent, None); } }) }