about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src
diff options
context:
space:
mode:
authorZalathar <Zalathar@users.noreply.github.com>2023-12-28 14:07:18 +1100
committerZalathar <Zalathar@users.noreply.github.com>2024-01-11 16:43:12 +1100
commit124fff0777014323be34f0a990c78c5cfe9f40db (patch)
tree57bdce1c03284b41f0a6a214b79bf867650e65b3 /compiler/rustc_mir_transform/src
parentc5932182adfe57f38438f6b7509d1f8b9f95fd73 (diff)
downloadrust-124fff0777014323be34f0a990c78c5cfe9f40db.tar.gz
rust-124fff0777014323be34f0a990c78c5cfe9f40db.zip
coverage: Add enums to accommodate other kinds of coverage mappings
Diffstat (limited to 'compiler/rustc_mir_transform/src')
-rw-r--r--compiler/rustc_mir_transform/src/coverage/mod.rs10
-rw-r--r--compiler/rustc_mir_transform/src/coverage/spans.rs17
2 files changed, 20 insertions, 7 deletions
diff --git a/compiler/rustc_mir_transform/src/coverage/mod.rs b/compiler/rustc_mir_transform/src/coverage/mod.rs
index b91afb19d8f..a11d224e8f1 100644
--- a/compiler/rustc_mir_transform/src/coverage/mod.rs
+++ b/compiler/rustc_mir_transform/src/coverage/mod.rs
@@ -9,7 +9,7 @@ mod tests;
 
 use self::counters::{BcbCounter, CoverageCounters};
 use self::graph::{BasicCoverageBlock, CoverageGraph};
-use self::spans::{BcbMapping, CoverageSpans};
+use self::spans::{BcbMapping, BcbMappingKind, CoverageSpans};
 
 use crate::MirPass;
 
@@ -150,10 +150,12 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> {
 
         coverage_spans
             .all_bcb_mappings()
-            .filter_map(|&BcbMapping { bcb, span }| {
-                let term = term_for_bcb(bcb);
+            .filter_map(|&BcbMapping { kind: bcb_mapping_kind, span }| {
+                let kind = match bcb_mapping_kind {
+                    BcbMappingKind::Code(bcb) => MappingKind::Code(term_for_bcb(bcb)),
+                };
                 let code_region = make_code_region(source_map, file_name, span, body_span)?;
-                Some(Mapping { term, code_region })
+                Some(Mapping { kind, code_region })
             })
             .collect::<Vec<_>>()
     }
diff --git a/compiler/rustc_mir_transform/src/coverage/spans.rs b/compiler/rustc_mir_transform/src/coverage/spans.rs
index be52f5b1129..81f6c831206 100644
--- a/compiler/rustc_mir_transform/src/coverage/spans.rs
+++ b/compiler/rustc_mir_transform/src/coverage/spans.rs
@@ -8,9 +8,15 @@ use crate::coverage::ExtractedHirInfo;
 
 mod from_mir;
 
+#[derive(Clone, Copy, Debug)]
+pub(super) enum BcbMappingKind {
+    /// Associates an ordinary executable code span with its corresponding BCB.
+    Code(BasicCoverageBlock),
+}
+
 #[derive(Debug)]
 pub(super) struct BcbMapping {
-    pub(super) bcb: BasicCoverageBlock,
+    pub(super) kind: BcbMappingKind,
     pub(super) span: Span,
 }
 
@@ -38,7 +44,7 @@ impl CoverageSpans {
         );
         mappings.extend(coverage_spans.into_iter().map(|CoverageSpan { bcb, span, .. }| {
             // Each span produced by the generator represents an ordinary code region.
-            BcbMapping { bcb, span }
+            BcbMapping { kind: BcbMappingKind::Code(bcb), span }
         }));
 
         if mappings.is_empty() {
@@ -47,8 +53,13 @@ impl CoverageSpans {
 
         // Identify which BCBs have one or more mappings.
         let mut bcb_has_mappings = BitSet::new_empty(basic_coverage_blocks.num_nodes());
-        for &BcbMapping { bcb, span: _ } in &mappings {
+        let mut insert = |bcb| {
             bcb_has_mappings.insert(bcb);
+        };
+        for &BcbMapping { kind, span: _ } in &mappings {
+            match kind {
+                BcbMappingKind::Code(bcb) => insert(bcb),
+            }
         }
 
         Some(Self { bcb_has_mappings, mappings })