This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Some more translation related tweaks


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]