Hi! This patch should make life easier for the translators by emitting just one translatable message about pragmas only allowed in compound statements, instead of 13 different ones. In addition to that it stops using c*_parser_error for that, both so that the msgid can use %s and to avoid nonsensical printing pragma ... may only be used in compound statements before _Pragma Lastly, PRAGMA_OACC_WAIT used to print acc enter data in C.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk. 2017-03-07 Jakub Jelinek <ja...@redhat.com> PR c/79834 c/ * c-parser.c (c_parser_pragma): Use error_at instead of c_parser_error for "may only be used in compound statements" diagnostics, change it such that the same translatable string is used for all pragmas. For PRAGMA_OACC_WAIT use "acc wait" rather than "acc enter data" in the diagnostics. (c_parser_omp_cancellation_point, c_parser_omp_target_update, c_parser_omp_target_enter_data, c_parser_omp_target_exit_data): Change "may only be used in compound statements" diagnostics, such that the same translatable string is used for all pragmas. cp/ * parser.c (cp_parser_omp_cancellation_point, cp_parser_omp_target_enter_data, cp_parser_omp_target_exit_data, cp_parser_omp_target_update): Change "may only be used in compound statements" diagnostics, such that the same translatable string is used for all pragmas. (cp_parser_pragma): Likewise. Use error_at instead of cp_parser_error for that diagnostics. testsuite/ * c-c++-common/goacc/pragma_context.c (f2): Adjust expected diagnostics. --- gcc/c/c-parser.c.jj 2017-03-03 21:13:35.000000000 +0100 +++ gcc/c/c-parser.c 2017-03-07 15:16:47.904751884 +0100 @@ -10157,6 +10157,7 @@ static bool c_parser_pragma (c_parser *parser, enum pragma_context context, bool *if_p) { unsigned int id; + const char *construct = NULL; id = c_parser_peek_token (parser)->pragma_kind; gcc_assert (id != PRAGMA_NONE); @@ -10170,9 +10171,16 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OACC_ENTER_DATA: if (context != pragma_compound) { + construct = "acc enter data"; + in_compound: if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma acc enter data%> may only be " - "used in compound statements"); + { + error_at (c_parser_peek_token (parser)->location, + "%<#pragma %s%> may only be used in compound " + "statements", construct); + c_parser_skip_until_found (parser, CPP_PRAGMA_EOL, NULL); + return false; + } goto bad_stmt; } c_parser_oacc_enter_exit_data (parser, true); @@ -10181,10 +10189,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OACC_EXIT_DATA: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma acc exit data%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "acc exit data"; + goto in_compound; } c_parser_oacc_enter_exit_data (parser, false); return false; @@ -10203,10 +10209,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OACC_UPDATE: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma acc update%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "acc update"; + goto in_compound; } c_parser_oacc_update (parser); return false; @@ -10214,10 +10218,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OMP_BARRIER: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma omp barrier%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "omp barrier"; + goto in_compound; } c_parser_omp_barrier (parser); return false; @@ -10225,10 +10227,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OMP_FLUSH: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma omp flush%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "omp flush"; + goto in_compound; } c_parser_omp_flush (parser); return false; @@ -10236,10 +10236,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OMP_TASKWAIT: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma omp taskwait%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "omp taskwait"; + goto in_compound; } c_parser_omp_taskwait (parser); return false; @@ -10247,10 +10245,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OMP_TASKYIELD: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma omp taskyield%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "omp taskyield"; + goto in_compound; } c_parser_omp_taskyield (parser); return false; @@ -10258,10 +10254,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OMP_CANCEL: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma omp cancel%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "omp cancel"; + goto in_compound; } c_parser_omp_cancel (parser); return false; @@ -10345,10 +10339,8 @@ c_parser_pragma (c_parser *parser, enum case PRAGMA_OACC_WAIT: if (context != pragma_compound) { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma acc enter data%> may only be " - "used in compound statements"); - goto bad_stmt; + construct = "acc wait"; + goto in_compound; } /* FALL THROUGH. */ @@ -15864,8 +15856,9 @@ c_parser_omp_cancellation_point (c_parse if (context != pragma_compound) { if (context == pragma_stmt) - error_at (loc, "%<#pragma omp cancellation point%> may only be used in" - " compound statements"); + error_at (loc, + "%<#pragma %s%> may only be used in compound statements", + "omp cancellation point"); else c_parser_error (parser, "expected declaration specifiers"); c_parser_skip_to_pragma_eol (parser, false); @@ -16122,9 +16115,8 @@ c_parser_omp_target_update (location_t l { if (context == pragma_stmt) { - error_at (loc, - "%<#pragma omp target update%> may only be " - "used in compound statements"); + error_at (loc, "%<#pragma %s%> may only be used in compound statements", + "omp target update"); c_parser_skip_to_pragma_eol (parser, false); return false; } @@ -16182,9 +16174,8 @@ c_parser_omp_target_enter_data (location if (context == pragma_stmt) { - error_at (loc, - "%<#pragma omp target enter data%> may only be " - "used in compound statements"); + error_at (loc, "%<#pragma %s%> may only be used in compound statements", + "omp target enter data"); c_parser_skip_to_pragma_eol (parser, false); return NULL_TREE; } @@ -16267,9 +16258,8 @@ c_parser_omp_target_exit_data (location_ if (context == pragma_stmt) { - error_at (loc, - "%<#pragma omp target exit data%> may only be " - "used in compound statements"); + error_at (loc, "%<#pragma %s%> may only be used in compound statements", + "omp target exit data"); c_parser_skip_to_pragma_eol (parser, false); return NULL_TREE; } --- gcc/cp/parser.c.jj 2017-03-06 16:40:19.000000000 +0100 +++ gcc/cp/parser.c 2017-03-07 14:59:12.052742635 +0100 @@ -35341,8 +35341,8 @@ cp_parser_omp_cancellation_point (cp_par { if (context == pragma_stmt) error_at (pragma_tok->location, - "%<#pragma omp cancellation point%> may only be used in" - " compound statements"); + "%<#pragma %s%> may only be used in compound statements", + "omp cancellation point"); else cp_parser_error (parser, "expected declaration specifiers"); cp_parser_skip_to_pragma_eol (parser, pragma_tok); @@ -35635,8 +35635,8 @@ cp_parser_omp_target_enter_data (cp_pars if (context == pragma_stmt) { error_at (pragma_tok->location, - "%<#pragma omp target enter data%> may only be " - "used in compound statements"); + "%<#pragma %s%> may only be used in compound statements", + "omp target enter data"); cp_parser_skip_to_pragma_eol (parser, pragma_tok); return NULL_TREE; } @@ -35723,8 +35723,8 @@ cp_parser_omp_target_exit_data (cp_parse if (context == pragma_stmt) { error_at (pragma_tok->location, - "%<#pragma omp target exit data%> may only be " - "used in compound statements"); + "%<#pragma %s%> may only be used in compound statements", + "omp target exit data"); cp_parser_skip_to_pragma_eol (parser, pragma_tok); return NULL_TREE; } @@ -35794,8 +35794,8 @@ cp_parser_omp_target_update (cp_parser * if (context == pragma_stmt) { error_at (pragma_tok->location, - "%<#pragma omp target update%> may only be " - "used in compound statements"); + "%<#pragma %s%> may only be used in compound statements", + "omp target update"); cp_parser_skip_to_pragma_eol (parser, pragma_tok); return false; } @@ -38105,8 +38105,8 @@ cp_parser_pragma (cp_parser *parser, enu cp_parser_omp_barrier (parser, pragma_tok); return false; case pragma_stmt: - error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be " - "used in compound statements"); + error_at (pragma_tok->location, "%<#pragma %s%> may only be " + "used in compound statements", "omp barrier"); break; default: goto bad_stmt; @@ -38120,8 +38120,8 @@ cp_parser_pragma (cp_parser *parser, enu cp_parser_omp_flush (parser, pragma_tok); return false; case pragma_stmt: - error_at (pragma_tok->location, "%<#pragma omp flush%> may only be " - "used in compound statements"); + error_at (pragma_tok->location, "%<#pragma %s%> may only be " + "used in compound statements", "omp flush"); break; default: goto bad_stmt; @@ -38136,8 +38136,8 @@ cp_parser_pragma (cp_parser *parser, enu return false; case pragma_stmt: error_at (pragma_tok->location, - "%<#pragma omp taskwait%> may only be " - "used in compound statements"); + "%<#pragma %s%> may only be used in compound statements", + "omp taskwait"); break; default: goto bad_stmt; @@ -38152,8 +38152,8 @@ cp_parser_pragma (cp_parser *parser, enu return false; case pragma_stmt: error_at (pragma_tok->location, - "%<#pragma omp taskyield%> may only be " - "used in compound statements"); + "%<#pragma %s%> may only be used in compound statements", + "omp taskyield"); break; default: goto bad_stmt; @@ -38168,8 +38168,8 @@ cp_parser_pragma (cp_parser *parser, enu return false; case pragma_stmt: error_at (pragma_tok->location, - "%<#pragma omp cancel%> may only be " - "used in compound statements"); + "%<#pragma %s%> may only be used in compound statements", + "omp cancel"); break; default: goto bad_stmt; @@ -38195,8 +38195,9 @@ cp_parser_pragma (cp_parser *parser, enu case PRAGMA_OACC_ENTER_DATA: if (context == pragma_stmt) { - cp_parser_error (parser, "%<#pragma acc enter data%> may only be " - "used in compound statements"); + error_at (pragma_tok->location, + "%<#pragma %s%> may only be used in compound statements", + "acc enter data"); break; } else if (context != pragma_compound) @@ -38207,8 +38208,9 @@ cp_parser_pragma (cp_parser *parser, enu case PRAGMA_OACC_EXIT_DATA: if (context == pragma_stmt) { - cp_parser_error (parser, "%<#pragma acc exit data%> may only be " - "used in compound statements"); + error_at (pragma_tok->location, + "%<#pragma %s%> may only be used in compound statements", + "acc exit data"); break; } else if (context != pragma_compound) @@ -38229,8 +38231,9 @@ cp_parser_pragma (cp_parser *parser, enu case PRAGMA_OACC_UPDATE: if (context == pragma_stmt) { - cp_parser_error (parser, "%<#pragma acc update%> may only be " - "used in compound statements"); + error_at (pragma_tok->location, + "%<#pragma %s%> may only be used in compound statements", + "acc update"); break; } else if (context != pragma_compound) @@ -38241,8 +38244,9 @@ cp_parser_pragma (cp_parser *parser, enu case PRAGMA_OACC_WAIT: if (context == pragma_stmt) { - cp_parser_error (parser, "%<#pragma acc wait%> may only be " - "used in compound statements"); + error_at (pragma_tok->location, + "%<#pragma %s%> may only be used in compound statements", + "acc wait"); break; } else if (context != pragma_compound) --- gcc/testsuite/c-c++-common/goacc/pragma_context.c.jj 2015-01-15 23:39:09.000000000 +0100 +++ gcc/testsuite/c-c++-common/goacc/pragma_context.c 2017-03-07 15:23:32.429199146 +0100 @@ -22,7 +22,7 @@ void f2 (void) { if (0) -#pragma acc update /* { dg-error "'#pragma acc update' may only be used in compound statements before '#pragma'" } */ +#pragma acc update /* { dg-error "'#pragma acc update' may only be used in compound statements" } */ } // pragma_compound Jakub