about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZalathar <Zalathar@users.noreply.github.com>2023-12-04 19:43:44 +1100
committerZalathar <Zalathar@users.noreply.github.com>2023-12-05 21:21:05 +1100
commitff3af59f2b6ba19779f77500c996b5ff3603f7a0 (patch)
tree8186edeeba7f557979e375a4125dfeb82a670e14
parent9358642e3b8560eee89e6f40aa996c8394a3db31 (diff)
downloadrust-ff3af59f2b6ba19779f77500c996b5ff3603f7a0.tar.gz
rust-ff3af59f2b6ba19779f77500c996b5ff3603f7a0.zip
coverage: Clean up `maybe_push_macro_name_span`
-rw-r--r--compiler/rustc_mir_transform/src/coverage/spans.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/compiler/rustc_mir_transform/src/coverage/spans.rs b/compiler/rustc_mir_transform/src/coverage/spans.rs
index e0abb5da047..ebaa3060e79 100644
--- a/compiler/rustc_mir_transform/src/coverage/spans.rs
+++ b/compiler/rustc_mir_transform/src/coverage/spans.rs
@@ -379,18 +379,22 @@ impl<'a> CoverageSpansGenerator<'a> {
             return;
         }
 
-        let merged_prefix_len = self.curr_original_span.lo() - curr.span.lo();
-        let after_macro_bang = merged_prefix_len + BytePos(visible_macro.as_str().len() as u32 + 1);
-        if self.curr().span.lo() + after_macro_bang > self.curr().span.hi() {
+        // The split point is relative to `curr_original_span`,
+        // because `curr.span` may have been merged with preceding spans.
+        let split_point_after_macro_bang = self.curr_original_span.lo()
+            + BytePos(visible_macro.as_str().len() as u32)
+            + BytePos(1); // add 1 for the `!`
+        if split_point_after_macro_bang > curr.span.hi() {
             // Something is wrong with the macro name span;
             // return now to avoid emitting malformed mappings.
             // FIXME(#117788): Track down why this happens.
             return;
         }
+
         let mut macro_name_cov = curr.clone();
-        self.curr_mut().span = curr.span.with_lo(curr.span.lo() + after_macro_bang);
-        macro_name_cov.span =
-            macro_name_cov.span.with_hi(macro_name_cov.span.lo() + after_macro_bang);
+        macro_name_cov.span = macro_name_cov.span.with_hi(split_point_after_macro_bang);
+        self.curr_mut().span = curr.span.with_lo(split_point_after_macro_bang);
+
         debug!(
             "  and curr starts a new macro expansion, so add a new span just for \
             the macro `{visible_macro}!`, new span={macro_name_cov:?}",