forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#79958 - richkadel:llvm-coverage-counters-2.…
…2.0, r=tmandry Fixes reported bugs in Rust Coverage Fixes: rust-lang#79569 Fixes: rust-lang#79566 Fixes: rust-lang#79565 For the first issue (rust-lang#79569), I got hit a `debug_assert!()` before encountering the reported error message (because I have `debug = true` enabled in my config.toml). The assertion showed me that some `SwitchInt`s can have more than one target pointing to the same `BasicBlock`. I had thought that was invalid, but since it seems to be possible, I'm allowing this now. I added a new test for this. ---- In the last two cases above, both tests (intentionally) fail to compile, but the `InstrumentCoverage` pass is invoked anyway. The MIR starts with an `Unreachable` `BasicBlock`, which I hadn't encountered before. (I had assumed the `InstrumentCoverage` pass would only be invoked with MIRs from successful compilations.) I don't have test infrastructure set up to test coverage on files that fail to compile, so I didn't add a new test. r? `@tmandry` FYI: `@wesleywiser`
- Loading branch information
Showing
16 changed files
with
616 additions
and
53 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
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
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
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
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
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
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
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
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
59 changes: 59 additions & 0 deletions
59
src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.match_or_pattern.json
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 |
---|---|---|
@@ -0,0 +1,59 @@ | ||
{ | ||
"data": [ | ||
{ | ||
"files": [ | ||
{ | ||
"filename": "../coverage/match_or_pattern.rs", | ||
"summary": { | ||
"functions": { | ||
"count": 1, | ||
"covered": 1, | ||
"percent": 100 | ||
}, | ||
"instantiations": { | ||
"count": 1, | ||
"covered": 1, | ||
"percent": 100 | ||
}, | ||
"lines": { | ||
"count": 37, | ||
"covered": 33, | ||
"percent": 89.1891891891892 | ||
}, | ||
"regions": { | ||
"count": 25, | ||
"covered": 17, | ||
"notcovered": 8, | ||
"percent": 68 | ||
} | ||
} | ||
} | ||
], | ||
"totals": { | ||
"functions": { | ||
"count": 1, | ||
"covered": 1, | ||
"percent": 100 | ||
}, | ||
"instantiations": { | ||
"count": 1, | ||
"covered": 1, | ||
"percent": 100 | ||
}, | ||
"lines": { | ||
"count": 37, | ||
"covered": 33, | ||
"percent": 89.1891891891892 | ||
}, | ||
"regions": { | ||
"count": 25, | ||
"covered": 17, | ||
"notcovered": 8, | ||
"percent": 68 | ||
} | ||
} | ||
} | ||
], | ||
"type": "llvm.coverage.json.export", | ||
"version": "2.0.1" | ||
} |
50 changes: 50 additions & 0 deletions
50
src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.match_or_pattern.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 |
---|---|---|
@@ -0,0 +1,50 @@ | ||
1| |#![feature(or_patterns)] | ||
2| | | ||
3| 1|fn main() { | ||
4| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure | ||
5| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from | ||
6| 1| // dependent conditions. | ||
7| 1| let is_true = std::env::args().len() == 1; | ||
8| 1| | ||
9| 1| let mut a: u8 = 0; | ||
10| 1| let mut b: u8 = 0; | ||
11| 1| if is_true { | ||
12| 1| a = 2; | ||
13| 1| b = 0; | ||
14| 1| } | ||
^0 | ||
15| 1| match (a, b) { | ||
16| | // Or patterns generate MIR `SwitchInt` with multiple targets to the same `BasicBlock`. | ||
17| | // This test confirms a fix for Issue #79569. | ||
18| 0| (0 | 1, 2 | 3) => {} | ||
19| 1| _ => {} | ||
20| | } | ||
21| 1| if is_true { | ||
22| 1| a = 0; | ||
23| 1| b = 0; | ||
24| 1| } | ||
^0 | ||
25| 1| match (a, b) { | ||
26| 0| (0 | 1, 2 | 3) => {} | ||
27| 1| _ => {} | ||
28| | } | ||
29| 1| if is_true { | ||
30| 1| a = 2; | ||
31| 1| b = 2; | ||
32| 1| } | ||
^0 | ||
33| 1| match (a, b) { | ||
34| 0| (0 | 1, 2 | 3) => {} | ||
35| 1| _ => {} | ||
36| | } | ||
37| 1| if is_true { | ||
38| 1| a = 0; | ||
39| 1| b = 2; | ||
40| 1| } | ||
^0 | ||
41| 1| match (a, b) { | ||
42| 1| (0 | 1, 2 | 3) => {} | ||
43| 0| _ => {} | ||
44| | } | ||
45| 1|} | ||
|
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
Oops, something went wrong.