// Here we test that `..` is allowed in all pattern locations *syntactically*. // The semantic test is in `rest-pat-semantic-disallowed.rs`. //@ check-pass fn main() {} macro_rules! accept_pat { ($p:pat) => {} } accept_pat!(..); #[cfg(FALSE)] fn rest_patterns() { // Top level: fn foo(..: u8) {} let ..; // Box patterns: let box ..; //~^ WARN box pattern syntax is experimental //~| WARN unstable syntax // In or-patterns: match x { .. | .. => {} } // Ref patterns: let &..; let &mut ..; // Ident patterns: let x @ ..; let ref x @ ..; let ref mut x @ ..; // Tuple: let (..); // This is interpreted as a tuple pattern, not a parenthesis one. let (..,); // Allowing trailing comma. let (.., .., ..); // Duplicates also. let (.., P, ..); // Including with things in between. // Tuple struct (same idea as for tuple patterns): let A(..); let A(..,); let A(.., .., ..); let A(.., P, ..); // Array/Slice (like with tuple patterns): let [..]; let [..,]; let [.., .., ..]; let [.., P, ..]; // Random walk to guard against special casing: match x { .. | [ ( box .., //~ WARN box pattern syntax is experimental &(..), &mut .., x @ .. ), ref x @ .., ] | ref mut x @ .. => {} } //~| WARN unstable syntax }