[−][src]Struct rustc_codegen_ssa::coverageinfo::map::FunctionCoverage
Collects all of the coverage regions associated with (a) injected counters, (b) counter
expressions (additions or subtraction), and (c) unreachable regions (always counted as zero),
for a given Function. Counters and counter expressions have non-overlapping ids because they
can both be operands in an expression. This struct also stores the function_source_hash,
computed during instrumentation, and forwarded with counters.
Note, it may be important to understand LLVM's definitions of unreachable regions versus "gap
regions" (or "gap areas"). A gap region is a code region within a counted region (either counter
or expression), but the line or lines in the gap region are not executable (such as lines with
only whitespace or comments). According to LLVM Code Coverage Mapping documentation, "A count
for a gap area is only used as the line execution count if there are no other regions on a
line."
Fields
instance: Instance<'tcx>source_hash: u64counters: IndexVec<CounterValueReference, Option<CodeRegion>>expressions: IndexVec<InjectedExpressionIndex, Option<Expression>>unreachable_regions: Vec<CodeRegion>Implementations
impl<'tcx> FunctionCoverage<'tcx>[src]
pub fn new(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) -> Self[src]
pub fn set_function_source_hash(&mut self, source_hash: u64)[src]
Sets the function source hash value. If called multiple times for the same function, all calls should have the same hash value.
pub fn add_counter(&mut self, id: CounterValueReference, region: CodeRegion)[src]
Adds a code region to be counted by an injected counter intrinsic.
pub fn add_counter_expression(
&mut self,
expression_id: InjectedExpressionId,
lhs: ExpressionOperandId,
op: Op,
rhs: ExpressionOperandId,
region: Option<CodeRegion>
)[src]
&mut self,
expression_id: InjectedExpressionId,
lhs: ExpressionOperandId,
op: Op,
rhs: ExpressionOperandId,
region: Option<CodeRegion>
)
Both counters and "counter expressions" (or simply, "expressions") can be operands in other
expressions. Expression IDs start from u32::MAX and go down, so the range of expression
IDs will not overlap with the range of counter IDs. Counters and expressions can be added in
any order, and expressions can still be assigned contiguous (though descending) IDs, without
knowing what the last counter ID will be.
When storing the expression data in the expressions vector in the FunctionCoverage
struct, its vector index is computed, from the given expression ID, by subtracting from
u32::MAX.
Since the expression operands (lhs and rhs) can reference either counters or
expressions, an operand that references an expression also uses its original ID, descending
from u32::MAX. Theses operands are translated only during code generation, after all
counters and expressions have been added.
pub fn add_unreachable_region(&mut self, region: CodeRegion)[src]
Add a region that will be marked as "unreachable", with a constant "zero counter".
pub fn source_hash(&self) -> u64[src]
Return the source hash, generated from the HIR node structure, and used to indicate whether or not the source code structure changed between different compilations.
pub fn get_expressions_and_counter_regions<'a>(
&'a self
) -> (Vec<CounterExpression>, impl Iterator<Item = (Counter, &'a CodeRegion)>)[src]
&'a self
) -> (Vec<CounterExpression>, impl Iterator<Item = (Counter, &'a CodeRegion)>)
Generate an array of CounterExpressions, and an iterator over all Counters and their
associated Regions (from which the LLVM-specific CoverageMapGenerator will create
CounterMappingRegions.
pub(in coverageinfo::map) fn counter_regions<'a>(
&'a self
) -> impl Iterator<Item = (Counter, &'a CodeRegion)>[src]
&'a self
) -> impl Iterator<Item = (Counter, &'a CodeRegion)>
pub(in coverageinfo::map) fn expressions_with_regions<'a>(
&'a self
) -> (Vec<CounterExpression>, impl Iterator<Item = (Counter, &'a CodeRegion)>)[src]
&'a self
) -> (Vec<CounterExpression>, impl Iterator<Item = (Counter, &'a CodeRegion)>)
pub(in coverageinfo::map) fn unreachable_regions<'a>(
&'a self
) -> impl Iterator<Item = (Counter, &'a CodeRegion)>[src]
&'a self
) -> impl Iterator<Item = (Counter, &'a CodeRegion)>
pub(in coverageinfo::map) fn expression_index(
&self,
id_descending_from_max: u32
) -> InjectedExpressionIndex[src]
&self,
id_descending_from_max: u32
) -> InjectedExpressionIndex
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for FunctionCoverage<'tcx>
impl<'tcx> !Send for FunctionCoverage<'tcx>
impl<'tcx> !Sync for FunctionCoverage<'tcx>
impl<'tcx> Unpin for FunctionCoverage<'tcx>
impl<'tcx> !UnwindSafe for FunctionCoverage<'tcx>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,