C++ bug, appearantly template related.

Niels Möller nisse@lysator.liu.se
Wed Jun 28 03:03:00 GMT 2000


I've stumbled on an Internal compiler error in gcc.

I use gcc-2.95.2 (built with ./configure --enable-cpplib && make
bootstrap, but I don't think that matters).

My system, according to uname: "Linux katt.streamserve.com 2.2.5-15 #1
Mon Apr 19 23:00:46 EDT 1999 i686 unknown".

I try compiling the C++ file below by saying "gcc -c bug.cxx", and gcc
fails with

  bug.cxx:68: Internal compiler error.
  bug.cxx:68: Please submit a full bug report.
  bug.cxx:68: See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.
  
Source file appended below. I'm not sure if it is really valid C++, as
gcc dies before I get any useful error messages.

Regards,
/Niels

-----8<---------
/* xslt_hashtable.h */

class xslt_hash_table;
class xslt_hash_entry;

class xslt_hash_table
{
protected:
  class iterator;
  friend iterator;
  xslt_hash_table();
  
  virtual ~xslt_hash_table() = 0;
};

class xslt_hash_entry
{
  friend xslt_hash_table;
  friend xslt_hash_table::iterator;
  
protected:
  xslt_hash_entry *m_next;
  unsigned m_hash;

  xslt_hash_entry(unsigned hash)
    : m_hash(hash) {}
  virtual ~xslt_hash_entry() = 0;
};

class xslt_hash_table::iterator
{
  xslt_hash_table *m_ht;
  unsigned m_i;
  xslt_hash_entry *m_p;
  
public:
  iterator(xslt_hash_table *ht)
    : m_ht(ht), m_i(0), m_p(0) {};
  xslt_hash_entry *next();
};


/* xslt_stylesheet.h */

class XSLName;

template <class V>
class XSLHashTable : xslt_hash_table
{
public:
  struct XSLAssoc : xslt_hash_entry
    {
    /* NOTE: Doesn't own either names or values */
    XSLName *m_name;
    V *m_value;

    XSLAssoc(XSLName *name, V *value)
      : m_name(name), m_value(value)
      , xslt_hash_entry(name->Hash())
      {}
  };
  class iterator;
  friend iterator;
};

template<class V>
class XSLHashTable<V>::iterator : xslt_hash_table::iterator
{
public:
  iterator(XSLHashTable<V> *ht) : xslt_hash_table::iterator(ht) {}
  V* next() { return (V*) xslt_hash_table::iterator::next(); }
};


More information about the Gcc-bugs mailing list