On 26 Feb, Jakub Jelinek wrote:
> On Sun, Feb 26, 2017 at 01:18:57PM +0100, Volker Reichelt wrote:
>> 2017-02-26  Volker Reichelt  <v.reich...@netcologne.de>
>> 
>>      * init.c: Include intl.h
> 
> Missing .

Indeed, I noticed that one after I hit the send button.

>> @@ -29,6 +29,7 @@
>>  #include "varasm.h"
>>  #include "gimplify.h"
>>  #include "c-family/c-ubsan.h"
>> +#include "intl.h"
>>  
>>  static bool begin_init_stmts (tree *, tree *);
>>  static tree finish_init_stmts (bool, tree, tree);
>> @@ -2805,11 +2806,11 @@
>>      {
>>        const char *msg;
>>        if (typedef_variant_p (orig_type))
>> -        msg = ("non-constant array new length must be specified "
>> -               "directly, not by typedef");
>> +        msg = G_("non-constant array new length must be specified "
>> +                 "directly, not by typedef");
>>        else
>> -        msg = ("non-constant array new length must be specified "
>> -               "without parentheses around the type-id");
>> +        msg = G_("non-constant array new length must be specified "
>> +                 "without parentheses around the type-id");
>>        pedwarn (EXPR_LOC_OR_LOC (outer_nelts, input_location),
>>                 OPT_Wvla, msg);
> 
> 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.)

>>      }
>> Index: gcc/cp/pt.c
>> ===================================================================
>> --- gcc/cp/pt.c      (revision 245719)
>> +++ gcc/cp/pt.c      (working copy)
>> @@ -17190,10 +17190,11 @@
>>                     stricter.  */
>>                  bool in_lambda = (current_class_type
>>                                    && LAMBDA_TYPE_P (current_class_type));
>> -                char const *msg = "%qD was not declared in this scope, "
>> -                  "and no declarations were found by "
>> -                  "argument-dependent lookup at the point "
>> -                  "of instantiation";
>> +                char const *const msg =
> 
> = should go on the next line in this case, i.e.
>                     = G_("%qD was not declared in this scope, "

Indeed, thanks for noticing.

> 
>       Jakub

So here's the second attempt:

2017-02-27  Volker Reichelt  <v.reich...@netcologne.de>

        * init.c: Include intl.h.
        (build_new_1): Move message strings into pedwarn to make them
        -Wformat-security friendly. Mark string for translation.
        * pt.c (tsubst_copy_and_build): Mark string for translation.
        Make the pointer const.
        * semantics.c (finish_id_expression): Mark strings for translation.

Index: gcc/cp/init.c
===================================================================
--- gcc/cp/init.c       (revision 245719)
+++ gcc/cp/init.c       (working copy)
@@ -29,6 +29,7 @@
 #include "varasm.h"
 #include "gimplify.h"
 #include "c-family/c-ubsan.h"
+#include "intl.h"
 
 static bool begin_init_stmts (tree *, tree *);
 static tree finish_init_stmts (bool, tree, tree);
@@ -2803,15 +2804,12 @@
     {
       if (complain & tf_warning_or_error)
        {
-         const char *msg;
-         if (typedef_variant_p (orig_type))
-           msg = ("non-constant array new length must be specified "
-                  "directly, not by typedef");
-         else
-           msg = ("non-constant array new length must be specified "
-                  "without parentheses around the type-id");
-         pedwarn (EXPR_LOC_OR_LOC (outer_nelts, input_location),
-                  OPT_Wvla, msg);
+         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 "
+                       "without parentheses around the type-id"));
        }
       else
        return error_mark_node;
Index: gcc/cp/pt.c
===================================================================
--- gcc/cp/pt.c (revision 245719)
+++ gcc/cp/pt.c (working copy)
@@ -17190,10 +17190,11 @@
                       stricter.  */
                    bool in_lambda = (current_class_type
                                      && LAMBDA_TYPE_P (current_class_type));
-                   char const *msg = "%qD was not declared in this scope, "
-                     "and no declarations were found by "
-                     "argument-dependent lookup at the point "
-                     "of instantiation";
+                   char const *const msg
+                     = G_("%qD was not declared in this scope, "
+                          "and no declarations were found by "
+                          "argument-dependent lookup at the point "
+                          "of instantiation");
 
                    bool diag = true;
                    if (in_lambda)
Index: gcc/cp/semantics.c
===================================================================
--- gcc/cp/semantics.c  (revision 245719)
+++ gcc/cp/semantics.c  (working copy)
@@ -3510,7 +3510,7 @@
          && DECL_CONTEXT (decl) == NULL_TREE
          && !cp_unevaluated_operand)
        {
-         *error_msg = "use of parameter outside function body";
+         *error_msg = G_("use of parameter outside function body");
          return error_mark_node;
        }
     }
@@ -3520,13 +3520,13 @@
   if (TREE_CODE (decl) == TEMPLATE_DECL
       && !DECL_FUNCTION_TEMPLATE_P (decl))
     {
-      *error_msg = "missing template arguments";
+      *error_msg = G_("missing template arguments");
       return error_mark_node;
     }
   else if (TREE_CODE (decl) == TYPE_DECL
           || TREE_CODE (decl) == NAMESPACE_DECL)
     {
-      *error_msg = "expected primary-expression";
+      *error_msg = G_("expected primary-expression");
       return error_mark_node;
     }
 
===================================================================

Bootstrapped/regtested on x86_64-linux, ok for trunk?

Regards,
Volker

Reply via email to