Hi Cesar!

I noticed while working on other test cases:

On Wed, 18 Nov 2015 11:02:01 -0800, Cesar Philippidis <ce...@codesourcery.com> 
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.

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?

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)?

> +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.)


Grüße
 Thomas

Attachment: signature.asc
Description: PGP signature

Reply via email to