diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2021-04-27 19:58:46 +0200 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2021-09-10 20:18:26 +0200 |
| commit | fb5ced0fbd7625316ee28d4f2f7230aac35753dd (patch) | |
| tree | 0523ed2d831d5ca8c07b046e896f458a0f8e694c | |
| parent | 940fa9251e3c538a4c9d35d84dcaa09065e45687 (diff) | |
| download | rust-fb5ced0fbd7625316ee28d4f2f7230aac35753dd.tar.gz rust-fb5ced0fbd7625316ee28d4f2f7230aac35753dd.zip | |
Add sanity check.
We force the relative span's parent to be absolute. This avoids having to handle long dependency chains.
| -rw-r--r-- | compiler/rustc_ast_lowering/src/lib.rs | 4 | ||||
| -rw-r--r-- | compiler/rustc_hir/src/definitions.rs | 4 | ||||
| -rw-r--r-- | 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 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { node_id, DefPathData::LifetimeNs(str_name), ExpnId::root(), - span, + span.with_parent(None), ); hir::GenericParam { @@ -1520,7 +1520,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { 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 @@ impl 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 @@ impl Definitions { 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); } }) } |
