Struct rustc_mir_build::build::coverageinfo::BranchInfoBuilder
source · pub(crate) struct BranchInfoBuilder {
nots: FxHashMap<ExprId, NotInfo>,
num_block_markers: usize,
branch_spans: Vec<BranchSpan>,
}
Fields§
§nots: FxHashMap<ExprId, NotInfo>
Maps condition expressions to their enclosing !
, for better instrumentation.
num_block_markers: usize
§branch_spans: Vec<BranchSpan>
Implementations§
source§impl BranchInfoBuilder
impl BranchInfoBuilder
sourcepub(crate) fn new_if_enabled(
tcx: TyCtxt<'_>,
def_id: LocalDefId
) -> Option<Self>
pub(crate) fn new_if_enabled( tcx: TyCtxt<'_>, def_id: LocalDefId ) -> Option<Self>
Creates a new branch info builder, but only if branch coverage instrumentation
is enabled and def_id
represents a function that is eligible for coverage.
sourcepub(crate) fn visit_unary_not(&mut self, thir: &Thir<'_>, unary_not: ExprId)
pub(crate) fn visit_unary_not(&mut self, thir: &Thir<'_>, unary_not: ExprId)
Unary !
expressions inside an if
condition are lowered by lowering
their argument instead, and then reversing the then/else arms of that if
.
That’s awkward for branch coverage instrumentation, so to work around that
we pre-emptively visit any affected !
expressions, and record extra
information that Builder::visit_coverage_branch_condition
can use to
synthesize branch instrumentation for the enclosing !
.
fn visit_with_not_info( &mut self, thir: &Thir<'_>, expr_id: ExprId, not_info: NotInfo )
fn next_block_marker_id(&mut self) -> BlockMarkerId
pub(crate) fn into_done(self) -> Option<Box<BranchInfo>>
Auto Trait Implementations§
impl DynSend for BranchInfoBuilder
impl DynSync for BranchInfoBuilder
impl Freeze for BranchInfoBuilder
impl RefUnwindSafe for BranchInfoBuilder
impl Send for BranchInfoBuilder
impl Sync for BranchInfoBuilder
impl Unpin for BranchInfoBuilder
impl UnwindSafe for BranchInfoBuilder
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: 64 bytes