On 12/01/2015 06:40 AM, Thomas Schwinge wrote:
> I noticed while working on other test cases:
>
> On Wed, 18 Nov 2015 11:02:01 -0800, Cesar Philippidis
> <[email protected]> wrote:
>> --- a/gcc/cp/parser.c
>> +++ b/gcc/cp/parser.c
>
>> @@ -1318,13 +1318,21 @@ cp_finalize_omp_declare_simd (cp_parser *parser,
>> tree fndecl)
>> }
>> }
>>
>> -/* Diagnose if #pragma omp routine isn't followed immediately
>> - by function declaration or definition. */
>> +/* Diagnose if #pragma acc routine isn't followed immediately by function
>> + declaration or definition. */
>>
>> static inline void
>> cp_ensure_no_oacc_routine (cp_parser *parser)
>> {
>> - cp_finalize_oacc_routine (parser, NULL_TREE, false, true);
>> + if (parser->oacc_routine && !parser->oacc_routine->error_seen)
>> + {
>> + tree clauses = parser->oacc_routine->clauses;
>> + location_t loc = OMP_CLAUSE_LOCATION (TREE_PURPOSE(clauses));
>> +
>> + error_at (loc, "%<#pragma oacc routine%> not followed by function "
>> + "declaration or definition");
>> + parser->oacc_routine = NULL;
>> + }
>> }
>
> "#pragma acc routine", not "oacc". Also in a few other places.
Good eyes. Thanks for catching that.
> Next, in the function quoted above, you use "not followed by function
> declaration or definition", but you use "not followed by a single
> function declaration or definition" in a lot of (but not all) other
> places -- is that intentional?
I probably wasn't being consistent. Which error message do you prefer?
I'll take a look at what the c front end does.
> For example:
>
>> cp_parser_oacc_routine (cp_parser *parser, cp_token *pragma_tok,
>> enum pragma_context context)
>> {
>> [...]
>> + error_at (OMP_CLAUSE_LOCATION (parser->oacc_routine->clauses),
>> + "%<#pragma oacc routine%> not followed by a single "
>> + "function declaration or definition");
>
> "a single".
>
>> [...]
>> + if (parser->oacc_routine
>> + && !parser->oacc_routine->error_seen
>> + && !parser->oacc_routine->fndecl_seen)
>> + error_at (loc, "%<#pragma acc routine%> not followed by "
>> + "function declaration or definition");
>
> Not "a single".
>
>> +
>> + data.tokens.release ();
>> + parser->oacc_routine = NULL;
>> + }
>> + }
>> +}
>> +
>> +/* Finalize #pragma acc routine clauses after direct declarator has
>> + been parsed, and put that into "oacc routine" attribute. */
>
> There is no "oacc routine" attribute (anymore)?
You're right, it was renamed to 'oacc function'.
>> +static tree
>> +cp_parser_late_parsing_oacc_routine (cp_parser *parser, tree attrs)
>> +{
>> [...]
>> + if ((!data->error_seen && data->fndecl_seen)
>> + || data->tokens.length () != 1)
>> + {
>> + error_at (loc, "%<#pragma oacc routine%> not followed by a single "
>> + "function declaration or definition");
>
> "a single".
>
> (I have not verified all of the parser(s) source code.)
Thanks. I'll go through and update the comments and error messages.
Cesar