diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs index 0c919daa8ed11..40703049cc3ac 100644 --- a/src/libsyntax/parse/attr.rs +++ b/src/libsyntax/parse/attr.rs @@ -212,7 +212,7 @@ impl<'a> ParserAttr for Parser<'a> { fn parse_meta_seq(&mut self) -> Vec
> {
self.parse_seq(&token::OpenDelim(token::Paren),
&token::CloseDelim(token::Paren),
- seq_sep_trailing_disallowed(token::Comma),
+ seq_sep_trailing_allowed(token::Comma),
|p| p.parse_meta_item()).node
}
diff --git a/src/libsyntax/parse/common.rs b/src/libsyntax/parse/common.rs
index 3842170d67777..a96bf1ce10b79 100644
--- a/src/libsyntax/parse/common.rs
+++ b/src/libsyntax/parse/common.rs
@@ -19,18 +19,13 @@ pub struct SeqSep {
pub trailing_sep_allowed: bool
}
-pub fn seq_sep_trailing_disallowed(t: token::Token) -> SeqSep {
- SeqSep {
- sep: Some(t),
- trailing_sep_allowed: false,
- }
-}
pub fn seq_sep_trailing_allowed(t: token::Token) -> SeqSep {
SeqSep {
sep: Some(t),
trailing_sep_allowed: true,
}
}
+
pub fn seq_sep_none() -> SeqSep {
SeqSep {
sep: None,
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 447f2a376e15a..9623a1b75b56a 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -3129,6 +3129,11 @@ impl<'a> Parser<'a> {
first = false;
} else {
self.expect(&token::Comma);
+
+ if self.token == token::CloseDelim(token::Bracket)
+ && (before_slice || after.len() != 0) {
+ break
+ }
}
if before_slice {
diff --git a/src/test/compile-fail/trailing-comma-array-repeat.rs b/src/test/compile-fail/trailing-comma-array-repeat.rs
new file mode 100644
index 0000000000000..dadd657158384
--- /dev/null
+++ b/src/test/compile-fail/trailing-comma-array-repeat.rs
@@ -0,0 +1,13 @@
+// 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