-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Remove reachable coverage without counters
Remove reachable coverage without counters to maintain invariant that either there is no coverage at all or there is a live coverage counter left that provides the function source hash. The motivating example would be a following closure: ```rust let f = |x: bool| { debug_assert!(x); }; ``` Which, with span changes from #93967, with disabled debug assertions, after the final CFG simplifications but before removal of dead blocks, gives rise to MIR: ```rust fn main::{closure#0}(_1: &[[email protected]:2:13: 2:22], _2: bool) -> () { debug x => _2; let mut _0: (); bb0: { Coverage::Expression(4294967295) = 1 - 2; return; } ... } ```
- Loading branch information
Showing
3 changed files
with
42 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 23 additions & 16 deletions
39
src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.inline-dead.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,28 @@ | ||
1| |// Regression test for issue #98833. | ||
2| |// compile-flags: -Zinline-mir | ||
2| |// compile-flags: -Zinline-mir -Cdebug-assertions=off | ||
3| | | ||
4| 1|fn main() { | ||
5| 1| println!("{}", live::<false>()); | ||
6| 1|} | ||
7| | | ||
8| |#[inline] | ||
9| 1|fn live<const B: bool>() -> u32 { | ||
10| 1| if B { | ||
11| 0| dead() | ||
12| | } else { | ||
13| 1| 0 | ||
14| | } | ||
15| 1|} | ||
16| | | ||
17| |#[inline] | ||
18| 0|fn dead() -> u32 { | ||
19| 0| 42 | ||
20| 0|} | ||
6| 1| | ||
7| 1| let f = |x: bool| { | ||
8| | debug_assert!( | ||
9| | x | ||
10| | ); | ||
11| 1| }; | ||
12| 1| f(false); | ||
13| 1|} | ||
14| | | ||
15| |#[inline] | ||
16| 1|fn live<const B: bool>() -> u32 { | ||
17| 1| if B { | ||
18| 0| dead() | ||
19| | } else { | ||
20| 1| 0 | ||
21| | } | ||
22| 1|} | ||
23| | | ||
24| |#[inline] | ||
25| 0|fn dead() -> u32 { | ||
26| 0| 42 | ||
27| 0|} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters