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>,
expressions: IndexVec<ExpressionId, BcbExpression>,
expressions_memo: FxHashMap<BcbExpression, BcbCounter>,
}
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.
expressions: IndexVec<ExpressionId, BcbExpression>
Table of expression data, associating each expression ID with its corresponding operator (+ or -) and its LHS/RHS operands.
expressions_memo: FxHashMap<BcbExpression, BcbCounter>
Remember expressions that have already been created (or simplified), so that we don’t create unnecessary duplicates.
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_expression_inner(
expressions: &mut IndexVec<ExpressionId, BcbExpression>,
new_expr: BcbExpression,
) -> BcbCounter
fn make_expression_inner( expressions: &mut IndexVec<ExpressionId, BcbExpression>, new_expr: BcbExpression, ) -> BcbCounter
This is an associated function so that we can call it while borrowing
&mut self.expressions_memo
.
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 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
source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
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<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§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
source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> 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