about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src/coverage/spans.rs
diff options
context:
space:
mode:
authorZalathar <Zalathar@users.noreply.github.com>2024-02-18 20:54:10 +1100
committerZalathar <Zalathar@users.noreply.github.com>2024-02-21 21:25:36 +1100
commit3a83b279bef65f8b727d33d1c7a80e5d2432f5aa (patch)
tree9f8f0cee15a2fb0a0a116b7f087ff86377d969c7 /compiler/rustc_mir_transform/src/coverage/spans.rs
parentc40261da11a58247822c9297993eb2142d8d53a2 (diff)
downloadrust-3a83b279bef65f8b727d33d1c7a80e5d2432f5aa.tar.gz
rust-3a83b279bef65f8b727d33d1c7a80e5d2432f5aa.zip
coverage: Simplify (non-closure) covspans truncating each other
Diffstat (limited to 'compiler/rustc_mir_transform/src/coverage/spans.rs')
-rw-r--r--compiler/rustc_mir_transform/src/coverage/spans.rs14
1 files changed, 7 insertions, 7 deletions
diff --git a/compiler/rustc_mir_transform/src/coverage/spans.rs b/compiler/rustc_mir_transform/src/coverage/spans.rs
index c2e348cb713..98fb1d8e1c9 100644
--- a/compiler/rustc_mir_transform/src/coverage/spans.rs
+++ b/compiler/rustc_mir_transform/src/coverage/spans.rs
@@ -132,11 +132,13 @@ impl PrevCovspan {
         self.merged_spans.push(other.span);
     }
 
-    fn cutoff_statements_at(&mut self, cutoff_pos: BytePos) {
+    fn cutoff_statements_at(mut self, cutoff_pos: BytePos) -> Option<RefinedCovspan> {
         self.merged_spans.retain(|span| span.hi() <= cutoff_pos);
         if let Some(max_hi) = self.merged_spans.iter().map(|span| span.hi()).max() {
             self.span = self.span.with_hi(max_hi);
         }
+
+        if self.merged_spans.is_empty() { None } else { Some(self.into_refined()) }
     }
 
     fn refined_copy(&self) -> RefinedCovspan {
@@ -374,13 +376,11 @@ impl SpansRefiner {
         );
 
         let curr_span = self.curr().span;
-        self.prev_mut().cutoff_statements_at(curr_span.lo());
-        if self.prev().merged_spans.is_empty() {
-            debug!("  ... no non-overlapping statements to add");
-        } else {
-            debug!("  ... adding modified prev={:?}", self.prev());
-            let prev = self.take_prev().into_refined();
+        if let Some(prev) = self.take_prev().cutoff_statements_at(curr_span.lo()) {
+            debug!("after cutoff, adding {prev:?}");
             self.refined_spans.push(prev);
+        } else {
+            debug!("prev was eliminated by cutoff");
         }
     }
 }