diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index f171e8279f4..1ef62cdf315 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3539,6 +3539,19 @@ impl<'a> Parser<'a> { self.bump(); pat = PatStruct(enum_path, fields, etc); } + token::DotDotDot => { + let hi = self.last_span.hi; + let start = self.mk_expr(lo, hi, ExprPath(enum_path)); + self.eat(&token::DotDotDot); + let end = if self.token.is_ident() || self.token.is_path() { + let path = self.parse_path(LifetimeAndTypesWithColons); + let hi = self.span.hi; + self.mk_expr(lo, hi, ExprPath(path)) + } else { + self.parse_literal_maybe_minus() + }; + pat = PatRange(start, end); + } _ => { let mut args: Vec
> = Vec::new();
match self.token {
diff --git a/src/test/run-pass/issue-21475.rs b/src/test/run-pass/issue-21475.rs
new file mode 100644
index 00000000000..b0f5fe628b0
--- /dev/null
+++ b/src/test/run-pass/issue-21475.rs
@@ -0,0 +1,26 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0