diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-04-11 17:28:18 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-04-11 17:28:18 +0200 |
commit | 657184d086a57eb214dda530035563a1ecc3df10 (patch) | |
tree | c0300bc78486da858fa3fc094ba9569b679abe8a | |
parent | 8f1d8deb29c6725d2c0f0d3fe13b19d52fffda38 (diff) | |
download | gcc-657184d086a57eb214dda530035563a1ecc3df10.zip gcc-657184d086a57eb214dda530035563a1ecc3df10.tar.gz gcc-657184d086a57eb214dda530035563a1ecc3df10.tar.bz2 |
re PR translation/90035 (Non-translatable C++ parser diagnostics)
PR translation/90035
* parser.h (struct cp_parser): Add
type_definition_forbidden_message_arg member.
* parser.c (cp_debug_parser): Print it.
(cp_parser_check_type_definition): Pass
parser->type_definition_forbidden_message_arg as second argument to
error.
(cp_parser_has_attribute_expression, cp_parser_sizeof_operand): Set
parser->type_definition_forbidden_message_arg and use G_() with
%qs for parser->type_definition_forbidden_message instead of
building untranslatable message using concat.
From-SVN: r270286
-rw-r--r-- | gcc/cp/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/cp/parser.c | 41 | ||||
-rw-r--r-- | gcc/cp/parser.h | 3 |
3 files changed, 38 insertions, 20 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9fc4490..1c0f744 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,17 @@ +2019-04-11 Jakub Jelinek <jakub@redhat.com> + + PR translation/90035 + * parser.h (struct cp_parser): Add + type_definition_forbidden_message_arg member. + * parser.c (cp_debug_parser): Print it. + (cp_parser_check_type_definition): Pass + parser->type_definition_forbidden_message_arg as second argument to + error. + (cp_parser_has_attribute_expression, cp_parser_sizeof_operand): Set + parser->type_definition_forbidden_message_arg and use G_() with + %qs for parser->type_definition_forbidden_message instead of + building untranslatable message using concat. + 2019-04-09 Jakub Jelinek <jakub@redhat.com> PR translation/90011 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 348e4ac..3ab371c 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -570,8 +570,10 @@ cp_debug_parser (FILE *file, cp_parser *parser) cp_debug_print_flag (file, "Colon doesn't start a class definition", parser->colon_doesnt_start_class_def_p); if (parser->type_definition_forbidden_message) - fprintf (file, "Error message for forbidden type definitions: %s\n", - parser->type_definition_forbidden_message); + fprintf (file, "Error message for forbidden type definitions: %s %s\n", + parser->type_definition_forbidden_message, + parser->type_definition_forbidden_message_arg + ? parser->type_definition_forbidden_message_arg : "<none>"); cp_debug_print_unparsed_queues (file, parser->unparsed_queues); fprintf (file, "Number of class definitions in progress: %u\n", parser->num_classes_being_defined); @@ -3054,8 +3056,9 @@ cp_parser_check_type_definition (cp_parser* parser) if (parser->type_definition_forbidden_message) { /* Don't use `%s' to print the string, because quotations (`%<', `%>') - in the message need to be interpreted. */ - error (parser->type_definition_forbidden_message); + or %qs in the message need to be interpreted. */ + error (parser->type_definition_forbidden_message, + parser->type_definition_forbidden_message_arg); return false; } return true; @@ -8518,12 +8521,12 @@ cp_parser_has_attribute_expression (cp_parser *parser) /* Types cannot be defined in a `sizeof' expression. Save away the old message. */ const char *saved_message = parser->type_definition_forbidden_message; - /* And create the new one. */ - const int kwd = RID_BUILTIN_HAS_ATTRIBUTE; - char *tmp = concat ("types may not be defined in %<", - IDENTIFIER_POINTER (ridpointers[kwd]), - "%> expressions", NULL); - parser->type_definition_forbidden_message = tmp; + const char *saved_message_arg + = parser->type_definition_forbidden_message_arg; + parser->type_definition_forbidden_message + = G_("types may not be defined in %qs expressions"); + parser->type_definition_forbidden_message_arg + = IDENTIFIER_POINTER (ridpointers[RID_BUILTIN_HAS_ATTRIBUTE]); /* The restrictions on constant-expressions do not apply inside sizeof expressions. */ @@ -8562,10 +8565,9 @@ cp_parser_has_attribute_expression (cp_parser *parser) --cp_unevaluated_operand; --c_inhibit_evaluation_warnings; - /* Free the message we created. */ - free (tmp); /* And restore the old one. */ parser->type_definition_forbidden_message = saved_message; + parser->type_definition_forbidden_message_arg = saved_message_arg; parser->integral_constant_expression_p = saved_integral_constant_expression_p; parser->non_integral_constant_expression_p @@ -28928,7 +28930,7 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword) { tree expr = NULL_TREE; const char *saved_message; - char *tmp; + const char *saved_message_arg; bool saved_integral_constant_expression_p; bool saved_non_integral_constant_expression_p; @@ -28941,11 +28943,11 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword) /* Types cannot be defined in a `sizeof' expression. Save away the old message. */ saved_message = parser->type_definition_forbidden_message; - /* And create the new one. */ - tmp = concat ("types may not be defined in %<", - IDENTIFIER_POINTER (ridpointers[keyword]), - "%> expressions", NULL); - parser->type_definition_forbidden_message = tmp; + saved_message_arg = parser->type_definition_forbidden_message_arg; + parser->type_definition_forbidden_message + = G_("types may not be defined in %qs expressions"); + parser->type_definition_forbidden_message_arg + = IDENTIFIER_POINTER (ridpointers[keyword]); /* The restrictions on constant-expressions do not apply inside sizeof expressions. */ @@ -29002,10 +29004,9 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword) --cp_unevaluated_operand; --c_inhibit_evaluation_warnings; - /* Free the message we created. */ - free (tmp); /* And restore the old one. */ parser->type_definition_forbidden_message = saved_message; + parser->type_definition_forbidden_message_arg = saved_message_arg; parser->integral_constant_expression_p = saved_integral_constant_expression_p; parser->non_integral_constant_expression_p diff --git a/gcc/cp/parser.h b/gcc/cp/parser.h index 1d6cb2d..c03a9d8 100644 --- a/gcc/cp/parser.h +++ b/gcc/cp/parser.h @@ -350,6 +350,9 @@ struct GTY(()) cp_parser { issued as an error message if a type is defined. */ const char *type_definition_forbidden_message; + /* Argument for type_definition_forbidden_message if needed. */ + const char *type_definition_forbidden_message_arg; + /* A stack used for member functions of local classes. The lists contained in an individual entry can only be processed once the outermost class being defined is complete. */ |