From 063e900f40733fbc05ce229de4f1dbd6d5c14340 Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Thu, 19 Feb 2004 03:06:09 +0000 Subject: [PATCH] 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 --- 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 4815fe6a54e..e0cd7650aeb 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 7918602dee3..3d6efe15679 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