struct C
{
  int a;
  int *b;
  int *c1 (int x) { return new int[sizeof (int) * x]; }
  void c2 (int *x, int *y, int z)
  {
    for (int i = 0; i < z; i++)
      y[i] = x[i];
  }
  C (int x = 0) : a (x)
  {
    if (a)
      {
        b = c1 (a);
        for (int i = 0; i < a; i++)
          b[i] = 0;
      }
  }
  C (const C & x) : a (x.a)
  {
    if (a)
      {
        b = c1 (a);
        c2 (x.b, b, a);
      }
  }
  ~C (void) { if (a) delete b; }
  int &operator [] (int x)
  {
    if (a == 0 && x == 0)
      {
        a = 1;
        b = c1 (1);
        b[0] = 0;
      }
    else
      {
        C e (*this);
        a = x + 1;
        b = c1 (a);
        c2 (e.b, b, e.a);
        for (int i = e.a; i < a; i++)
          b[i] = 0;
      }
    return b[x];
  }
  C & operator << (int x) { (*this)[a] = x; return *this; }
};

int
bar (void)
{
  C a;
  int f = 1;
  while (f != -1)
    {
      f = 0;
      a << 1;
    }
  return 0;
}

ICEs at -O2 in coalesce_abnormal_edges.  The bug is not present on HEAD
and 3.4.x compiles it just fine as well.

-- 
           Summary: ICE in coalesce_abnormal_edges
           Product: gcc
           Version: 4.0.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jakub at redhat dot com
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22415

Reply via email to