c++/7084: locale dependant ICE

Zack Weinberg zack@codesourcery.com
Fri Jun 21 01:16:00 GMT 2002


On Fri, Jun 21, 2002 at 12:49:25PM +0200, fasbjx@free.fr wrote:
> - with my default locale, fr_FR.ISO8859-1, GCC says:
> tmp.cc: Dans function « int main() »:
> tmp.cc:511: no match pour l'opérateur «
> erreur interne de compilateur: erreur pour rapporter une routine ré-entée

This would be a bug in fr.po:

| #: cp/call.c:2834
| msgid "%s for `%T %s' operator"
| msgstr "%s pour l'opérateur «%T %s»"
|
| #: cp/call.c:2837
| msgid "%s for `%T [%T]' operator"
| msgstr "%s pour l'opérateur «%T [%T]»"
|
| #: cp/call.c:2842
| msgid "%s for `%T %s %T' operator"
| msgstr "%s pour l'opérateur «%t [%T]»"
|
| #: cp/call.c:2845
| msgid "%s for `%s %T' operator"
| msgstr "%s pour l'opérateur «%t [%T]»"

You will notice that the translations do not match the messages, and
that the escape sequences are wrong: in particular, a %t has
appeared.  This is not a defined %-escape, so we abort in the middle
of generating the error message, which triggers the "ré-entée" message.

Correct entries, presumably, would read

| #: cp/call.c:2834
| msgid "%s for `%T %s' operator"
| msgstr "%s pour l'opérateur «%T %s»"
|
| #: cp/call.c:2837
| msgid "%s for `%T [%T]' operator"
| msgstr "%s pour l'opérateur «%T [%T]»"
|
| #: cp/call.c:2842
| msgid "%s for `%T %s %T' operator"
| msgstr "%s pour l'opérateur «%T %s %T»"
|
| #: cp/call.c:2845
| msgid "%s for `%s %T' operator"
| msgstr "%s pour l'opérateur «%s %T»"

I am not sure what the protocol is for fixing such bugs.  The
corrections need to make it back to the translation project somehow,
and the .po files need to be audited for other occurrences of this
problem (why didn't msgfmt bitch?)

zw



More information about the Gcc-bugs mailing list