https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119684
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- > fatal_insn ("operands to %T/%t must be reg + const_int:", x); > in avr, that does > error ("%s", _(msgid)); > so %T/%t are indeed passed through unmodified there. Note, avr and microblaze are the only ones to use % in the fatal_insn arguments: config/avr/avr.cc: fatal_insn ("operands to %T/%t must be reg + const_int:", x); config/microblaze/microblaze.cc: fatal_insn ("PRINT_OPERAND, invalid insn for %%C", op); config/microblaze/microblaze.cc: fatal_insn ("PRINT_OPERAND, invalid insn for %%N", op); The latter will print literal %%C or %%N. Other targets are using something like config/frv/frv.cc: fatal_insn ("bad insn to frv_print_operand, 'e' modifier:", x); config/frv/frv.cc: fatal_insn ("bad insn to frv_print_operand, 'F' modifier:", x); config/frv/frv.cc: fatal_insn ("bad insn to frv_print_operand, 'f' modifier:", x); config/frv/frv.cc: fatal_insn ("bad insn to frv_print_operand, 'g' modifier:", x); config/frv/frv.cc: fatal_insn ("bad insn to frv_print_operand, 'L' modifier:", x); config/frv/frv.cc: fatal_insn ("bad insn to frv_print_operand, 'M/N' modifier:", x); config/frv/frv.cc: fatal_insn ("bad insn to frv_print_operand, 'O' modifier:", x); config/m32r/m32r.cc: fatal_insn ("bad insn for 'A'", x); config/mmix/mmix.cc: fatal_insn ("MMIX Internal: Bad value for 'm', not a CONST_INT",