1// { dg-do run  }
2// PRMS Id: 5286
3// Bug: g++ forgets side-effects of object in call to nonexistent destructor.
4
5#include <new>
6
7int r;
8
9template <class T> struct A {
10  T *p;
11  int i;
12  A() { i = 0; p = (T*) new char[sizeof (T)]; new (p + i++) T; }
13  ~A() { p[--i].~T(); r = i; }
14};
15
16int main()
17{
18  { A<int> a; }
19
20  int* p = (int*) new char[sizeof (int)];
21  new (p + r++) int;
22  typedef int I;
23  p[--r].~I();
24
25  return r;
26}
27