mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-03 20:23:59 +00:00
d90fd027c8
When MIR is built for an if-not expression, the `!` part of the condition doesn't correspond to any MIR statement, so coverage instrumentation normally can't see it. We can fix that by deliberately injecting a dummy statement whose sole purpose is to associate that span with its enclosing block.
39 lines
1.0 KiB
Plaintext
39 lines
1.0 KiB
Plaintext
LL| |#![feature(coverage_attribute)]
|
|
LL| |// edition: 2021
|
|
LL| |
|
|
LL| 12|fn if_not(cond: bool) {
|
|
LL| 12| if
|
|
LL| 12| !
|
|
LL| 12| cond
|
|
LL| 4| {
|
|
LL| 4| println!("cond was false");
|
|
LL| 8| }
|
|
LL| |
|
|
LL| | if
|
|
LL| 12| !
|
|
LL| 12| cond
|
|
LL| 4| {
|
|
LL| 4| println!("cond was false");
|
|
LL| 8| }
|
|
LL| |
|
|
LL| | if
|
|
LL| 12| !
|
|
LL| 12| cond
|
|
LL| 4| {
|
|
LL| 4| println!("cond was false");
|
|
LL| 8| } else {
|
|
LL| 8| println!("cond was true");
|
|
LL| 8| }
|
|
LL| 12|}
|
|
LL| |
|
|
LL| |#[coverage(off)]
|
|
LL| |fn main() {
|
|
LL| | for _ in 0..8 {
|
|
LL| | if_not(std::hint::black_box(true));
|
|
LL| | }
|
|
LL| | for _ in 0..4 {
|
|
LL| | if_not(std::hint::black_box(false));
|
|
LL| | }
|
|
LL| |}
|
|
|