struct UnitStruct; struct TupleStruct(); struct BracedStruct{} enum E { UnitVariant, TupleVariant(), BracedVariant{}, } use E::*; const CONST: () = (); static STATIC: () = (); fn function() {} fn main() { let doesnt_matter = 0; match UnitStruct { UnitStruct => {} // OK, `UnitStruct` is a unit struct pattern } match doesnt_matter { TupleStruct => {} //~ ERROR match bindings cannot shadow tuple structs } match doesnt_matter { BracedStruct => {} // OK, `BracedStruct` is a fresh binding } match UnitVariant { //~ ERROR: `E::TupleVariant` and `E::BracedVariant { }` not covered UnitVariant => {} // OK, `UnitVariant` is a unit variant pattern } match doesnt_matter { TupleVariant => {} //~ ERROR match bindings cannot shadow tuple variants } match doesnt_matter { BracedVariant => {} // OK, `BracedVariant` is a fresh binding } match CONST { CONST => {} // OK, `CONST` is a const pattern } match doesnt_matter { STATIC => {} //~ ERROR match bindings cannot shadow statics } match doesnt_matter { function => {} // OK, `function` is a fresh binding } let UnitStruct = UnitStruct; // OK, `UnitStruct` is a unit struct pattern let TupleStruct = doesnt_matter; //~ ERROR let bindings cannot shadow tuple structs let BracedStruct = doesnt_matter; // OK, `BracedStruct` is a fresh binding let UnitVariant = UnitVariant; //~ ERROR: refutable pattern in local binding let TupleVariant = doesnt_matter; //~ ERROR let bindings cannot shadow tuple variants let BracedVariant = doesnt_matter; // OK, `BracedVariant` is a fresh binding let CONST = CONST; // OK, `CONST` is a const pattern let STATIC = doesnt_matter; //~ ERROR let bindings cannot shadow statics let function = doesnt_matter; // OK, `function` is a fresh binding }