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 >> <paolo.carl...@oracle.com> wrote: >>> >>> 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 > formed expression?!?
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". Also, "here" in the diagnostic seems unnecessarily vague; we could be more specific. Maybe "condition declares a function/array"? Jason