re PR c++/55368 (Comma before semicolon in struct definition is not rejected)
authorPaolo Carlini <paolo@gcc.gnu.org>
Mon, 19 Nov 2012 14:41:26 +0000 (14:41 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 19 Nov 2012 14:41:26 +0000 (14:41 +0000)
/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

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/struct-5.C [new file with mode: 0644]

index 06eec9584ec1d97d8e27a7b399bbb72071df79f3..0e1be07152e294f3e9a9bd9db3c23e630c441057 100644 (file)
@@ -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.
index 9650351580a58a261f66d1e3abc56b68c739a5f8..a2d8062d7eb0dfc3a8f7364225e1599b04213422 100644 (file)
@@ -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))
index 636de23d019e140782c8361bb7f7e87f9efec362..68d9738bbb6e6e91f4b475519310231a4cee8736 100644 (file)
@@ -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 (file)
index 0000000..4cd1b5d
--- /dev/null
@@ -0,0 +1,3 @@
+// PR c++/55368
+
+struct A { struct B *C,; };  // { dg-error "stray" }