// { dg-do run } // PRMS Id: 5286 // Bug: g++ forgets side-effects of object in call to nonexistent destructor. #include int r; template struct A { T *p; int i; A() { i = 0; p = (T*) new char[sizeof (T)]; new (p + i++) T; } ~A() { p[--i].~T(); r = i; } }; int main() { { A a; } int* p = (int*) new char[sizeof (int)]; new (p + r++) int; typedef int I; p[--r].~I(); return r; }