/* { dg-do compile } */ /* { dg-options "-O2" } */ /* Test check use_block_copy bit propagation in sra element hierarchy. */ typedef unsigned char UINT8 ; typedef unsigned int UINT ; class C4 { public: int xy[2]; }; class C3 { public: inline void Reset() { C4 const mvMax = {0x7fff, 0x7fff}; m42(0,mvMax); m42(1,mvMax); m43(0); }; inline void m42 (UINT i, C4 mv) { mMv[i] = mv; }; inline void m43(UINT j) { m44 (j); d41 = j + 1; }; private: C4 mMv[2]; UINT8 d41; inline void m44 (UINT j) const {}; }; class C2 { private: bool valid; }; class C1 { public: void m1(C3 *c); private: const C2 * d1[2]; void m2(C3 *m); }; void C1::m1 (C3 *r) { C3 x; m2(&x); } void C1::m2(C3 *x) { C3 m3; int i; m3.Reset (); for(i=0; i<2; i++) { const C2 * r = d1[i]; if (r!=__null) { C4 const c400 = {0,0}; m3.m42 (i, c400); } } }