On Mon, Feb 27, 2017 at 12:47:09PM +0000, Joseph Myers wrote: > On Mon, 27 Feb 2017, Jakub Jelinek wrote: > > > On Mon, Feb 27, 2017 at 11:04:36AM +0100, Volker Reichelt wrote: > > > > This is not -Wformat-security friendly, perhaps better > > > > pedwarn (EXPR_LOC_OR_LOC (outer_nelts, input_location), > > > > OPT_Wvla, > > > > typedef_variant_p (orig_type) > > > > ? "non-constant array new length must be specified " > > > > "directly, not by typedef" > > > > : "non-constant array new length must be specified " > > > > "without parentheses around the type-id"); > > > > ? > > > > > > Not quite. Like this the second string doesn't end up in the gcc.pot > > > file for translation. I had to wrap the second string in G_(...) to make > > > it work. (I'll have a look for other instances of this pattern and > > > prepare a separate patch.) > > > > Looks like a xgettext bug or missing feature :(. Joseph, shall we just > > change all those to be G_() around the second string (well, some could be > > Yes, it's generally the case that G_() is used whenever there's a > conditional expression for the msgid argument to a diagnostic function.
So, is this ok for trunk? Shall I regenerate gcc.pot or will you? 2017-02-27 Jakub Jelinek <ja...@redhat.com> * config/i386/i386.c (ix86_option_override_internal): Use cond ? G_("...") : G_("...") instead of just cond ? "..." : "...". * config/nvptx/nvptx.c (nvptx_goacc_validate_dims): Likewise. * coverage.c (read_counts_file): Likewise. * omp-offload.c (oacc_loop_fixed_partitions): Likewise. * gcov.c (read_count_file): Use cond ? N_("...") : N_("...") instead of just cond ? "..." : "...". c/ * c-parser.c (c_parser_asm_statement): Use cond ? G_("...") : G_("...") instead of just cond ? "..." : "...". (c_parser_oacc_enter_exit_data): Use %s and ternary operator only for "enter"/"exit" keyword. (c_finish_oacc_routine): Don't use %s to supply portions of the message. cp/ * decl.c (find_decomp_class_base): Use cond ? G_("...") : G_("...") instead of just cond ? "..." : "...". (grokdeclarator): Likewise. (build_enumerator): Likewise. * init.c (build_new_1): Likewise. * call.c (build_new_method_call_1): Likewise. * parser.c (cp_parser_oacc_enter_exit_data): Use %s and ternary operator only for "enter"/"exit" keyword. (cp_finalize_oacc_routine): Don't use %s to supply portions of the message. fortran/ * parse.c (parse_critical_block): Use cond ? G_("...") : G_("...") instead of just cond ? "..." : "...". * scanner.c (gfc_next_char_literal): Likewise. * match.c (match_exit_cycle): Likewise. --- gcc/config/i386/i386.c.jj 2017-02-21 15:38:48.000000000 +0100 +++ gcc/config/i386/i386.c 2017-02-27 15:47:08.665621000 +0100 @@ -5265,11 +5265,11 @@ ix86_option_override_internal (bool main else if (!strcmp (opts->x_ix86_tune_string, "x86-64")) warning (OPT_Wdeprecated, main_args_p - ? "%<-mtune=x86-64%> is deprecated; use %<-mtune=k8%> " - "or %<-mtune=generic%> instead as appropriate" - : "%<target(\"tune=x86-64\")%> is deprecated; use " - "%<target(\"tune=k8\")%> or %<target(\"tune=generic\")%> " - "instead as appropriate"); + ? G_("%<-mtune=x86-64%> is deprecated; use %<-mtune=k8%> " + "or %<-mtune=generic%> instead as appropriate") + : G_("%<target(\"tune=x86-64\")%> is deprecated; use " + "%<target(\"tune=k8\")%> or %<target(\"tune=generic\")%>" + " instead as appropriate")); } else { @@ -5418,17 +5418,19 @@ ix86_option_override_internal (bool main if (!strcmp (opts->x_ix86_arch_string, "generic")) { error (main_args_p - ? "%<generic%> CPU can be used only for %<-mtune=%> switch" - : "%<generic%> CPU can be used only for " - "%<target(\"tune=\")%> attribute"); + ? G_("%<generic%> CPU can be used only for %<-mtune=%> " + "switch") + : G_("%<generic%> CPU can be used only for " + "%<target(\"tune=\")%> attribute")); return false; } else if (!strcmp (opts->x_ix86_arch_string, "intel")) { error (main_args_p - ? "%<intel%> CPU can be used only for %<-mtune=%> switch" - : "%<intel%> CPU can be used only for " - "%<target(\"tune=\")%> attribute"); + ? G_("%<intel%> CPU can be used only for %<-mtune=%> " + "switch") + : G_("%<intel%> CPU can be used only for " + "%<target(\"tune=\")%> attribute")); return false; } @@ -5656,8 +5658,8 @@ ix86_option_override_internal (bool main if (i == pta_size) { error (main_args_p - ? "bad value (%qs) for %<-march=%> switch" - : "bad value (%qs) for %<target(\"arch=\")%> attribute", + ? G_("bad value (%qs) for %<-march=%> switch") + : G_("bad value (%qs) for %<target(\"arch=\")%> attribute"), opts->x_ix86_arch_string); auto_vec <const char *> candidates; @@ -5674,16 +5676,16 @@ ix86_option_override_internal (bool main if (hint) inform (input_location, main_args_p - ? "valid arguments to %<-march=%> switch are: " - "%s; did you mean %qs?" - : "valid arguments to %<target(\"arch=\")%> attribute are: " - "%s; did you mean %qs?", s, hint); + ? G_("valid arguments to %<-march=%> switch are: " + "%s; did you mean %qs?") + : G_("valid arguments to %<target(\"arch=\")%> attribute are: " + "%s; did you mean %qs?"), s, hint); else inform (input_location, main_args_p - ? "valid arguments to %<-march=%> switch are: %s" - : "valid arguments to %<target(\"arch=\")%> attribute are: %s", - s); + ? G_("valid arguments to %<-march=%> switch are: %s") + : G_("valid arguments to %<target(\"arch=\")%> attribute " + "are: %s"), s); XDELETEVEC (s); } @@ -5729,8 +5731,8 @@ ix86_option_override_internal (bool main if (ix86_tune_specified && i == pta_size) { error (main_args_p - ? "bad value (%qs) for %<-mtune=%> switch" - : "bad value (%qs) for %<target(\"tune=\")%> attribute", + ? G_("bad value (%qs) for %<-mtune=%> switch") + : G_("bad value (%qs) for %<target(\"tune=\")%> attribute"), opts->x_ix86_tune_string); auto_vec <const char *> candidates; @@ -5745,16 +5747,16 @@ ix86_option_override_internal (bool main if (hint) inform (input_location, main_args_p - ? "valid arguments to %<-mtune=%> switch are: " - "%s; did you mean %qs?" - : "valid arguments to %<target(\"tune=\")%> attribute are: " - "%s; did you mean %qs?", s, hint); + ? G_("valid arguments to %<-mtune=%> switch are: " + "%s; did you mean %qs?") + : G_("valid arguments to %<target(\"tune=\")%> attribute are: " + "%s; did you mean %qs?"), s, hint); else inform (input_location, main_args_p - ? "valid arguments to %<-mtune=%> switch are: %s" - : "valid arguments to %<target(\"tune=\")%> attribute are: %s", - s); + ? G_("valid arguments to %<-mtune=%> switch are: %s") + : G_("valid arguments to %<target(\"tune=\")%> attribute " + "are: %s"), s); XDELETEVEC (s); } @@ -5856,8 +5858,9 @@ ix86_option_override_internal (bool main if (TARGET_RTD_P (opts->x_target_flags)) warning (0, - main_args_p ? "%<-mrtd%> is ignored in 64bit mode" - : "%<target(\"rtd\")%> is ignored in 64bit mode"); + main_args_p + ? G_("%<-mrtd%> is ignored in 64bit mode") + : G_("%<target(\"rtd\")%> is ignored in 64bit mode")); } else { @@ -5979,8 +5982,8 @@ ix86_option_override_internal (bool main if (TARGET_SSEREGPARM_P (opts->x_target_flags) && ! TARGET_SSE_P (opts->x_ix86_isa_flags)) error (main_args_p - ? "%<-msseregparm%> used without SSE enabled" - : "%<target(\"sseregparm\")%> used without SSE enabled"); + ? G_("%<-msseregparm%> used without SSE enabled") + : G_("%<target(\"sseregparm\")%> used without SSE enabled")); if (opts_set->x_ix86_fpmath) { @@ -6047,10 +6050,11 @@ ix86_option_override_internal (bool main if (opts_set->x_target_flags & MASK_ACCUMULATE_OUTGOING_ARGS) warning (0, main_args_p - ? "stack probing requires %<-maccumulate-outgoing-args%> " - "for correctness" - : "stack probing requires " - "%<target(\"accumulate-outgoing-args\")%> for correctness"); + ? G_("stack probing requires %<-maccumulate-outgoing-args%> " + "for correctness") + : G_("stack probing requires " + "%<target(\"accumulate-outgoing-args\")%> for " + "correctness")); opts->x_target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS; } @@ -6062,9 +6066,10 @@ ix86_option_override_internal (bool main if (opts_set->x_target_flags & MASK_ACCUMULATE_OUTGOING_ARGS) warning (0, main_args_p - ? "fixed ebp register requires %<-maccumulate-outgoing-args%>" - : "fixed ebp register requires " - "%<target(\"accumulate-outgoing-args\")%>"); + ? G_("fixed ebp register requires " + "%<-maccumulate-outgoing-args%>") + : G_("fixed ebp register requires " + "%<target(\"accumulate-outgoing-args\")%>")); opts->x_target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS; } --- gcc/config/nvptx/nvptx.c.jj 2017-02-21 15:36:03.000000000 +0100 +++ gcc/config/nvptx/nvptx.c 2017-02-27 15:48:20.031688240 +0100 @@ -4542,8 +4542,8 @@ nvptx_goacc_validate_dims (tree decl, in if (fn_level < 0 && dims[GOMP_DIM_VECTOR] >= 0) warning_at (decl ? DECL_SOURCE_LOCATION (decl) : UNKNOWN_LOCATION, 0, dims[GOMP_DIM_VECTOR] - ? "using vector_length (%d), ignoring %d" - : "using vector_length (%d), ignoring runtime setting", + ? G_("using vector_length (%d), ignoring %d") + : G_("using vector_length (%d), ignoring runtime setting"), PTX_VECTOR_LENGTH, dims[GOMP_DIM_VECTOR]); dims[GOMP_DIM_VECTOR] = PTX_VECTOR_LENGTH; changed = true; --- gcc/cp/decl.c.jj 2017-02-27 15:19:13.000000000 +0100 +++ gcc/cp/decl.c 2017-02-27 15:36:41.655834700 +0100 @@ -7224,8 +7224,9 @@ find_decomp_class_base (location_t loc, error_at (loc, "cannot decompose non-public member %qD of %qT", field, type); inform (DECL_SOURCE_LOCATION (field), - TREE_PRIVATE (field) ? "declared private here" - : "declared protected here"); + TREE_PRIVATE (field) + ? G_("declared private here") + : G_("declared protected here")); return error_mark_node; } else @@ -11001,8 +11002,8 @@ grokdeclarator (const cp_declarator *dec { maybe_warn_cpp0x (CPP0X_REF_QUALIFIER); error ((flags == DTOR_FLAG) - ? "destructors may not be ref-qualified" - : "constructors may not be ref-qualified"); + ? G_("destructors may not be ref-qualified") + : G_("constructors may not be ref-qualified")); rqual = REF_QUAL_NONE; } @@ -14484,9 +14485,10 @@ build_enumerator (tree name, tree value, } if (type && cxx_dialect < cxx11 && itk > itk_unsigned_long) - pedwarn (input_location, OPT_Wlong_long, pos ? "\ -incremented enumerator value is too large for %<unsigned long%>" : "\ -incremented enumerator value is too large for %<long%>"); + pedwarn (input_location, OPT_Wlong_long, + pos ? G_("\ +incremented enumerator value is too large for %<unsigned long%>") : G_("\ +incremented enumerator value is too large for %<long%>")); } if (type == NULL_TREE) overflowed = true; --- gcc/cp/parser.c.jj 2017-02-24 21:39:13.000000000 +0100 +++ gcc/cp/parser.c 2017-02-27 15:38:31.480392105 +0100 @@ -36293,9 +36293,8 @@ cp_parser_oacc_enter_exit_data (cp_parse if (strcmp (p, "data") != 0) { - error_at (loc, enter - ? "expected %<data%> after %<#pragma acc enter%>" - : "expected %<data%> after %<#pragma acc exit%>"); + error_at (loc, "expected %<data%> after %<#pragma acc %s%>", + enter ? "enter" : "exit"); cp_parser_skip_to_pragma_eol (parser, pragma_tok); return NULL_TREE; } @@ -37573,8 +37572,10 @@ cp_finalize_oacc_routine (cp_parser *par if (TREE_USED (fndecl) || (!is_defn && DECL_SAVED_TREE (fndecl))) { error_at (parser->oacc_routine->loc, - "%<#pragma acc routine%> must be applied before %s", - TREE_USED (fndecl) ? "use" : "definition"); + TREE_USED (fndecl) + ? G_("%<#pragma acc routine%> must be applied before use") + : G_("%<#pragma acc routine%> must be applied before " + "definition")); parser->oacc_routine = NULL; return; } --- gcc/cp/init.c.jj 2017-02-27 15:19:13.000000000 +0100 +++ gcc/cp/init.c 2017-02-27 18:20:40.162038982 +0100 @@ -2806,8 +2806,8 @@ build_new_1 (vec<tree, va_gc> **placemen { pedwarn (EXPR_LOC_OR_LOC (outer_nelts, input_location), OPT_Wvla, typedef_variant_p (orig_type) - ? "non-constant array new length must be specified " - "directly, not by typedef" + ? G_("non-constant array new length must be specified " + "directly, not by typedef") : G_("non-constant array new length must be specified " "without parentheses around the type-id")); } --- gcc/cp/call.c.jj 2017-02-25 09:32:11.000000000 +0100 +++ gcc/cp/call.c 2017-02-27 15:35:04.939105117 +0100 @@ -8772,8 +8772,8 @@ build_new_method_call_1 (tree instance, else if (DECL_CONSTRUCTOR_P (current_function_decl) || DECL_DESTRUCTOR_P (current_function_decl)) warning (0, (DECL_CONSTRUCTOR_P (current_function_decl) - ? "pure virtual %q#D called from constructor" - : "pure virtual %q#D called from destructor"), + ? G_("pure virtual %q#D called from constructor") + : G_("pure virtual %q#D called from destructor")), fn); } --- gcc/c/c-parser.c.jj 2017-02-24 21:39:13.000000000 +0100 +++ gcc/c/c-parser.c 2017-02-27 15:33:46.634133688 +0100 @@ -6159,8 +6159,8 @@ c_parser_asm_statement (c_parser *parser { if (!c_parser_require (parser, CPP_COLON, is_goto - ? "expected %<:%>" - : "expected %<:%> or %<)%>")) + ? G_("expected %<:%>") + : G_("expected %<:%> or %<)%>"))) goto error_close_paren; /* Once past any colon, we're no longer a simple asm. */ @@ -13925,9 +13925,8 @@ c_parser_oacc_enter_exit_data (c_parser if (strcmp (p, "data") != 0) { - error_at (loc, enter - ? "expected %<data%> after %<#pragma acc enter%>" - : "expected %<data%> after %<#pragma acc exit%>"); + error_at (loc, "expected %<data%> after %<#pragma acc %s%>", + enter ? "enter" : "exit"); parser->error = true; c_parser_skip_to_pragma_eol (parser); return; @@ -13942,9 +13941,8 @@ c_parser_oacc_enter_exit_data (c_parser if (omp_find_clause (clauses, OMP_CLAUSE_MAP) == NULL_TREE) { - error_at (loc, enter - ? "%<#pragma acc enter data%> has no data movement clause" - : "%<#pragma acc exit data%> has no data movement clause"); + error_at (loc, "%<#pragma acc %s data%> has no data movement clause", + enter ? "enter" : "exit"); return; } @@ -14270,8 +14268,10 @@ c_finish_oacc_routine (struct oacc_routi if (TREE_USED (fndecl) || (!is_defn && DECL_SAVED_TREE (fndecl))) { error_at (data->loc, - "%<#pragma acc routine%> must be applied before %s", - TREE_USED (fndecl) ? "use" : "definition"); + TREE_USED (fndecl) + ? G_("%<#pragma acc routine%> must be applied before use") + : G_("%<#pragma acc routine%> must be applied before " + "definition")); data->error_seen = true; return; } --- gcc/gcov.c.jj 2017-01-22 20:27:10.000000000 +0100 +++ gcc/gcov.c 2017-02-27 15:24:49.919183680 +0100 @@ -1669,7 +1669,10 @@ read_count_file (function_t *fns) gcov_sync (base, length); if ((error = gcov_is_error ())) { - fnotice (stderr, error < 0 ? "%s:overflowed\n" : "%s:corrupted\n", + fnotice (stderr, + error < 0 + ? N_("%s:overflowed\n") + : N_("%s:corrupted\n"), da_file_name); goto cleanup; } --- gcc/coverage.c.jj 2017-01-01 12:45:35.000000000 +0100 +++ gcc/coverage.c 2017-02-27 15:22:31.736998766 +0100 @@ -327,7 +327,9 @@ read_counts_file (void) gcov_sync (offset, length); if ((is_error = gcov_is_error ())) { - error (is_error < 0 ? "%qs has overflowed" : "%qs is corrupted", + error (is_error < 0 + ? G_("%qs has overflowed") + : G_("%qs is corrupted"), da_file_name); delete counts_hash; counts_hash = NULL; --- gcc/fortran/parse.c.jj 2017-02-20 13:43:22.000000000 +0100 +++ gcc/fortran/parse.c 2017-02-27 15:40:58.610459485 +0100 @@ -4340,8 +4340,8 @@ parse_critical_block (void) for (sd = gfc_state_stack; sd; sd = sd->previous) if (sd->state == COMP_OMP_STRUCTURED_BLOCK) gfc_error_now (is_oacc (sd) - ? "CRITICAL block inside of OpenACC region at %C" - : "CRITICAL block inside of OpenMP region at %C"); + ? G_("CRITICAL block inside of OpenACC region at %C") + : G_("CRITICAL block inside of OpenMP region at %C")); s.ext.end_do_label = new_st.label1; --- gcc/fortran/scanner.c.jj 2017-01-01 12:45:47.000000000 +0100 +++ gcc/fortran/scanner.c 2017-02-27 15:41:56.106706170 +0100 @@ -1406,10 +1406,11 @@ restart: if (i == 4) old_loc = gfc_current_locus; } - gfc_error (is_openmp ? "Wrong OpenACC continuation at %C: " - "expected !$ACC, got !$OMP" - : "Wrong OpenMP continuation at %C: " - "expected !$OMP, got !$ACC"); + gfc_error (is_openmp + ? G_("Wrong OpenACC continuation at %C: " + "expected !$ACC, got !$OMP") + : G_("Wrong OpenMP continuation at %C: " + "expected !$OMP, got !$ACC")); } if (c != '&') @@ -1502,10 +1503,11 @@ restart: if (gfc_wide_tolower (c) != (unsigned char) "*$acc"[i]) is_openmp = 1; } - gfc_error (is_openmp ? "Wrong OpenACC continuation at %C: " - "expected !$ACC, got !$OMP" - : "Wrong OpenMP continuation at %C: " - "expected !$OMP, got !$ACC"); + gfc_error (is_openmp + ? G_("Wrong OpenACC continuation at %C: " + "expected !$ACC, got !$OMP") + : G_("Wrong OpenMP continuation at %C: " + "expected !$OMP, got !$ACC")); } else if (!openmp_flag && !openacc_flag) for (i = 0; i < 5; i++) --- gcc/fortran/match.c.jj 2017-02-13 12:20:49.000000000 +0100 +++ gcc/fortran/match.c 2017-02-27 15:40:04.876165309 +0100 @@ -2731,8 +2731,8 @@ match_exit_cycle (gfc_statement st, gfc_ if (o != NULL) { gfc_error (is_oacc (p) - ? "%s statement at %C leaving OpenACC structured block" - : "%s statement at %C leaving OpenMP structured block", + ? G_("%s statement at %C leaving OpenACC structured block") + : G_("%s statement at %C leaving OpenMP structured block"), gfc_ascii_statement (st)); return MATCH_ERROR; } --- gcc/omp-offload.c.jj 2017-02-14 20:40:09.000000000 +0100 +++ gcc/omp-offload.c 2017-02-27 15:27:11.694321400 +0100 @@ -1117,9 +1117,9 @@ oacc_loop_fixed_partitions (oacc_loop *l if (noisy) error_at (loop->loc, seq_par - ? "%<seq%> overrides other OpenACC loop specifiers" - : "%<auto%> conflicts with other OpenACC loop " - "specifiers"); + ? G_("%<seq%> overrides other OpenACC loop specifiers") + : G_("%<auto%> conflicts with other OpenACC loop " + "specifiers")); maybe_auto = false; loop->flags &= ~OLF_AUTO; if (seq_par) Jakub