This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Some more translation related tweaks
- From: Volker Reichelt <v dot reichelt at netcologne dot de>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org, Marek Polacek <polacek at redhat dot com>
- Date: Mon, 27 Feb 2017 11:04:36 +0100 (CET)
- Subject: Re: [PATCH] Some more translation related tweaks
- Authentication-results: sourceware.org; auth=none
- References: <tkrat.a7532927a533bdd5@netcologne.de> <20170226123555.GW1849@tucnak>
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