| //@ revisions: normal exhaustive_patterns | |
| #![cfg_attr(exhaustive_patterns, feature(exhaustive_patterns))] | |
| #![feature(never_type)] | |
| mod foo { | |
| pub struct SecretlyEmpty { | |
| _priv: !, | |
| } | |
| pub struct NotSoSecretlyEmpty { | |
| pub _pub: !, | |
| } | |
| } | |
| struct NotSoSecretlyEmpty { | |
| _priv: !, | |
| } | |
| enum Foo { | |
| //~^ NOTE `Foo` defined here | |
| A(foo::SecretlyEmpty), | |
| //~^ NOTE not covered | |
| B(foo::NotSoSecretlyEmpty), | |
| C(NotSoSecretlyEmpty), | |
| D(u32, u32), | |
| } | |
| fn main() { | |
| let x: Foo = Foo::D(123, 456); | |
| let Foo::D(_y, _z) = x; | |
| //~^ ERROR refutable pattern in local binding | |
| //~| `Foo::A(_)` not covered | |
| //~| NOTE `let` bindings require an "irrefutable pattern" | |
| //~| NOTE for more information | |
| //~| NOTE pattern `Foo::A(_)` is currently uninhabited | |
| //~| NOTE the matched value is of type `Foo` | |
| //~| HELP you might want to use `let else` | |
| } |