mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-15 12:39:31 +03:00
48 lines
1.2 KiB
Rust
48 lines
1.2 KiB
Rust
//! 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
|
|
}
|
|
}
|