coverage. Adapt to mcdc mapping formats introduced by llvm 19
This commit is contained in:
parent
99bd601df5
commit
6e3e19f714
22 changed files with 490 additions and 485 deletions
|
@ -128,8 +128,8 @@ pub enum CoverageKind {
|
|||
|
||||
/// Marks the point in MIR control flow represented by a evaluated condition.
|
||||
///
|
||||
/// This is eventually lowered to `llvm.instrprof.mcdc.condbitmap.update` in LLVM IR.
|
||||
CondBitmapUpdate { id: ConditionId, value: bool, decision_depth: u16 },
|
||||
/// This is eventually lowered to instruments updating mcdc temp variables.
|
||||
CondBitmapUpdate { index: u32, decision_depth: u16 },
|
||||
|
||||
/// Marks the point in MIR control flow represented by a evaluated decision.
|
||||
///
|
||||
|
@ -145,14 +145,8 @@ impl Debug for CoverageKind {
|
|||
BlockMarker { id } => write!(fmt, "BlockMarker({:?})", id.index()),
|
||||
CounterIncrement { id } => write!(fmt, "CounterIncrement({:?})", id.index()),
|
||||
ExpressionUsed { id } => write!(fmt, "ExpressionUsed({:?})", id.index()),
|
||||
CondBitmapUpdate { id, value, decision_depth } => {
|
||||
write!(
|
||||
fmt,
|
||||
"CondBitmapUpdate({:?}, {:?}, depth={:?})",
|
||||
id.index(),
|
||||
value,
|
||||
decision_depth
|
||||
)
|
||||
CondBitmapUpdate { index, decision_depth } => {
|
||||
write!(fmt, "CondBitmapUpdate(index={:?}, depth={:?})", index, decision_depth)
|
||||
}
|
||||
TestVectorBitmapUpdate { bitmap_idx, decision_depth } => {
|
||||
write!(fmt, "TestVectorUpdate({:?}, depth={:?})", bitmap_idx, decision_depth)
|
||||
|
@ -253,7 +247,7 @@ pub struct Mapping {
|
|||
pub struct FunctionCoverageInfo {
|
||||
pub function_source_hash: u64,
|
||||
pub num_counters: usize,
|
||||
pub mcdc_bitmap_bytes: u32,
|
||||
pub mcdc_bitmap_bits: usize,
|
||||
pub expressions: IndexVec<ExpressionId, Expression>,
|
||||
pub mappings: Vec<Mapping>,
|
||||
/// The depth of the deepest decision is used to know how many
|
||||
|
@ -275,8 +269,10 @@ pub struct CoverageInfoHi {
|
|||
/// data structures without having to scan the entire body first.
|
||||
pub num_block_markers: usize,
|
||||
pub branch_spans: Vec<BranchSpan>,
|
||||
pub mcdc_branch_spans: Vec<MCDCBranchSpan>,
|
||||
pub mcdc_decision_spans: Vec<MCDCDecisionSpan>,
|
||||
/// Branch spans generated by mcdc. Because of some limits mcdc builder give up generating
|
||||
/// decisions including them so that they are handled as normal branch spans.
|
||||
pub mcdc_degraded_branch_spans: Vec<MCDCBranchSpan>,
|
||||
pub mcdc_spans: Vec<(MCDCDecisionSpan, Vec<MCDCBranchSpan>)>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
@ -299,12 +295,9 @@ pub struct ConditionInfo {
|
|||
#[derive(TyEncodable, TyDecodable, Hash, HashStable, TypeFoldable, TypeVisitable)]
|
||||
pub struct MCDCBranchSpan {
|
||||
pub span: Span,
|
||||
/// If `None`, this actually represents a normal branch span inserted for
|
||||
/// code that was too complex for MC/DC.
|
||||
pub condition_info: Option<ConditionInfo>,
|
||||
pub condition_info: ConditionInfo,
|
||||
pub true_marker: BlockMarkerId,
|
||||
pub false_marker: BlockMarkerId,
|
||||
pub decision_depth: u16,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
|
@ -318,7 +311,7 @@ pub struct DecisionInfo {
|
|||
#[derive(TyEncodable, TyDecodable, Hash, HashStable, TypeFoldable, TypeVisitable)]
|
||||
pub struct MCDCDecisionSpan {
|
||||
pub span: Span,
|
||||
pub num_conditions: usize,
|
||||
pub end_markers: Vec<BlockMarkerId>,
|
||||
pub decision_depth: u16,
|
||||
pub num_conditions: usize,
|
||||
}
|
||||
|
|
|
@ -538,8 +538,8 @@ fn write_coverage_info_hi(
|
|||
let coverage::CoverageInfoHi {
|
||||
num_block_markers: _,
|
||||
branch_spans,
|
||||
mcdc_branch_spans,
|
||||
mcdc_decision_spans,
|
||||
mcdc_degraded_branch_spans,
|
||||
mcdc_spans,
|
||||
} = coverage_info_hi;
|
||||
|
||||
// Only add an extra trailing newline if we printed at least one thing.
|
||||
|
@ -553,29 +553,35 @@ fn write_coverage_info_hi(
|
|||
did_print = true;
|
||||
}
|
||||
|
||||
for coverage::MCDCBranchSpan {
|
||||
span,
|
||||
condition_info,
|
||||
true_marker,
|
||||
false_marker,
|
||||
decision_depth,
|
||||
} in mcdc_branch_spans
|
||||
for coverage::MCDCBranchSpan { span, true_marker, false_marker, .. } in
|
||||
mcdc_degraded_branch_spans
|
||||
{
|
||||
writeln!(
|
||||
w,
|
||||
"{INDENT}coverage mcdc branch {{ condition_id: {:?}, true: {true_marker:?}, false: {false_marker:?}, depth: {decision_depth:?} }} => {span:?}",
|
||||
condition_info.map(|info| info.condition_id)
|
||||
"{INDENT}coverage branch {{ true: {true_marker:?}, false: {false_marker:?} }} => {span:?}",
|
||||
)?;
|
||||
did_print = true;
|
||||
}
|
||||
|
||||
for coverage::MCDCDecisionSpan { span, num_conditions, end_markers, decision_depth } in
|
||||
mcdc_decision_spans
|
||||
for (
|
||||
coverage::MCDCDecisionSpan { span, end_markers, decision_depth, num_conditions: _ },
|
||||
conditions,
|
||||
) in mcdc_spans
|
||||
{
|
||||
let num_conditions = conditions.len();
|
||||
writeln!(
|
||||
w,
|
||||
"{INDENT}coverage mcdc decision {{ num_conditions: {num_conditions:?}, end: {end_markers:?}, depth: {decision_depth:?} }} => {span:?}"
|
||||
)?;
|
||||
for coverage::MCDCBranchSpan { span, condition_info, true_marker, false_marker } in
|
||||
conditions
|
||||
{
|
||||
writeln!(
|
||||
w,
|
||||
"{INDENT}coverage mcdc branch {{ condition_id: {:?}, true: {true_marker:?}, false: {false_marker:?} }} => {span:?}",
|
||||
condition_info.condition_id
|
||||
)?;
|
||||
}
|
||||
did_print = true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue