PR testsuite/86649
[official-gcc.git] / gcc / testsuite / g++.dg / tree-ssa / calloc.C
blobe0f128829a2b4a3fa79967ff772fddcf39f3bff7
1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fdump-tree-optimized" } */
4 typedef __SIZE_TYPE__ size_t;
5 inline void* operator new(size_t, void* p) throw() { return p; }
7 typedef void (*handler_t)(void);
8 extern handler_t get_handle();
10 inline void* operator new(size_t sz)
12   void *p;
14   if (sz == 0)
15     sz = 1;
17   while ((p = __builtin_malloc (sz)) == 0)
18     {
19       handler_t handler = get_handle ();
20       if (! handler)
21         throw 42;
22       handler ();
23     }
24   return p;
27 struct vect {
28   int *start, *end;
29   vect(size_t n) {
30     start = end = 0;
31     if (n > (size_t)-1 / sizeof(int))
32       throw 33;
33     if (n != 0)
34       start = static_cast<int*> (operator new (n * sizeof(int)));
35     end = start + n;
36     int *p = start;
37     for (size_t l = n; l > 0; --l, ++p)
38       *p = 0;
39   }
42 void f (void *p, int n)
44   new (p) vect(n);
47 /* { dg-final { scan-tree-dump-times "calloc" 1 "optimized" } } */
48 /* { dg-final { scan-tree-dump-not "malloc" "optimized" } } */
49 /* { dg-final { scan-tree-dump-not "memset" "optimized" } } */