Struct rustc_mir_transform::coverage::Instrumentor
source · 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
sourceimpl<'a, 'tcx> Instrumentor<'a, 'tcx>
impl<'a, 'tcx> Instrumentor<'a, 'tcx>
fn new(
pass_name: &'a str,
tcx: TyCtxt<'tcx>,
mir_body: &'a mut Body<'tcx>
) -> Self
fn inject_counters(&'a mut self)
sourcefn 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.
sourcefn 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.
fn bcb_leader_bb(&self, bcb: BasicCoverageBlock) -> BasicBlock
fn bcb_last_bb(&self, bcb: BasicCoverageBlock) -> BasicBlock
fn bcb_data(&self, bcb: BasicCoverageBlock) -> &BasicCoverageBlockData
fn bcb_data_mut(
&mut self,
bcb: BasicCoverageBlock
) -> &mut BasicCoverageBlockData
fn format_counter(&self, counter_kind: &CoverageKind) -> String
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
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
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