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

Reply via email to