Skip to content

Commit fa3b2c0

Browse files
committed
coverage: Make the special case for async functions exit early
1 parent 14e8ffb commit fa3b2c0

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

compiler/rustc_mir_transform/src/coverage/mappings.rs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ pub(super) struct MCDCDecision {
5252
pub(super) decision_depth: u16,
5353
}
5454

55+
#[derive(Default)]
5556
pub(super) struct CoverageSpans {
5657
pub(super) code_mappings: Vec<CodeMapping>,
5758
pub(super) branch_pairs: Vec<BranchPair>,
@@ -73,33 +74,35 @@ pub(super) fn generate_coverage_spans(
7374
hir_info: &ExtractedHirInfo,
7475
basic_coverage_blocks: &CoverageGraph,
7576
) -> CoverageSpans {
76-
let mut code_mappings = vec![];
77-
let mut branch_pairs = vec![];
78-
let mut mcdc_branches = vec![];
79-
let mut mcdc_decisions = vec![];
80-
8177
if hir_info.is_async_fn {
8278
// An async function desugars into a function that returns a future,
8379
// with the user code wrapped in a closure. Any spans in the desugared
8480
// outer function will be unhelpful, so just keep the signature span
8581
// and ignore all of the spans in the MIR body.
82+
let mut mappings = CoverageSpans::default();
8683
if let Some(span) = hir_info.fn_sig_span_extended {
87-
code_mappings.push(CodeMapping { span, bcb: START_BCB });
84+
mappings.code_mappings.push(CodeMapping { span, bcb: START_BCB });
8885
}
89-
} else {
90-
extract_refined_covspans(mir_body, hir_info, basic_coverage_blocks, &mut code_mappings);
91-
92-
branch_pairs.extend(extract_branch_pairs(mir_body, hir_info, basic_coverage_blocks));
93-
94-
extract_mcdc_mappings(
95-
mir_body,
96-
hir_info.body_span,
97-
basic_coverage_blocks,
98-
&mut mcdc_branches,
99-
&mut mcdc_decisions,
100-
);
86+
return mappings;
10187
}
10288

89+
let mut code_mappings = vec![];
90+
let mut branch_pairs = vec![];
91+
let mut mcdc_branches = vec![];
92+
let mut mcdc_decisions = vec![];
93+
94+
extract_refined_covspans(mir_body, hir_info, basic_coverage_blocks, &mut code_mappings);
95+
96+
branch_pairs.extend(extract_branch_pairs(mir_body, hir_info, basic_coverage_blocks));
97+
98+
extract_mcdc_mappings(
99+
mir_body,
100+
hir_info.body_span,
101+
basic_coverage_blocks,
102+
&mut mcdc_branches,
103+
&mut mcdc_decisions,
104+
);
105+
103106
// Determine the length of the test vector bitmap.
104107
let test_vector_bitmap_bytes = mcdc_decisions
105108
.iter()

0 commit comments

Comments
 (0)