Struct rustc_mir_transform::coverage::Instrumentor [−][src]
struct Instrumentor<'a, 'tcx> {
pass_name: &'a str,
tcx: TyCtxt<'tcx>,
mir_body: &'a mut Body<'tcx>,
source_file: Lrc<SourceFile>,
fn_sig_span: Span,
body_span: Span,
basic_coverage_blocks: CoverageGraph,
coverage_counters: CoverageCounters,
}Fields
pass_name: &'a strtcx: TyCtxt<'tcx>mir_body: &'a mut Body<'tcx>source_file: Lrc<SourceFile>fn_sig_span: Spanbody_span: Spanbasic_coverage_blocks: CoverageGraphcoverage_counters: CoverageCountersImplementations
fn inject_coverage_span_counters(
&mut self,
coverage_spans: Vec<CoverageSpan>,
graphviz_data: &mut GraphvizData,
debug_used_expressions: &mut UsedExpressions
)
fn inject_coverage_span_counters(
&mut self,
coverage_spans: Vec<CoverageSpan>,
graphviz_data: &mut GraphvizData,
debug_used_expressions: &mut UsedExpressions
)
Inject a counter for each CoverageSpan. There can be multiple CoverageSpans for a given
BCB, but only one actual counter needs to be incremented per BCB. bb_counters maps each
bcb to its Counter, when injected. Subsequent CoverageSpans for a BCB that already has
a Counter will inject an Expression instead, and compute its value by adding ZERO to
the BCB Counter value.
If debugging, add every BCB Expression associated with a CoverageSpans to the
used_expression_operands map.
fn inject_indirect_counters(
&mut self,
graphviz_data: &mut GraphvizData,
debug_used_expressions: &mut UsedExpressions
)
fn inject_indirect_counters(
&mut self,
graphviz_data: &mut GraphvizData,
debug_used_expressions: &mut UsedExpressions
)
inject_coverage_span_counters() looped through the CoverageSpans and injected the
counter from the CoverageSpans BasicCoverageBlock, removing it from the BCB in the
process (via take_counter()).
Any other counter associated with a BasicCoverageBlock, or its incoming edge, but not
associated with a CoverageSpan, should only exist if the counter is an Expression
dependency (one of the expression operands). Collect them, and inject the additional
counters into the MIR, without a reportable coverage span.
Auto Trait Implementations
impl<'a, 'tcx> !RefUnwindSafe for Instrumentor<'a, 'tcx>
impl<'a, 'tcx> !Send for Instrumentor<'a, 'tcx>
impl<'a, 'tcx> !Sync for Instrumentor<'a, 'tcx>
impl<'a, 'tcx> Unpin for Instrumentor<'a, 'tcx> where
'tcx: 'a,
impl<'a, 'tcx> !UnwindSafe for Instrumentor<'a, 'tcx>
Blanket Implementations
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 248 bytes