aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2012-11-19 14:41:26 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2012-11-19 14:41:26 +0000
commit37f458dc1ef3aa85ee5ff07cec12531d17dda8be (patch)
tree5635bce9e4cf62c03e4cfaccd2e106bb27d5de32
parente252e96aae2161af2838e993ea2373c91436aaa3 (diff)
downloadgcc-37f458dc1ef3aa85ee5ff07cec12531d17dda8be.zip
gcc-37f458dc1ef3aa85ee5ff07cec12531d17dda8be.tar.gz
gcc-37f458dc1ef3aa85ee5ff07cec12531d17dda8be.tar.bz2
re PR c++/55368 (Comma before semicolon in struct definition is not rejected)
/cp 2012-11-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/55368 * parser.c (cp_parser_member_declaration): Emit an error in case of stray comma at end of member declaration. /testsuite 2012-11-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/55368 * g++.dg/parse/struct-5.C: New. From-SVN: r193624
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c10
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/g++.dg/parse/struct-5.C3
4 files changed, 25 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 06eec95..0e1be07 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2012-11-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/55368
+ * parser.c (cp_parser_member_declaration): Emit an error in case
+ of stray comma at end of member declaration.
+
2012-11-19 Jason Merrill <jason@redhat.com>
* class.c (one_inheriting_sig): Don't inherit base copy ctors.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 9650351..a2d8062 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -19407,7 +19407,15 @@ cp_parser_member_declaration (cp_parser* parser)
parser->object_scope = NULL_TREE;
/* If it's a `,', then there are more declarators. */
if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
- cp_lexer_consume_token (parser->lexer);
+ {
+ cp_lexer_consume_token (parser->lexer);
+ if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
+ {
+ cp_token *token = cp_lexer_previous_token (parser->lexer);
+ error_at (token->location,
+ "stray %<,%> at end of member declaration");
+ }
+ }
/* If the next token isn't a `;', then we have a parse error. */
else if (cp_lexer_next_token_is_not (parser->lexer,
CPP_SEMICOLON))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 636de23..68d9738 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-11-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/55368
+ * g++.dg/parse/struct-5.C: New.
+
2012-11-19 Tom de Vries <tom@codesourcery.com>
PR rtl-optimization/55315
@@ -13,8 +18,8 @@
-[2, 2] and -[3, 3] and -[4, 4] range tests together.
* lib/asan-dg.exp (asan_symbolize): Prune BFD: prefixed error messages
- from addr2line_output. Increment idx if asking for more than one address
- in one object.
+ from addr2line_output. Increment idx if asking for more than one
+ address in one object.
2012-11-16 Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/g++.dg/parse/struct-5.C b/gcc/testsuite/g++.dg/parse/struct-5.C
new file mode 100644
index 0000000..4cd1b5d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/struct-5.C
@@ -0,0 +1,3 @@
+// PR c++/55368
+
+struct A { struct B *C,; }; // { dg-error "stray" }