13b2d604ec
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.
56 lines
1.5 KiB
Diff
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;
|
|
}
|
|
}
|
|
|