1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
//! 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
}
}
|