// Test the "defined here" and "not covered" diagnostic hints. // We also make sure that references are peeled off from the scrutinee type // so that the diagnostics work better with default binding modes. #[derive(Clone)] enum E { //~^ `E` defined here //~| `E` defined here //~| `E` defined here //~| `E` defined here //~| `E` defined here //~| `E` defined here A, B, //~^ not covered //~| not covered //~| not covered C //~^ not covered //~| not covered //~| not covered } fn by_val(e: E) { let e1 = e.clone(); match e1 { //~ ERROR non-exhaustive patterns: `B` and `C` not covered E::A => {} } let E::A = e; //~ ERROR refutable pattern in local binding: `B` not covered } fn by_ref_once(e: &E) { match e { //~ ERROR non-exhaustive patterns: `&B` and `&C` not covered E::A => {} } let E::A = e; //~ ERROR refutable pattern in local binding: `&B` not covered } fn by_ref_thrice(e: & &mut &E) { match e { //~ ERROR non-exhaustive patterns: `&&mut &B` and `&&mut &C` not covered E::A => {} } let E::A = e; //~ ERROR refutable pattern in local binding: `&&mut &B` not covered } enum Opt { //~^ `Opt` defined here //~| `Opt` defined here Some(u8), None, //~^ not covered } fn ref_pat(e: Opt) { match e {//~ ERROR non-exhaustive patterns: `None` not covered Opt::Some(ref _x) => {} } let Opt::Some(ref _x) = e; //~ ERROR refutable pattern in local binding: `None` not covered } fn main() {}