------- Comment #3 from rguenth at gcc dot gnu dot org 2008-10-02 14:10 ------- Confirmed. Reduced testcase:
struct QListData { struct Data { int ref; int alloc, begin, end; void *array[1]; }; Data *d; inline void **at(int i) const { return d->array + d->begin + i; } }; template <typename T> class QList { struct Node { void *v; inline T &t() { return *reinterpret_cast<T*>(this); } }; union { QListData p; QListData::Data *d; }; public: T &operator[](int i) { if (d->ref != 1) detach_helper(); return reinterpret_cast<Node *>(p.at(i))->t(); } void insert(int i, const T &t); void detach_helper(); }; class QPoint { int xp; int yp; }; QList<QPoint> pieceLocations; void mousePressEvent(int found) { QPoint location = pieceLocations[found]; pieceLocations.insert(found, location); } somebody looks up an ARRAY_REF from the nary op table. Which usually happens with invalid gimple. But I have to check further. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Component|c++ |tree-optimization Ever Confirmed|0 |1 Keywords| |ice-on-valid-code Last reconfirmed|0000-00-00 00:00:00 |2008-10-02 14:10:57 date| | Summary|ice for legal C++ code with |[4.4 Regression] ice for |-O2 on 20080926 |legal C++ code with -O2 on | |20080926 Target Milestone|--- |4.4.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37716