Attached test case ICEs. The code is AFAIK invalid:

-------8<-------

#include <stdio.h>

template <typename Numeric>
class Table
{
  typedef struct
  {
    const char * const name;
    Numeric index;
  } Tableitem;

  static const Tableitem entries[];

public:
  const char * const
  operator[] (Numeric Tableindex)
  {
    for (int i=0; i<sizeof(entries)/sizeof(Tableitem); ++i)
      if(entries[i].index==Tableindex)
        return entries[i].name;
    return 0;
  }
};


enum funky { feeling, lost, somewhere, in, space };

template<funky>
const Table<funky>::Tableitem Table<funky>::entries[] =
  {
    {"feeling", feeling},
    {"lost", lost},
    {"somewhere", somewhere},
    {"in", in},
    {"space", space},
  };

int main (int argc, char **argv)
{
  Table<funky> FunkyTable;
  printf("Funkytable somewhere=[%s]\n", FunkyTable[somewhere]);
  return 0;
}

-------8<-------

The error:

logout::wilx:~/tmp> g++42 -o ice ice.cxx
ice.cxx:14: internal compiler error: in import_export_decl, at cp/decl2.c:1956
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

GCC version:

logout::wilx:~/tmp> g++42 -v
Using built-in specs.
Target: i386-portbld-freebsd6.2
Configured with: ./..//gcc-4.2-20070117/configure --disable-nls
--with-system-zlib --with-libiconv-prefix=/usr/local --with-gmp=/usr/local
--program-suffix=42 --libdir=/usr/local/lib/gcc-4.2.0
--with-gxx-include-dir=/usr/local/lib/gcc-4.2.0/include/c++/
--infodir=/usr/local/info/gcc42 --disable-rpath --prefix=/usr/local
i386-portbld-freebsd6.2
Thread model: posix
gcc version 4.2.0 20070117 (prerelease)


-- 
           Summary: ICE on invalid template code
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: v dot haisman at sh dot cvut dot cz
 GCC build triplet: i386-portbld-freebsd6.2
  GCC host triplet: i386-portbld-freebsd6.2
GCC target triplet: i386-portbld-freebsd6.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30721

Reply via email to