From 383da0a414b1e3a10d798f68746ce8080e06cccf Mon Sep 17 00:00:00 2001 From: giovannibajo Date: Thu, 19 Feb 2004 03:06:09 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78067 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/parser.c | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4815fe6..e0cd765 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2004-02-19 Giovanni Bajo + + 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 * cp-tree.def, cvt.c: Update copyright. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 7918602..3d6efe1 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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 -- 2.7.4