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)9 void __attribute__((noinline)) init(void)
10 {
11   p = malloc(4);
12 }
13 
new(__SIZE_TYPE__)14 inline void *operator new(__SIZE_TYPE__)
15 {
16   return p;
17 }
18 
delete(void *)19 inline void operator delete (void*) {}
20 
doit(int n)21 int * __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()38 int main()
39 {
40   init();
41   if (*doit(1) != 1)
42     abort();
43   return 0;
44 }
45