2021-09-18 15:52:43 -05:00
|
|
|
// Test that the `non_exhaustive_omitted_patterns` lint is triggered correctly with variants
|
|
|
|
// marked stable and unstable.
|
|
|
|
|
|
|
|
#![feature(non_exhaustive_omitted_patterns_lint)]
|
|
|
|
|
|
|
|
// aux-build:unstable.rs
|
|
|
|
extern crate unstable;
|
|
|
|
|
2021-10-27 19:29:53 -05:00
|
|
|
use unstable::{UnstableEnum, OnlyUnstableEnum, UnstableStruct, OnlyUnstableStruct};
|
2021-09-18 15:52:43 -05:00
|
|
|
|
|
|
|
fn main() {
|
|
|
|
// OK: this matches all the stable variants
|
|
|
|
match UnstableEnum::Stable {
|
|
|
|
UnstableEnum::Stable => {}
|
|
|
|
UnstableEnum::Stable2 => {}
|
|
|
|
#[deny(non_exhaustive_omitted_patterns)]
|
|
|
|
_ => {}
|
|
|
|
}
|
|
|
|
|
|
|
|
match UnstableEnum::Stable {
|
|
|
|
UnstableEnum::Stable => {}
|
|
|
|
#[deny(non_exhaustive_omitted_patterns)]
|
|
|
|
_ => {}
|
|
|
|
}
|
|
|
|
//~^^ some variants are not matched explicitly
|
|
|
|
|
|
|
|
// Ok: although this is a bit odd, we don't have anything to report
|
|
|
|
// since there is no stable variants and the feature is off
|
|
|
|
#[deny(non_exhaustive_omitted_patterns)]
|
|
|
|
match OnlyUnstableEnum::new() {
|
|
|
|
_ => {}
|
|
|
|
}
|
2021-10-27 19:29:53 -05:00
|
|
|
|
|
|
|
// Ok: Same as the above enum (no fields can be matched on)
|
|
|
|
#[warn(non_exhaustive_omitted_patterns)]
|
|
|
|
let OnlyUnstableStruct { .. } = OnlyUnstableStruct::new();
|
|
|
|
|
|
|
|
#[warn(non_exhaustive_omitted_patterns)]
|
|
|
|
let UnstableStruct { stable, .. } = UnstableStruct::default();
|
|
|
|
//~^ some fields are not explicitly listed
|
|
|
|
|
|
|
|
// OK: stable field is matched
|
|
|
|
#[warn(non_exhaustive_omitted_patterns)]
|
|
|
|
let UnstableStruct { stable, stable2, .. } = UnstableStruct::default();
|
2021-09-18 15:52:43 -05:00
|
|
|
}
|