Compiling the following code snippet with the German locale enabled causes an ICE: ================================ template struct A; template struct A {}; ================================ bug.cc:1: Fehler: previous declaration »template, int > struct A« bug.cc:2: Fehler: 2 Template-Parameter bug.cc:2: interner Compiler-Fehler: in pp_base_format_text, bei pretty-print.c:357 Bitte senden Sie einen vollständigen Fehlerbericht auf Englisch ein; bearbeiten Sie die Quellen zunächst mit einem Präprozessor, wenn es dienlich ist. Fehler in der deutschen Übersetzung sind an de@li.org zu melden. Gehen Sie gemäß den Hinweisen in vor. This is partly due to the fact that the code snippet in cp/pt.c that generates the original message violates the coding conventions (see http://www.gnu.org/prep/standards/standards.html#Internationalization): error ("used %d template parameter%s instead of %d", TREE_VEC_LENGTH (tmpl_parms), TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s", TREE_VEC_LENGTH (parms)); The patch below fixes that by removing the conditional and using "parameter(s)" in the text. This should simplify i18n efforts. ============================================================================= --- gcc/gcc/cp/pt.c 2005-05-25 00:00:57.000000000 +0200 +++ gcc/gcc/cp/pt.c 2005-05-25 00:35:03.000000000 +0200 @@ -3225,10 +3225,9 @@ redeclare_class_template (tree type, tre if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms)) { cp_error_at ("previous declaration %qD", tmpl); - error ("used %d template parameter%s instead of %d", - TREE_VEC_LENGTH (tmpl_parms), - TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s", - TREE_VEC_LENGTH (parms)); + error ("used %d template parameter(s) instead of %d", + TREE_VEC_LENGTH (tmpl_parms), + TREE_VEC_LENGTH (parms)); return; } ============================================================================= Alternatively, one could make two messages, one for 1 parameter and one for 0 or more than 1. But I don't think that this is worthwhile. Btw, do all languages use the plural form for 0 parameters? That's an implicit assumption that might not be true. The ICE with the German locale appeared in gcc 3.4.4 (before we did not have a German translation for that error message). Therefore I'd like to apply the patch not only to mainline, but also to the 3.4 and 4.0 branch as a first step towards removing the ICE. -- Summary: [3.4/4.0/4.1 regression] ICE in error message due to violation of coding conventions Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: ice-on-invalid-code Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: reichelt at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21768