[1/2] OpenACC routine support

Thomas Schwinge thomas@codesourcery.com
Tue Dec 1 14:40:00 GMT 2015


Hi Cesar!

I noticed while working on other test cases:

On Wed, 18 Nov 2015 11:02:01 -0800, Cesar Philippidis <cesar@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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20151201/cc82ada6/attachment.sig>


More information about the Gcc-patches mailing list