re PR c++/24907 ("int x, ;" accepted)

2005-12-13  Petr Machata  <machata@post.cz>

	PR c++/24907
	* parser.c (cp_parser_simple_declaration): Require comma at the
	beginning of processing second and later declarators, instead of
	allowing the comma at the end of each iteration.

	* g++.dg/parse/comma2.C: New test.

From-SVN: r108462
This commit is contained in:
Petr Machata 2005-12-13 09:01:53 +01:00 committed by Jakub Jelinek
parent 7e825da03e
commit 6d32822515
4 changed files with 42 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2005-12-13 Petr Machata <machata@post.cz>
PR c++/24907
* parser.c (cp_parser_simple_declaration): Require comma at the
beginning of processing second and later declarators, instead of
allowing the comma at the end of each iteration.
2005-12-12 Mark Mitchell <mark@codesourcery.com>
PR c++/25300

View File

@ -7145,7 +7145,16 @@ cp_parser_simple_declaration (cp_parser* parser,
bool function_definition_p;
tree decl;
saw_declarator = true;
if (saw_declarator)
{
/* If we are processing next declarator, coma is expected */
token = cp_lexer_peek_token (parser->lexer);
gcc_assert (token->type == CPP_COMMA);
cp_lexer_consume_token (parser->lexer);
}
else
saw_declarator = true;
/* Parse the init-declarator. */
decl = cp_parser_init_declarator (parser, &decl_specifiers,
function_definition_allowed_p,
@ -7180,7 +7189,7 @@ cp_parser_simple_declaration (cp_parser* parser,
token = cp_lexer_peek_token (parser->lexer);
/* If it's a `,', there are more declarators to come. */
if (token->type == CPP_COMMA)
cp_lexer_consume_token (parser->lexer);
/* will be consumed next time around */;
/* If it's a `;', we are done. */
else if (token->type == CPP_SEMICOLON)
break;

View File

@ -1,3 +1,8 @@
2005-12-13 Petr Machata <machata@post.cz>
PR c++/24907
* g++.dg/parse/comma2.C: New test.
2005-12-13 Mark Mitchell <mark@codesourcery.com>
Jakub Jelinek <jakub@redhat.com>

View File

@ -0,0 +1,19 @@
// { dg-do compile }
// Copyright (C) 2005 Free Software Foundation, Inc.
// PR c++/24907 [3.4/4.0/4.1/4.2 Regression] "int x, ;" accepted
int x;
int y,; /* { dg-error "expected" } */
int main()
{
int a;
int b,; /* { dg-error "expected" } */
int c,d;
int e,f,; /* { dg-error "expected" } */
int g,h,i;
int j,k,l,;/* { dg-error "expected" } */
int m,,,n; /* { dg-error "expected" } */
}