// Here we test that rest patterns, i.e. `..`, are not allowed // outside of slice (+ ident patterns witin those), tuple, // and tuple struct patterns and that duplicates are caught in these contexts. #![feature(box_patterns)] fn main() {} macro_rules! mk_pat { () => { .. } //~ ERROR `..` patterns are not allowed here } fn rest_patterns() { let mk_pat!(); // Top level: fn foo(..: u8) {} //~ ERROR `..` patterns are not allowed here let ..; //~ ERROR `..` patterns are not allowed here // Box patterns: let box ..; //~ ERROR `..` patterns are not allowed here // In or-patterns: match 1 { 1 | .. => {} //~ ERROR `..` patterns are not allowed here } // Ref patterns: let &..; //~ ERROR `..` patterns are not allowed here let &mut ..; //~ ERROR `..` patterns are not allowed here // Ident patterns: let x @ ..; //~ ERROR `..` patterns are not allowed here //~^ ERROR type annotations needed let ref x @ ..; //~ ERROR `..` patterns are not allowed here let ref mut x @ ..; //~ ERROR `..` patterns are not allowed here // Tuple: let (..): (u8,); // OK. let (..,): (u8,); // OK. let ( .., .., //~ ERROR `..` can only be used once per tuple pattern .. //~ ERROR `..` can only be used once per tuple pattern ): (u8, u8, u8); let ( .., x, .. //~ ERROR `..` can only be used once per tuple pattern ): (u8, u8, u8); struct A(u8, u8, u8); // Tuple struct (same idea as for tuple patterns): let A(..); // OK. let A(..,); // OK. let A( .., .., //~ ERROR `..` can only be used once per tuple struct pattern .. //~ ERROR `..` can only be used once per tuple struct pattern ); let A( .., x, .. //~ ERROR `..` can only be used once per tuple struct pattern ); // Array/Slice: let [..]: &[u8]; // OK. let [..,]: &[u8]; // OK. let [ .., .., //~ ERROR `..` can only be used once per slice pattern .. //~ ERROR `..` can only be used once per slice pattern ]: &[u8]; let [ .., ref x @ .., //~ ERROR `..` can only be used once per slice pattern ref mut y @ .., //~ ERROR `..` can only be used once per slice pattern (ref z @ ..), //~ ERROR `..` patterns are not allowed here .. //~ ERROR `..` can only be used once per slice pattern ]: &[u8]; }