Struct rustc_mir_transform::coverage::counters::CoverageCounters
source · pub(super) struct CoverageCounters {
counter_increment_sites: IndexVec<CounterId, CounterIncrementSite>,
bcb_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>,
bcb_edge_counters: FxHashMap<(BasicCoverageBlock, BasicCoverageBlock), BcbCounter>,
bcb_has_incoming_edge_counters: BitSet<BasicCoverageBlock>,
expressions: IndexVec<ExpressionId, Expression>,
}
Expand description
Generates and stores coverage counter and coverage expression information associated with nodes/edges in the BCB graph.
Fields§
§counter_increment_sites: IndexVec<CounterId, CounterIncrementSite>
List of places where a counter-increment statement should be injected into MIR, each with its corresponding counter ID.
bcb_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>
Coverage counters/expressions that are associated with individual BCBs.
bcb_edge_counters: FxHashMap<(BasicCoverageBlock, BasicCoverageBlock), BcbCounter>
Coverage counters/expressions that are associated with the control-flow edge between two BCBs.
We currently don’t iterate over this map, but if we do in the future,
switch it back to FxIndexMap
to avoid query stability hazards.
bcb_has_incoming_edge_counters: BitSet<BasicCoverageBlock>
Tracks which BCBs have a counter associated with some incoming edge. Only used by assertions, to verify that BCBs with incoming edge counters do not have their own physical counters (expressions are allowed).
expressions: IndexVec<ExpressionId, Expression>
Table of expression data, associating each expression ID with its corresponding operator (+ or -) and its LHS/RHS operands.
Implementations§
source§impl CoverageCounters
impl CoverageCounters
sourcepub(super) fn make_bcb_counters(
basic_coverage_blocks: &CoverageGraph,
bcb_has_coverage_spans: impl Fn(BasicCoverageBlock) -> bool
) -> Self
pub(super) fn make_bcb_counters( basic_coverage_blocks: &CoverageGraph, bcb_has_coverage_spans: impl Fn(BasicCoverageBlock) -> bool ) -> Self
Makes BcbCounter
Counter
s and Expressions
for the BasicCoverageBlock
s directly or
indirectly associated with coverage spans, and accumulates additional Expression
s
representing intermediate values.
fn make_counter(&mut self, site: CounterIncrementSite) -> BcbCounter
fn make_expression( &mut self, lhs: BcbCounter, op: Op, rhs: BcbCounter ) -> BcbCounter
sourcefn make_sum_expression(
&mut self,
lhs: Option<BcbCounter>,
rhs: BcbCounter
) -> BcbCounter
fn make_sum_expression( &mut self, lhs: Option<BcbCounter>, rhs: BcbCounter ) -> BcbCounter
Variant of make_expression
that makes lhs
optional and assumes Op::Add
.
This is useful when using Iterator::fold
to build an arbitrary-length sum.
pub(super) fn num_counters(&self) -> usize
fn set_bcb_counter( &mut self, bcb: BasicCoverageBlock, counter_kind: BcbCounter ) -> BcbCounter
fn set_bcb_edge_counter( &mut self, from_bcb: BasicCoverageBlock, to_bcb: BasicCoverageBlock, counter_kind: BcbCounter ) -> BcbCounter
pub(super) fn bcb_counter(&self, bcb: BasicCoverageBlock) -> Option<BcbCounter>
sourcepub(super) fn counter_increment_sites(
&self
) -> impl Iterator<Item = (CounterId, &CounterIncrementSite)>
pub(super) fn counter_increment_sites( &self ) -> impl Iterator<Item = (CounterId, &CounterIncrementSite)>
Returns an iterator over all the nodes/edges in the coverage graph that should have a counter-increment statement injected into MIR, along with each site’s corresponding counter ID.
sourcepub(super) fn bcb_nodes_with_coverage_expressions(
&self
) -> impl Iterator<Item = (BasicCoverageBlock, ExpressionId)> + Captures<'_>
pub(super) fn bcb_nodes_with_coverage_expressions( &self ) -> impl Iterator<Item = (BasicCoverageBlock, ExpressionId)> + Captures<'_>
Returns an iterator over the subset of BCB nodes that have been associated with a counter expression, along with the ID of that expression.
pub(super) fn into_expressions(self) -> IndexVec<ExpressionId, Expression>
Auto Trait Implementations§
impl DynSend for CoverageCounters
impl DynSync for CoverageCounters
impl Freeze for CoverageCounters
impl RefUnwindSafe for CoverageCounters
impl Send for CoverageCounters
impl Sync for CoverageCounters
impl Unpin for CoverageCounters
impl UnwindSafe for CoverageCounters
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
§impl<T> Filterable for T
impl<T> Filterable for T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed ) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for 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: 136 bytes