about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2021-04-27 19:58:46 +0200
committerCamille GILLOT <gillot.camille@gmail.com>2021-09-10 20:18:26 +0200
commitfb5ced0fbd7625316ee28d4f2f7230aac35753dd (patch)
tree0523ed2d831d5ca8c07b046e896f458a0f8e694c
parent940fa9251e3c538a4c9d35d84dcaa09065e45687 (diff)
downloadrust-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.rs4
-rw-r--r--compiler/rustc_hir/src/definitions.rs4
-rw-r--r--compiler/rustc_interface/src/callbacks.rs4
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);
         }
     })
 }