rust/tests/mir-opt/instrument_coverage.main.InstrumentCoverage.diff
Zalathar 13b2d604ec coverage: Store expression data in function coverage info
Even though expression details are now stored in the info structure, we still
need to inject `ExpressionUsed` statements into MIR, because if one is missing
during codegen then we know that it was optimized out and we can remap all of
its associated code regions to zero.
2023-10-18 23:44:34 +11:00

56 lines
1.5 KiB
Diff

- // MIR for `main` before InstrumentCoverage
+ // MIR for `main` after InstrumentCoverage
fn main() -> () {
let mut _0: ();
let mut _1: ();
let mut _2: bool;
let mut _3: !;
+ coverage ExpressionId(0) => Expression { lhs: Counter(0), op: Add, rhs: Counter(1) };
+ coverage ExpressionId(1) => Expression { lhs: Expression(0), op: Subtract, rhs: Counter(1) };
+ coverage Counter(0) => /the/src/instrument_coverage.rs:11:1 - 11:11;
+ coverage Expression(0) => /the/src/instrument_coverage.rs:12:5 - 13:17;
+ coverage Expression(1) => /the/src/instrument_coverage.rs:14:13 - 14:18;
+ coverage Expression(1) => /the/src/instrument_coverage.rs:17:1 - 17:2;
+ coverage Counter(1) => /the/src/instrument_coverage.rs:15:10 - 15:11;
+
bb0: {
+ Coverage::CounterIncrement(0);
goto -> bb1;
}
bb1: {
+ Coverage::ExpressionUsed(0);
falseUnwind -> [real: bb2, unwind: bb6];
}
bb2: {
StorageLive(_2);
_2 = bar() -> [return: bb3, unwind: bb6];
}
bb3: {
switchInt(move _2) -> [0: bb5, otherwise: bb4];
}
bb4: {
+ Coverage::ExpressionUsed(1);
_0 = const ();
StorageDead(_2);
return;
}
bb5: {
+ Coverage::CounterIncrement(1);
_1 = const ();
StorageDead(_2);
goto -> bb1;
}
bb6 (cleanup): {
resume;
}
}