------- 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