Bug 21768 - [3.4 regression] ICE in error message due to violation of coding conventions
Summary: [3.4 regression] ICE in error message due to violation of coding conventions
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: translation (show other bugs)
Version: 4.1.0
: P2 normal
Target Milestone: 3.4.6
Assignee: Not yet assigned to anyone
URL: http://gcc.gnu.org/ml/gcc-patches/200...
Keywords: ice-on-invalid-code, patch
Depends on:
Blocks:
 
Reported: 2005-05-26 14:45 UTC by Volker Reichelt
Modified: 2006-02-28 15:37 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2006-01-06 16:26:28


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Volker Reichelt 2005-05-26 14:45:35 UTC
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 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.
Comment 1 Andrew Pinski 2005-05-26 14:56:47 UTC
Confirmed.
Comment 2 GCC Commits 2005-05-26 16:05:06 UTC
Subject: Bug 21768

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	reichelt@gcc.gnu.org	2005-05-26 16:04:45

Modified files:
	gcc/cp         : ChangeLog pt.c 

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

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4757&r2=1.4758
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&r1=1.998&r2=1.999

Comment 3 GCC Commits 2005-05-26 16:09:30 UTC
Subject: Bug 21768

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-4_0-branch
Changes by:	reichelt@gcc.gnu.org	2005-05-26 16:09:04

Modified files:
	gcc/cp         : ChangeLog pt.c 

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

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4648.2.44&r2=1.4648.2.45
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.978.2.10&r2=1.978.2.11

Comment 4 GCC Commits 2005-05-26 16:13:50 UTC
Subject: Bug 21768

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_4-branch
Changes by:	reichelt@gcc.gnu.org	2005-05-26 16:13:41

Modified files:
	gcc/cp         : ChangeLog pt.c 

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

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3892.2.219&r2=1.3892.2.220
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.816.2.52&r2=1.816.2.53

Comment 5 Volker Reichelt 2005-05-26 16:17:20 UTC
OK, the original error messages have been fixed for gcc 3.4.5,
gcc 4.0.1 and mainline.

Let's keep the PR open until the .po files got fixed, too.
Comment 6 Volker Reichelt 2005-05-26 16:54:22 UTC
For the record:
I just notified the translation team.
Comment 7 Volker Reichelt 2005-06-29 14:02:38 UTC
The .po files have been fixed for GCC 4.0.1 and mainline.
We are just missing the .po file for GCC 3.4.5.
Comment 8 Volker Reichelt 2005-07-04 09:53:51 UTC
Changing component, since we are only missing the updated .po file.
Comment 9 Paolo Bonzini 2005-08-31 13:36:30 UTC
This ought to use ngettext.
Comment 10 Volker Reichelt 2005-08-31 15:39:55 UTC
Subject: Re:  [3.4 regression] ICE in error message due
   to violation of coding conventions

On 31 Aug, bonzini at gcc dot gnu dot org wrote:
> This ought to use ngettext.

That's not necessary.
The trickery with the plural s that would have made ngettext necessary
was a violation of the coding conventions, anyway. This is already fixed
by using a different error message.

We are just waiting for a new .po file with a suitable translation.
This won't arrive until close to the release, however.
This PR is just a reminder to test whether the translation really got
fixed before spinning the release.


Comment 11 Gabriel Dos Reis 2006-02-28 15:37:30 UTC
The .po file is missing and we haven't received one for a while.  This
is not a release blocking issue.  Closing as essentially fixed.