1 // PR c++/33407 2 // { dg-do run } 3 // { dg-options "-O2 -fstrict-aliasing" } 4 5 extern "C" void * malloc(__SIZE_TYPE__); 6 extern "C" void abort(void); 7 8 void *p; init(void)9void __attribute__((noinline)) init(void) 10 { 11 p = malloc(4); 12 } 13 new(__SIZE_TYPE__)14inline void *operator new(__SIZE_TYPE__) 15 { 16 return p; 17 } 18 delete(void *)19inline void operator delete (void*) {} 20 doit(int n)21int * __attribute__((noinline)) doit(int n) 22 { 23 float *q; 24 int *r; 25 26 for (int i=0; i<n; ++i) 27 { 28 q = new float; 29 *q = 1.0; 30 delete q; 31 r = new int; 32 *r = 1; 33 } 34 35 return r; 36 } 37 main()38int main() 39 { 40 init(); 41 if (*doit(1) != 1) 42 abort(); 43 return 0; 44 } 45