pub(super) struct CoverageCounters {
pub(crate) phys_counter_for_node: FxIndexMap<BasicCoverageBlock, CounterId>,
pub(crate) next_counter_id: CounterId,
pub(crate) node_counters: IndexVec<BasicCoverageBlock, Option<CovTerm>>,
pub(crate) expressions: IndexVec<ExpressionId, Expression>,
expressions_memo: FxHashMap<Expression, CovTerm>,
}
Expand description
Generates and stores coverage counter and coverage expression information associated with nodes in the coverage graph.
Fields§
§phys_counter_for_node: FxIndexMap<BasicCoverageBlock, CounterId>
List of places where a counter-increment statement should be injected into MIR, each with its corresponding counter ID.
next_counter_id: CounterId
§node_counters: IndexVec<BasicCoverageBlock, Option<CovTerm>>
Coverage counters/expressions that are associated with individual BCBs.
expressions: IndexVec<ExpressionId, Expression>
Table of expression data, associating each expression ID with its corresponding operator (+ or -) and its LHS/RHS operands.
expressions_memo: FxHashMap<Expression, CovTerm>
Remember expressions that have already been created (or simplified), so that we don’t create unnecessary duplicates.
Implementations§
Source§impl CoverageCounters
impl CoverageCounters
fn with_num_bcbs(num_bcbs: usize) -> Self
Sourcefn ensure_phys_counter(&mut self, bcb: BasicCoverageBlock) -> CovTerm
fn ensure_phys_counter(&mut self, bcb: BasicCoverageBlock) -> CovTerm
Returns the physical counter for the given node, creating it if necessary.
fn make_expression(&mut self, lhs: CovTerm, op: Op, rhs: CovTerm) -> CovTerm
Sourcefn make_sum(&mut self, counters: &[CovTerm]) -> Option<CovTerm>
fn make_sum(&mut self, counters: &[CovTerm]) -> Option<CovTerm>
Creates a counter that is the sum of the given counters.
Returns None
if the given list of counters was empty.
Sourcefn make_subtracted_sum(&mut self, lhs: CovTerm, rhs: &[CovTerm]) -> CovTerm
fn make_subtracted_sum(&mut self, lhs: CovTerm, rhs: &[CovTerm]) -> CovTerm
Creates a counter whose value is lhs - SUM(rhs)
.
fn set_node_counter( &mut self, bcb: BasicCoverageBlock, counter: CovTerm, ) -> CovTerm
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
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<T> Pointable for T
impl<T> Pointable 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: 144 bytes