[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