//! 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)] #![expect(incomplete_features)] #![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 } }