// PR target/25005 // { dg-options "-O2 -funroll-loops" } // { dg-do compile } inline void *operator new (__SIZE_TYPE__, void *__p) throw() { return __p; } struct M { ~M() { } }; struct P { P () { v[0] = 0; v[1] = 0; v[2] = 0; } P (const P &x) { for (int i = 0; i < 3; ++i) v[i] = x.v[i]; } double v[3]; }; struct V : public M { V (const P *x, const P *y) { P *b = this->a = ::new P[2]; for (; x != y; ++x, ++b) ::new (b) P(*x); } P *a; }; void bar (const V &); void foo () { const P d[2] = { P(), P() }; bar (V (&d[0], &d[2])); }