[−][src]Struct rustc_mir::transform::coverage::graph::BasicCoverageBlockData

pub(in transform::coverage) struct BasicCoverageBlockData {
    pub basic_blocks: Vec<BasicBlock>,
    pub counter_kind: Option<CoverageKind>,
    edge_from_bcbs: Option<FxHashMap<BasicCoverageBlock, CoverageKind>>,
}

A BasicCoverageBlockData (BCB) represents the maximal-length sequence of MIR BasicBlocks without conditional branches, and form a new, simplified, coverage-specific Control Flow Graph, without altering the original MIR CFG.

Note that running the MIR SimplifyCfg transform is not sufficient (and therefore not necessary). The BCB-based CFG is a more aggressive simplification. For example:

Each BCB with at least one computed CoverageSpan will have no more than one Counter. In some cases, a BCB's execution count can be computed by Expression. Additional disjoint CoverageSpans in a BCB can also be counted by Expression (by adding ZERO to the BCB's primary counter or expression).

The BCB CFG is critical to simplifying the coverage analysis by ensuring graph path-based queries (is_dominated_by(), predecessors, successors, etc.) have branch (control flow) significance.

Fields

basic_blocks: Vec<BasicBlock>counter_kind: Option<CoverageKind>edge_from_bcbs: Option<FxHashMap<BasicCoverageBlock, CoverageKind>>

Implementations

impl BasicCoverageBlockData[src]

pub fn from(basic_blocks: Vec<BasicBlock>) -> Self[src]

pub fn leader_bb(&self) -> BasicBlock[src]

pub fn last_bb(&self) -> BasicBlock[src]

pub fn terminator<'a, 'tcx>(
    &self,
    mir_body: &'a Body<'tcx>
) -> &'a Terminator<'tcx>
[src]

pub fn set_counter(
    &mut self,
    counter_kind: CoverageKind
) -> Result<ExpressionOperandId, Error>
[src]

pub fn counter(&self) -> Option<&CoverageKind>[src]

pub fn take_counter(&mut self) -> Option<CoverageKind>[src]

pub fn set_edge_counter_from(
    &mut self,
    from_bcb: BasicCoverageBlock,
    counter_kind: CoverageKind
) -> Result<ExpressionOperandId, Error>
[src]

pub fn edge_counter_from(
    &self,
    from_bcb: BasicCoverageBlock
) -> Option<&CoverageKind>
[src]

pub fn take_edge_counters(
    &mut self
) -> Option<impl Iterator<Item = (BasicCoverageBlock, CoverageKind)>>
[src]

pub fn id(&self) -> String[src]

Trait Implementations

impl Clone for BasicCoverageBlockData[src]

impl Debug for BasicCoverageBlockData[src]

Auto Trait Implementations

impl RefUnwindSafe for BasicCoverageBlockData

impl Send for BasicCoverageBlockData

impl Sync for BasicCoverageBlockData

impl Unpin for BasicCoverageBlockData

impl UnwindSafe for BasicCoverageBlockData

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized, 
[src]

impl<T> Borrow<T> for T where
    T: ?Sized, 
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized, 
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone, 
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> WithConstness for T[src]