coverage: Add CoverageKind::SpanMarker
for including extra spans in MIR
There are cases where coverage instrumentation wants to show a span for some syntax element, but there is no MIR node that naturally carries that span, so the instrumentor can't see it. MIR building can now use this new kind of coverage statement to deliberately include those spans in MIR, attached to a dummy statement that has no other effect.
This commit is contained in:
parent
d2d742c4cc
commit
44b47aa976
4 changed files with 36 additions and 3 deletions
|
@ -101,6 +101,19 @@ impl<'tcx> CFG<'tcx> {
|
|||
self.push(block, stmt);
|
||||
}
|
||||
|
||||
/// Adds a dummy statement whose only role is to associate a span with its
|
||||
/// enclosing block for the purposes of coverage instrumentation.
|
||||
///
|
||||
/// This results in more accurate coverage reports for certain kinds of
|
||||
/// syntax (e.g. `continue` or `if !`) that would otherwise not appear in MIR.
|
||||
pub(crate) fn push_coverage_span_marker(&mut self, block: BasicBlock, source_info: SourceInfo) {
|
||||
let kind = StatementKind::Coverage(Box::new(Coverage {
|
||||
kind: coverage::CoverageKind::SpanMarker,
|
||||
}));
|
||||
let stmt = Statement { source_info, kind };
|
||||
self.push(block, stmt);
|
||||
}
|
||||
|
||||
pub(crate) fn terminate(
|
||||
&mut self,
|
||||
block: BasicBlock,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue