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