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