// PR optimization/4994
// This testcase ICEd because movsi was not supporting direct
// mmx -> mmx register moves.
// { dg-do compile }
// { dg-options "-O2" }
// { dg-options "-fno-exceptions -O2 -mmmx -fPIC" { target i?86-*-*  } }

struct A {
  unsigned a0;
  bool a1 () { return !--a0; }
  void a2 ();
};

struct B
{
  B ();
  B (const B &);
  ~B();
  B &operator= (const B &);
  B b0 (unsigned long x, int y = 0, int z = 10) const;

private:
  A *b1;
  static A *b2;
};

inline B::~B()
{
  if (b1->a1 () && b1 == b2)
    b1->a2();
}

struct C
{
  C *c0;
};

struct D
{
  C *d0;
  D ();
  D (const D &c0) {}
  D &operator++ () {
    C *x = d0; C *y = x->c0;
    while (x == y->c0)
      x = y;
    d0 = x;
    return *this;
  }
};

B foo (const char *x, const B &y);

void bar (void)
{
  B *y = 0;
  B z;
  for (unsigned long l = 0; l < 2147483647L * 2UL + 1; l++)
    {
      z = y->b0 (l);
      *y = foo ("data", z);
    }
  D d;
  ++d;
}
