[patch] PR c++/21768: ICE in error message due to violation of coding conventions

Volker Reichelt reichelt@igpm.rwth-aachen.de
Thu May 26 14:52:00 GMT 2005


Compiling the following code snippet with the German locale enabled
causes an ICE:

================================
template<int,int> struct A;
template<int> struct A {};
================================

  bug.cc:1: Fehler: previous declaration »template<int <anonymous>, int <anonymous> > 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 <URL:http://gcc.gnu.org/bugs.html> 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 attached patch fixes that by removing the conditional and using
"parameter(s)" in the text. This should simplify i18n efforts.

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.

Bootstrapped and regtested on i686-pc-linux-gnu.
Ok for 3.4 branch, 4.0 branch, and mainline?

Regards,
Volker


2005-05-26  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>

	PR c++/21768
	* pt.c (redeclare_class_template): Change error message according
	to coding conventions.

=============================================================================
--- 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;
     }
 
=============================================================================




More information about the Gcc-patches mailing list