// { dg-do compile } // { dg-options "--param max-unroll-times=32" } struct A {}; A **q; struct B { A **j; B () { j = q; } A *& operator[] (unsigned long x) { return j[x]; } }; struct C { C (int r) : v (), s (r) {} A *& operator () (int i, int j) { return v[i * s + j]; } B v; int s; }; struct D { D () { unsigned h = 2; for (int i = 0; i < 1; ++i, h *= 2) { C w (h); for (unsigned j = 0; j < h; ++j) for (unsigned k = 0; k < h; ++k) w (j, k) = new A; } } }; void foo () { for (int i = 0; i < 3; i++) A (), A (), D (); }