re PR c++/14181 (Cryptic error message for code that compiled without warnings in 3.3.x)

PR c++/14181
	* parser.c (cp_parser_new_expression): Parse an ill-formed
	direct-new-declarator after a parenthesized type-id to emit good
	diagnostic.

From-SVN: r78067
This commit is contained in:
Giovanni Bajo 2004-02-19 03:06:09 +00:00
parent d63d3c7c2e
commit 063e900f40
2 changed files with 16 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2004-02-19 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/14181
* parser.c (cp_parser_new_expression): Parse an ill-formed
direct-new-declarator after a parenthesized type-id to emit good
diagnostic.
2004-02-18 Kazu Hirata <kazu@cs.umass.edu>
* cp-tree.def, cvt.c: Update copyright.

View File

@ -4531,6 +4531,15 @@ cp_parser_new_expression (cp_parser* parser)
type = cp_parser_type_id (parser);
/* Look for the closing `)'. */
cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
/* There should not be a direct-new-declarator in this production,
but GCC used to allowed this, so we check and emit a sensible error
message for this case. */
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
{
error ("array bound forbidden after parenthesized type-id");
inform ("try removing the parentheses around the type-id");
cp_parser_direct_new_declarator (parser);
}
}
/* Otherwise, there must be a new-type-id. */
else