G++/backend BUG: ICE in verify_local_live_at_start (flow.c)
Nathan Sidwell
nathan@acm.org
Tue Nov 30 01:15:00 GMT 1999
Hi,
Here's another failure with the current CVS tree (29th Nov 1999). This fails in
verify_local_live_at_start (flow.c), at the following abort
2541 /* After reload, there are no pseudos, nor subregs of multi-word
2542 registers. The regsets should exactly match. */
2543 if (! REG_SET_EQUAL_P (new_live_at_start, bb->global_live_at_start))
2544 abort ();
Guess they're not :-)
ok to install test?
nathan
--
Dr Nathan Sidwell :: Computer Science Department :: Bristol University
Never hand someone a gun unless you are sure where they will point it
nathan@acm.org http://www.cs.bris.ac.uk/~nathan/ nathan@cs.bris.ac.uk
// Build don't link:
// Copyright (C) 1999 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 29 Nov 1999 <nathan@acm.org>
// Special g++ Options: -ansi -pedantic-errors -O2
typedef unsigned int size_t;
inline void *operator new (size_t, void *place) throw () { return place; }
template<class T> struct Array
{
size_t num;
T *array;
Array ()
:num (0), array (__null ) {}
~Array () {}
T *Hole (size_t ix);
size_t Length () const
{return num;}
T &Index (size_t ix) const
{return array[ix];}
T *Append (T const &obj) throw ()
{return new (Hole (num)) T(obj);}
};
struct RefCount
{
RefCount () {}
static RefCount const *Attach_ (RefCount const *);
static RefCount const *Detach_ (RefCount const *);
};
template<class T> inline T *Attach (T *obj) throw ()
{return (T *)RefCount::Attach_ (obj);}
template<class T> inline T *Detach (T *obj) throw ()
{return (T *)RefCount::Detach_ (obj);}
struct Entry
{
unsigned numVerts;
RefCount *hook;
Entry (size_t numVerts_)
:numVerts (numVerts_), hook (__null) {}
Entry (Entry const &src)
:numVerts (src.numVerts), hook (Attach (src.hook)) {}
~Entry ()
{Detach (hook);}
};
typedef Array<int> IntArray;
typedef Array<Entry> Table;
void Update (IntArray const *p)
{
Table polys;
size_t numVerts = 0;
for (size_t ix = 0; ix != p->Length (); ix++)
{
if (p->Index (ix) < 0)
{
polys.Append (Entry (numVerts));
numVerts = 0;
}
else
numVerts++;
}
} // crash test - XFAIL *-*-*
More information about the Gcc-bugs
mailing list