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>2024-10-05 17:08:07 +1000
committerZalathar <Zalathar@users.noreply.github.com>2024-10-06 23:01:29 +1100
commitc6e4fcd4faaa57fa059165a5c24b119d1e8f0f7f (patch)
treed94fcf996ffd36ef87c402da9961761b1e83f448 /compiler/rustc_mir_transform/src
parent3f90bb15ed1672984c826b38d93e6d771c320701 (diff)
downloadrust-c6e4fcd4faaa57fa059165a5c24b119d1e8f0f7f.tar.gz
rust-c6e4fcd4faaa57fa059165a5c24b119d1e8f0f7f.zip
coverage: Have MakeBcbCounters own its CoverageCounters
Diffstat (limited to 'compiler/rustc_mir_transform/src')
-rw-r--r--compiler/rustc_mir_transform/src/coverage/counters.rs27
1 files changed, 14 insertions, 13 deletions
diff --git a/compiler/rustc_mir_transform/src/coverage/counters.rs b/compiler/rustc_mir_transform/src/coverage/counters.rs
index a954ca35985..95c4d9f88fb 100644
--- a/compiler/rustc_mir_transform/src/coverage/counters.rs
+++ b/compiler/rustc_mir_transform/src/coverage/counters.rs
@@ -80,19 +80,20 @@ impl CoverageCounters {
         basic_coverage_blocks: &CoverageGraph,
         bcb_needs_counter: impl Fn(BasicCoverageBlock) -> bool,
     ) -> Self {
-        let num_bcbs = basic_coverage_blocks.num_nodes();
+        let mut counters = MakeBcbCounters::new(basic_coverage_blocks);
+        counters.make_bcb_counters(bcb_needs_counter);
 
-        let mut this = Self {
+        counters.coverage_counters
+    }
+
+    fn with_num_bcbs(num_bcbs: usize) -> Self {
+        Self {
             counter_increment_sites: IndexVec::new(),
             bcb_counters: IndexVec::from_elem_n(None, num_bcbs),
             bcb_edge_counters: FxHashMap::default(),
             expressions: IndexVec::new(),
             expressions_memo: FxHashMap::default(),
-        };
-
-        MakeBcbCounters::new(&mut this, basic_coverage_blocks).make_bcb_counters(bcb_needs_counter);
-
-        this
+        }
     }
 
     /// Shared helper used by [`Self::make_phys_node_counter`] and
@@ -265,16 +266,16 @@ impl CoverageCounters {
 
 /// Helper struct that allows counter creation to inspect the BCB graph.
 struct MakeBcbCounters<'a> {
-    coverage_counters: &'a mut CoverageCounters,
+    coverage_counters: CoverageCounters,
     basic_coverage_blocks: &'a CoverageGraph,
 }
 
 impl<'a> MakeBcbCounters<'a> {
-    fn new(
-        coverage_counters: &'a mut CoverageCounters,
-        basic_coverage_blocks: &'a CoverageGraph,
-    ) -> Self {
-        Self { coverage_counters, basic_coverage_blocks }
+    fn new(basic_coverage_blocks: &'a CoverageGraph) -> Self {
+        Self {
+            coverage_counters: CoverageCounters::with_num_bcbs(basic_coverage_blocks.num_nodes()),
+            basic_coverage_blocks,
+        }
     }
 
     fn make_bcb_counters(&mut self, bcb_needs_counter: impl Fn(BasicCoverageBlock) -> bool) {