Struct rustc_mir_transform::coverage::query::CoverageVisitor
source · struct CoverageVisitor {
max_counter_id: CounterId,
max_expression_id: ExpressionId,
}
Expand description
Coverage codegen needs to know the total number of counter IDs and expression IDs that have
been used by a function’s coverage mappings. These totals are used to create vectors to hold
the relevant counter and expression data, and the maximum counter ID (+ 1) is also needed by
the llvm.instrprof.increment
intrinsic.
MIR optimization may split and duplicate some BasicBlock sequences, or optimize out some code
including injected counters. (It is OK if some counters are optimized out, but those counters
are still included in the total num_counters
or num_expressions
.) Simply counting the
calls may not work; but computing the number of counters or expressions by adding 1
to the
highest ID (for a given instrumented function) is valid.
It’s possible for a coverage expression to remain in MIR while one or both of its operands have been optimized away. To avoid problems in codegen, we include those operands’ IDs when determining the maximum counter/expression ID, even if the underlying counter/expression is no longer present.
Fields§
§max_counter_id: CounterId
§max_expression_id: ExpressionId
Implementations§
source§impl CoverageVisitor
impl CoverageVisitor
sourcefn update_max_counter_id(&mut self, counter_id: CounterId)
fn update_max_counter_id(&mut self, counter_id: CounterId)
Updates max_counter_id
to the maximum encountered counter ID.
sourcefn update_max_expression_id(&mut self, expression_id: ExpressionId)
fn update_max_expression_id(&mut self, expression_id: ExpressionId)
Updates max_expression_id
to the maximum encountered expression ID.
fn update_from_expression_operand(&mut self, operand: Operand)
fn visit_body(&mut self, body: &Body<'_>)
fn visit_coverage(&mut self, coverage: &Coverage)
Auto Trait Implementations§
impl RefUnwindSafe for CoverageVisitor
impl Send for CoverageVisitor
impl Sync for CoverageVisitor
impl Unpin for CoverageVisitor
impl UnwindSafe for CoverageVisitor
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: 8 bytes