1 // PR c++/34862 2 // { dg-do run } 3 // { dg-options "-O2" } 4 5 typedef __SIZE_TYPE__ size_t; 6 extern "C" void abort (); 7 8 struct T 9 { 10 void *operator new (size_t, char *&); TT11 T () { i[0] = 1; i[1] = 2; } 12 int i[2]; 13 }; 14 15 void * new(size_t size,char * & p)16T::operator new (size_t size, char *&p) 17 { 18 void *o = (void *) p; 19 p += size; 20 return o; 21 } 22 23 T * f(char * & x)24f (char *&x) 25 { 26 return new (x) T (); 27 } 28 29 char buf[10 * sizeof (T)] __attribute__((aligned (__alignof (T)))); 30 31 int main()32main () 33 { 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 (); 40 } 41