coverage: Detach MC/DC branch spans from regular branch spans

MC/DC's reliance on the existing branch coverage types is making it much harder
to improve branch coverage.
This commit is contained in:
Zalathar
2024-04-21 12:06:03 +10:00
parent a892c2387e
commit 97bf553682
6 changed files with 101 additions and 52 deletions

View File

@@ -21,7 +21,9 @@ pub(super) enum BcbMappingKind {
MCDCBranch {
true_bcb: BasicCoverageBlock,
false_bcb: BasicCoverageBlock,
condition_info: ConditionInfo,
/// If `None`, this actually represents a normal branch mapping inserted
/// for code that was too complex for MC/DC.
condition_info: Option<ConditionInfo>,
},
/// Associates a mcdc decision with its join BCB.
MCDCDecision { end_bcbs: BTreeSet<BasicCoverageBlock>, bitmap_idx: u32, conditions_num: u16 },
@@ -85,6 +87,12 @@ pub(super) fn generate_coverage_spans(
}));
mappings.extend(from_mir::extract_branch_mappings(
mir_body,
hir_info,
basic_coverage_blocks,
));
mappings.extend(from_mir::extract_mcdc_mappings(
mir_body,
hir_info.body_span,
basic_coverage_blocks,