Struct rustc_codegen_llvm::coverageinfo::map_data::FunctionCoverage
source · pub struct FunctionCoverage<'tcx> {
instance: Instance<'tcx>,
source_hash: u64,
is_used: bool,
counters: IndexVec<CounterId, Option<CodeRegion>>,
expressions: IndexVec<ExpressionId, Option<Expression>>,
unreachable_regions: Vec<CodeRegion>,
}Expand description
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. 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: u64§is_used: bool§counters: IndexVec<CounterId, Option<CodeRegion>>§expressions: IndexVec<ExpressionId, Option<Expression>>§unreachable_regions: Vec<CodeRegion>Implementations§
source§impl<'tcx> FunctionCoverage<'tcx>
impl<'tcx> FunctionCoverage<'tcx>
sourcepub fn new(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) -> Self
pub fn new(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) -> Self
Creates a new set of coverage data for a used (called) function.
sourcepub fn unused(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) -> Self
pub fn unused(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) -> Self
Creates a new set of coverage data for an unused (never called) function.
fn create(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>, is_used: bool) -> Self
sourcepub fn is_used(&self) -> bool
pub fn is_used(&self) -> bool
Returns true for a used (called) function, and false for an unused function.
sourcepub fn set_function_source_hash(&mut self, source_hash: u64)
pub fn set_function_source_hash(&mut self, source_hash: u64)
Sets the function source hash value. If called multiple times for the same function, all calls should have the same hash value.
sourcepub fn add_counter(&mut self, id: CounterId, region: CodeRegion)
pub fn add_counter(&mut self, id: CounterId, region: CodeRegion)
Adds a code region to be counted by an injected counter intrinsic.
sourcepub fn add_counter_expression(
&mut self,
expression_id: ExpressionId,
lhs: Operand,
op: Op,
rhs: Operand,
region: Option<CodeRegion>
)
pub fn add_counter_expression( &mut self, expression_id: ExpressionId, lhs: Operand, op: Op, rhs: Operand, region: Option<CodeRegion> )
Both counters and “counter expressions” (or simply, “expressions”) can be operands in other
expressions. These are tracked as separate variants of Operand, so there is no ambiguity
between operands that are counter IDs and operands that are expression IDs.
sourcepub fn add_unreachable_region(&mut self, region: CodeRegion)
pub fn add_unreachable_region(&mut self, region: CodeRegion)
Add a region that will be marked as “unreachable”, with a constant “zero counter”.
sourcepub fn source_hash(&self) -> u64
pub fn source_hash(&self) -> u64
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.
sourcepub fn get_expressions_and_counter_regions(
&self
) -> (Vec<CounterExpression>, impl Iterator<Item = (Counter, &CodeRegion)>)
pub fn get_expressions_and_counter_regions( &self ) -> (Vec<CounterExpression>, impl Iterator<Item = (Counter, &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.
fn counter_regions(&self) -> impl Iterator<Item = (Counter, &CodeRegion)>
fn expressions_with_regions( &self ) -> (Vec<CounterExpression>, impl Iterator<Item = (Counter, &CodeRegion)>)
fn unreachable_regions(&self) -> impl Iterator<Item = (Counter, &CodeRegion)>
Trait Implementations§
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§
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
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:120 bytes