| //@ aux-build:match_non_exhaustive_lib.rs |
| |
| /* The error message for non-exhaustive matches on non-local enums |
| * marked as non-exhaustive should mention the fact that the enum |
| * is marked as non-exhaustive (issue #85227). |
| */ |
| |
| // Ignore non_exhaustive in the same crate |
| #[non_exhaustive] |
| enum L { A, B } |
| |
| extern crate match_non_exhaustive_lib; |
| use match_non_exhaustive_lib::{E1, E2}; |
| |
| fn foo() -> L {todo!()} |
| fn bar() -> (E1, E2) {todo!()} |
| |
| fn main() { |
| let l = foo(); |
| // No error for enums defined in this crate |
| match l { L::A => (), L::B => () }; |
| // (except if the match is already non-exhaustive) |
| match l { L::A => () }; |
| //~^ ERROR: non-exhaustive patterns: `L::B` not covered [E0004] |
| |
| // E1 is not visibly uninhabited from here |
| let (e1, e2) = bar(); |
| match e1 {}; |
| //~^ ERROR: non-exhaustive patterns: type `E1` is non-empty [E0004] |
| match e2 { E2::A => (), E2::B => () }; |
| //~^ ERROR: non-exhaustive patterns: `_` not covered [E0004] |
| } |