public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/21768] New: [3.4/4.0/4.1 regression] ICE in error message due to violation of coding conventions
@ 2005-05-26 14:50 reichelt at gcc dot gnu dot org
  2005-05-26 14:56 ` [Bug c++/21768] " reichelt at gcc dot gnu dot org
                   ` (10 more replies)
  0 siblings, 11 replies; 14+ messages in thread
From: reichelt at gcc dot gnu dot org @ 2005-05-26 14:50 UTC (permalink / raw)
  To: gcc-bugs

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3081 bytes --]

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.

-- 
           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


^ permalink raw reply	[flat|nested] 14+ messages in thread
[parent not found: <bug-21768-1771@http.gcc.gnu.org/bugzilla/>]

end of thread, other threads:[~2006-02-28 15:37 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-05-26 14:50 [Bug c++/21768] New: [3.4/4.0/4.1 regression] ICE in error message due to violation of coding conventions reichelt at gcc dot gnu dot org
2005-05-26 14:56 ` [Bug c++/21768] " reichelt at gcc dot gnu dot org
2005-05-26 15:47 ` pinskia at gcc dot gnu dot org
2005-05-26 16:10 ` cvs-commit at gcc dot gnu dot org
2005-05-26 16:14 ` cvs-commit at gcc dot gnu dot org
2005-05-26 16:17 ` cvs-commit at gcc dot gnu dot org
2005-05-26 16:41 ` reichelt at gcc dot gnu dot org
2005-05-26 16:56 ` reichelt at gcc dot gnu dot org
2005-06-29 14:02 ` [Bug c++/21768] [3.4 " reichelt at gcc dot gnu dot org
2005-07-04  9:53 ` [Bug translation/21768] " reichelt at gcc dot gnu dot org
2005-08-31 13:47 ` bonzini at gcc dot gnu dot org
2005-08-31 15:43 ` reichelt at igpm dot rwth-aachen dot de
     [not found] <bug-21768-1771@http.gcc.gnu.org/bugzilla/>
2005-10-07  4:04 ` gdr at gcc dot gnu dot org
2006-02-28 15:38 ` gdr at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).