
For coverage tests, splitting code across multiple lines often makes the resulting coverage report easier to interpret, so we force rustfmt to retain line breaks by adding dummy line comments with `//`.
51 lines
1.4 KiB
Rust
51 lines
1.4 KiB
Rust
// This test confirms an earlier problem was resolved, supporting the MIR graph generated by the
|
|
// structure of this test.
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
|
pub struct Version {
|
|
major: usize,
|
|
minor: usize,
|
|
patch: usize,
|
|
}
|
|
|
|
impl Version {
|
|
pub fn new(major: usize, minor: usize, patch: usize) -> Self {
|
|
Self {
|
|
major,
|
|
minor,
|
|
patch,
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let version_3_2_1 = Version::new(3, 2, 1);
|
|
let version_3_3_0 = Version::new(3, 3, 0);
|
|
|
|
println!(
|
|
"{:?} < {:?} = {}",
|
|
version_3_2_1,
|
|
version_3_3_0,
|
|
version_3_2_1 < version_3_3_0, //
|
|
);
|
|
}
|
|
|
|
/*
|
|
|
|
This test verifies a bug was fixed that otherwise generated this error:
|
|
|
|
thread 'rustc' panicked at 'No counters provided the source_hash for function:
|
|
Instance {
|
|
def: Item(WithOptConstParam {
|
|
did: DefId(0:101 ~ autocfg[c44a]::version::{impl#2}::partial_cmp),
|
|
const_param_did: None
|
|
}),
|
|
args: []
|
|
}'
|
|
The `PartialOrd` derived by `Version` happened to generate a MIR that generated coverage
|
|
without a code region associated with any `Counter`. Code regions were associated with at least
|
|
one expression, which is allowed, but the `function_source_hash` was only passed to the codegen
|
|
(coverage mapgen) phase from a `Counter`s code region. A new method was added to pass the
|
|
`function_source_hash` without a code region, if necessary.
|
|
|
|
*/
|