// 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; }