diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2012-11-19 14:41:26 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2012-11-19 14:41:26 +0000 |
commit | 37f458dc1ef3aa85ee5ff07cec12531d17dda8be (patch) | |
tree | 5635bce9e4cf62c03e4cfaccd2e106bb27d5de32 | |
parent | e252e96aae2161af2838e993ea2373c91436aaa3 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/struct-5.C | 3 |
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" } |