rust/tests/coverage/bad_counter_ids.rs
Zalathar c9c049b2b4 coverage: Use normal edition: headers in coverage tests
Some of these tests were originally written as part of a custom `run-make`
test, so at that time they weren't able to use the normal compiletest header
directive parser.

Now that they're properly integrated, there's no need for them to use
`compile-flags` to specify the edition, since they can use `edition` instead.
2024-02-02 11:17:05 +11:00

68 lines
1.5 KiB
Rust

#![feature(coverage_attribute)]
// edition: 2021
// compile-flags: -Copt-level=0 -Zmir-opt-level=3
// Regression test for <https://github.com/rust-lang/rust/issues/117012>.
//
// If some coverage counters were removed by MIR optimizations, we need to take
// care not to refer to those counter IDs in coverage mappings, and instead
// replace them with a constant zero value. If we don't, `llvm-cov` might see
// a too-large counter ID and silently discard the entire function from its
// coverage reports.
#[derive(Debug, PartialEq, Eq)]
struct Foo(u32);
fn eq_good() {
println!("a");
assert_eq!(Foo(1), Foo(1));
}
fn eq_good_message() {
println!("b");
assert_eq!(Foo(1), Foo(1), "message b");
}
fn ne_good() {
println!("c");
assert_ne!(Foo(1), Foo(3));
}
fn ne_good_message() {
println!("d");
assert_ne!(Foo(1), Foo(3), "message d");
}
fn eq_bad() {
println!("e");
assert_eq!(Foo(1), Foo(3));
}
fn eq_bad_message() {
println!("f");
assert_eq!(Foo(1), Foo(3), "message f");
}
fn ne_bad() {
println!("g");
assert_ne!(Foo(1), Foo(1));
}
fn ne_bad_message() {
println!("h");
assert_ne!(Foo(1), Foo(1), "message h");
}
#[coverage(off)]
fn main() {
eq_good();
eq_good_message();
ne_good();
ne_good_message();
assert!(std::panic::catch_unwind(eq_bad).is_err());
assert!(std::panic::catch_unwind(eq_bad_message).is_err());
assert!(std::panic::catch_unwind(ne_bad).is_err());
assert!(std::panic::catch_unwind(ne_bad_message).is_err());
}