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 19 // C++11 and earlier delete(void *)20inline void operator delete (void*) {} 21 22 // C++14 profile delete(void *,__SIZE_TYPE__)23inline void operator delete (void*, __SIZE_TYPE__) {} 24 doit(int n)25int * __attribute__((noinline)) doit(int n) 26 { 27 float *q; 28 int *r; 29 30 for (int i=0; i<n; ++i) 31 { 32 q = new float; 33 *q = 1.0; 34 delete q; 35 r = new int; 36 *r = 1; 37 } 38 39 return r; 40 } 41 main()42int main() 43 { 44 init(); 45 if (*doit(1) != 1) 46 abort(); 47 return 0; 48 } 49