| //! Test matches with a mix of ADT constructors and deref patterns. Currently, usefulness analysis | |
| //! doesn't support this, so make sure we catch it beforehand. As a consequence, it takes priority | |
| //! over non-exhaustive match and unreachable pattern errors. | |
| #![feature(deref_patterns)] | |
| #![deny(unreachable_patterns)] | |
| use std::borrow::Cow; | |
| fn main() { | |
| let cow: Cow<'static, bool> = Cow::Borrowed(&false); | |
| match cow { | |
| true => {} | |
| //~v ERROR mix of deref patterns and normal constructors | |
| false => {} | |
| Cow::Borrowed(_) => {} | |
| } | |
| match cow { | |
| Cow::Owned(_) => {} | |
| Cow::Borrowed(_) => {} | |
| true => {} | |
| //~^ ERROR mix of deref patterns and normal constructors | |
| } | |
| match cow { | |
| _ => {} | |
| Cow::Owned(_) => {} | |
| false => {} | |
| //~^ ERROR mix of deref patterns and normal constructors | |
| } | |
| match (cow, 0) { | |
| (Cow::Owned(_), 0) => {} | |
| (Cow::Borrowed(_), 0) => {} | |
| (true, 0) => {} | |
| //~^ ERROR mix of deref patterns and normal constructors | |
| } | |
| match (0, cow) { | |
| (0, Cow::Owned(_)) => {} | |
| (0, Cow::Borrowed(_)) => {} | |
| _ => {} | |
| (1, true) => {} | |
| //~^ ERROR mix of deref patterns and normal constructors | |
| } | |
| } |