On 18/05/2018 01:21, Jason Merrill wrote:
Uhm, then you are saying that we should fix cp_parser_declarator itself,
right? Because we don't want cp_parser_parse_definitely returning false
after cp_parser_declarator parses, say, 'if (int foo())' and therefore
cp_parser_condition proceed with cp_parser_expression, we want to emit
our error and bail out. Therefore the problem in the new patch seems
that it tries to paper over that cp_parser_declarator issue in the
caller?!? Like, Ok, cp_parser_declarator failed, but it was anyway
trying to declare a function / array and that can't possibly be an
expression, see what I mean? *Somehow*, the question you answered above.
On Thu, May 17, 2018 at 5:54 PM, Paolo Carlini <paolo.carl...@oracle.com> wrote:
On 17/05/2018 16:58, Jason Merrill wrote:
On Thu, May 17, 2018 at 10:27 AM, Paolo Carlini
PS: maybe better using function_declarator_p?
I think so, yes. The relevant rule seems to be "The declarator shall
not specify a function or an array.", so let's check for arrays, too.
Agreed. I had the amended patch ready when I noticed (again) that it wasn't
addressing another related class of issues which involves declarators not
followed by initializers. Thus I tried to fix those too, and the below which
moves the check up appears to work fine, passes testing, etc. Are there any
risks that an erroneous function / array as declarator is in fact a well
That doesn't matter; if it parses as a declarator, it's a declarator,
even if it's an ill-formed declarator. But...
+ bool decl_p = cp_parser_parse_definitely (parser);
+ if (!cp_parser_check_condition_declarator (parser, declarator, loc))
+ return error_mark_node;
...if cp_parser_parse_definitely returns false, parsing as a
declarator failed, so we shouldn't look at "declarator".