Merge with main truk.
[official-gcc.git] / gcc / testsuite / g++.dg / init / new27.C
bloba6271c930d92768b891852a74080d58f22c14183
1 // PR c++/34862
2 // { dg-do run }
3 // { dg-options "-O2" }
5 typedef __SIZE_TYPE__ size_t;
6 extern "C" void abort ();
8 struct T
10   void *operator new (size_t, char *&);
11   T () { i[0] = 1; i[1] = 2; }
12   int i[2];
15 void *
16 T::operator new (size_t size, char *&p)
18   void *o = (void *) p;
19   p += size;
20   return o;
23 T *
24 f (char *&x)
26   return new (x) T ();
29 char buf[10 * sizeof (T)] __attribute__((aligned (__alignof (T))));
31 int
32 main ()
34   char *p = buf;
35   T *t = f (p);
36   if (p != buf + sizeof (T))
37     abort ();
38   if (t->i[0] != 1 || t->i[1] != 2)
39     abort ();