On Tue, Mar 12, 2019 at 10:58:14AM +0100, Jakub Jelinek wrote: > These are the only remaining cases of gcc-internal-format diagnostics using > HOST_WIDE_INT_PRINT*. That is wrong because the string depends on the exact > host, and xgettext doesn't handle it anyway, so in gcc.pot the messages are > truncated at the spot where HOST_WIDE_INT_PRINT* appears. See also > PR79846 for an earlier change of the same kind. > > Tested on a cross to s390x-linux on the > gcc.target/s390/htm-builtins-compile-2.c > testcase. Ok for trunk? > > 2019-03-12 Jakub Jelinek <ja...@redhat.com> > > PR target/52726 > * config/s390/s390.md (tabort): Use %wd instead of > HOST_WIDE_INT_PRINT_DEC in error message, reword to avoid two capital > letters and periods. > * config/tilepro/tilepro.c (tilepro_print_operand): Use %wd in > output_operand_lossage instead of HOST_WIDE_INT_PRINT_DEC, replace > 's with %< and %>.
Unfortunately, today while building gcc.pot I've noticed: config/tilepro/tilepro.c:4774: warning: Although being used in a format string position, the msgid is not a valid C format string. Reason: In the directive number 2, the token after '<' is not the name of a format specifier macro. The valid macro names are listed in ISO C 99 section 7.8.1. Indeed, output_operand_lossage argument is not gcc-internal-format, so it can't use %wd nor %< nor %>. It is printed using: va_start (ap, cmsgid); pfx_str = this_is_asm_operands ? _("invalid 'asm': ") : "output_operand: "; fmt_string = xasprintf ("%s%s", pfx_str, _(cmsgid)); new_message = xvasprintf (fmt_string, ap); if (this_is_asm_operands) error_for_asm (this_is_asm_operands, "%s", new_message); else internal_error ("%s", new_message); so can use just the fprintf format specifiers. While I perhaps could use %ld instead of %<%wd%> and cast the HOST_WIDE_INT argument to long, it doesn't seem to be worth it IMHO, if the argument is not a CONST_INT, we print also just invalid %%t operand, so I'd suggest doing following. Ok for trunk? 2019-04-11 Jakub Jelinek <ja...@redhat.com> PR target/52726 * config/tilepro/tilepro.c (tilepro_print_operand): Use just "invalid %%t operand" in output_operand_lossage message. --- gcc/config/tilepro/tilepro.c.jj 2019-03-12 10:46:40.995960027 +0100 +++ gcc/config/tilepro/tilepro.c 2019-04-11 14:54:01.708668318 +0200 @@ -4771,7 +4771,7 @@ tilepro_print_operand (FILE *file, rtx x i = exact_log2 (n); if (i < 0) { - output_operand_lossage ("invalid %%t operand %<%wd%>", n); + output_operand_lossage ("invalid %%t operand"); return; } Jakub