coverage. Warn about too many test vectors
This commit is contained in:
@@ -9,6 +9,8 @@ mir_transform_const_mut_borrow = taking a mutable reference to a `const` item
|
|||||||
.note2 = the mutable reference will refer to this temporary, not the original `const` item
|
.note2 = the mutable reference will refer to this temporary, not the original `const` item
|
||||||
.note3 = mutable reference created due to call to this method
|
.note3 = mutable reference created due to call to this method
|
||||||
|
|
||||||
|
mir_transform_exceeds_mcdc_test_vector_limit = number of total test vectors in one function will exceed limit ({$max_num_test_vectors}) if this decision is instrumented, so MC/DC analysis ignores it
|
||||||
|
|
||||||
mir_transform_ffi_unwind_call = call to {$foreign ->
|
mir_transform_ffi_unwind_call = call to {$foreign ->
|
||||||
[true] foreign function
|
[true] foreign function
|
||||||
*[false] function pointer
|
*[false] function pointer
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ use crate::coverage::ExtractedHirInfo;
|
|||||||
use crate::coverage::graph::{BasicCoverageBlock, CoverageGraph, START_BCB};
|
use crate::coverage::graph::{BasicCoverageBlock, CoverageGraph, START_BCB};
|
||||||
use crate::coverage::spans::extract_refined_covspans;
|
use crate::coverage::spans::extract_refined_covspans;
|
||||||
use crate::coverage::unexpand::unexpand_into_body_span;
|
use crate::coverage::unexpand::unexpand_into_body_span;
|
||||||
|
use crate::errors::MCDCExceedsTestVectorLimit;
|
||||||
|
|
||||||
/// Associates an ordinary executable code span with its corresponding BCB.
|
/// Associates an ordinary executable code span with its corresponding BCB.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -108,6 +109,7 @@ pub(super) fn extract_all_mapping_info_from_mir<'tcx>(
|
|||||||
|
|
||||||
extract_mcdc_mappings(
|
extract_mcdc_mappings(
|
||||||
mir_body,
|
mir_body,
|
||||||
|
tcx,
|
||||||
hir_info.body_span,
|
hir_info.body_span,
|
||||||
basic_coverage_blocks,
|
basic_coverage_blocks,
|
||||||
&mut mcdc_bitmap_bits,
|
&mut mcdc_bitmap_bits,
|
||||||
@@ -239,6 +241,7 @@ pub(super) fn extract_branch_pairs(
|
|||||||
|
|
||||||
pub(super) fn extract_mcdc_mappings(
|
pub(super) fn extract_mcdc_mappings(
|
||||||
mir_body: &mir::Body<'_>,
|
mir_body: &mir::Body<'_>,
|
||||||
|
tcx: TyCtxt<'_>,
|
||||||
body_span: Span,
|
body_span: Span,
|
||||||
basic_coverage_blocks: &CoverageGraph,
|
basic_coverage_blocks: &CoverageGraph,
|
||||||
mcdc_bitmap_bits: &mut usize,
|
mcdc_bitmap_bits: &mut usize,
|
||||||
@@ -312,7 +315,10 @@ pub(super) fn extract_mcdc_mappings(
|
|||||||
}
|
}
|
||||||
let num_test_vectors = calc_test_vectors_index(&mut branch_mappings);
|
let num_test_vectors = calc_test_vectors_index(&mut branch_mappings);
|
||||||
let Some(bitmap_idx) = get_bitmap_idx(num_test_vectors) else {
|
let Some(bitmap_idx) = get_bitmap_idx(num_test_vectors) else {
|
||||||
// TODO warn about bitmap
|
tcx.dcx().emit_warn(MCDCExceedsTestVectorLimit {
|
||||||
|
span: decision_span,
|
||||||
|
max_num_test_vectors: MCDC_MAX_BITMAP_SIZE,
|
||||||
|
});
|
||||||
mcdc_degraded_branches.extend(branch_mappings);
|
mcdc_degraded_branches.extend(branch_mappings);
|
||||||
return None;
|
return None;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -89,6 +89,14 @@ pub(crate) struct FnItemRef {
|
|||||||
pub ident: String,
|
pub ident: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(mir_transform_exceeds_mcdc_test_vector_limit)]
|
||||||
|
pub(crate) struct MCDCExceedsTestVectorLimit {
|
||||||
|
#[primary_span]
|
||||||
|
pub(crate) span: Span,
|
||||||
|
pub(crate) max_num_test_vectors: usize,
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) struct MustNotSupend<'a, 'tcx> {
|
pub(crate) struct MustNotSupend<'a, 'tcx> {
|
||||||
pub tcx: TyCtxt<'tcx>,
|
pub tcx: TyCtxt<'tcx>,
|
||||||
pub yield_sp: Span,
|
pub yield_sp: Span,
|
||||||
|
|||||||
Reference in New Issue
Block a user