This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
c++/358: Re: C++ bug, appearantly template related.
- To: gcc-gnats at gcc dot gnu dot org
- Subject: c++/358: Re: C++ bug, appearantly template related.
- From: "Martin v. Loewis" <martin at loewis dot home dot cs dot tu-berlin dot de>
- Date: Wed, 28 Jun 2000 22:46:38 +0200
- References: <nnituuunqm.fsf@sture.lysator.liu.se>
- Resent-Cc: gcc-prs at gcc dot gnu dot org, jason at gcc dot gnu dot org, nisse at lysator dot liu dot se
- Resent-Reply-To: gcc-gnats@gcc.gnu.org, "Martin v. Loewis" <martin@loewis.home.cs.tu-berlin.de>
>Number: 358
>Category: c++
>Synopsis: C++ bug, appearantly template related.
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: analyzed
>Class: ice-on-legal-code
>Submitter-Id: net
>Arrival-Date: Wed Jun 28 13:56:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: nisse@lysator.liu.se (Niels Möller)
>Release: 2.95.2
>Organization:
>Environment:
>Description:
Date: 28 Jun 2000 12:02:57 +0200
Original-Message-ID: <nnituuunqm.fsf@sture.lysator.liu.se>
Lines: 94
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
>How-To-Repeat:
/* xslt_hashtable.h */
class xslt_hash_table;
class xslt_hash_entry;
class xslt_hash_table
{
public:
class iterator;
friend iterator;
protected:
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(); }
};
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: