//@ revisions: or1 or3 or4 //@ [or1] run-pass #![allow(unreachable_patterns)] #![allow(unused_variables)] #![allow(unused_parens)] #![allow(dead_code)] fn foo() { let x = "foo"; match x { x @ ((("h" | "ho" | "yo" | ("dude" | "w")) | "no" | "nop") | ("hey" | "gg")) | x @ ("black" | "pink") | x @ ("red" | "blue") => { } _ => (), } } fn bar() { let x = "foo"; match x { x @ ("foo" | "bar") | (x @ "red" | (x @ "blue" | x @ "red")) => { } _ => (), } } #[cfg(or3)] fn zot() { let x = "foo"; match x { x @ ((("h" | "ho" | "yo" | ("dude" | "w")) | () | "nop") | ("hey" | "gg")) | //[or3]~^ ERROR mismatched types x @ ("black" | "pink") | x @ ("red" | "blue") => { } _ => (), } } #[cfg(or4)] fn hey() { let x = "foo"; match x { x @ ("foo" | "bar") | (x @ "red" | (x @ "blue" | "red")) => { //[or4]~^ variable `x` is not bound in all patterns } _ => (), } } fn don() { enum Foo { A, B, C, } match Foo::A { | _foo @ (Foo::A | Foo::B) => {} Foo::C => {} }; } fn main(){}