mirror of https://github.com/rust-lang/rust
46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
// 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;
|
|
|
|
use unstable::{OnlyUnstableEnum, OnlyUnstableStruct, UnstableEnum, UnstableStruct};
|
|
|
|
fn main() {
|
|
// OK: this matches all the stable variants
|
|
#[deny(non_exhaustive_omitted_patterns)]
|
|
match UnstableEnum::Stable {
|
|
UnstableEnum::Stable => {}
|
|
UnstableEnum::Stable2 => {}
|
|
_ => {}
|
|
}
|
|
|
|
#[deny(non_exhaustive_omitted_patterns)]
|
|
match UnstableEnum::Stable {
|
|
//~^ some variants are not matched explicitly
|
|
UnstableEnum::Stable => {}
|
|
_ => {}
|
|
}
|
|
|
|
// 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() {
|
|
_ => {}
|
|
}
|
|
|
|
// 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();
|
|
}
|