From 37f458dc1ef3aa85ee5ff07cec12531d17dda8be Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Mon, 19 Nov 2012 14:41:26 +0000 Subject: [PATCH] re PR c++/55368 (Comma before semicolon in struct definition is not rejected) /cp 2012-11-19 Paolo Carlini 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 PR c++/55368 * g++.dg/parse/struct-5.C: New. From-SVN: r193624 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 10 +++++++++- gcc/testsuite/ChangeLog | 9 +++++++-- gcc/testsuite/g++.dg/parse/struct-5.C | 3 +++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/parse/struct-5.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 06eec9584ec..0e1be07152e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-11-19 Paolo Carlini + + 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 * class.c (one_inheriting_sig): Don't inherit base copy ctors. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 9650351580a..a2d8062d7eb 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 636de23d019..68d9738bbb6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-11-19 Paolo Carlini + + PR c++/55368 + * g++.dg/parse/struct-5.C: New. + 2012-11-19 Tom de Vries 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 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 00000000000..4cd1b5d33c3 --- /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" }