| /* PR bootstrap/82916 */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2 -fno-tree-dse" } */ |
| |
| struct A { struct A *next; }; |
| struct C |
| { |
| int *of; |
| struct C *parent, *prev, *next; |
| int depth; |
| int min; |
| struct C *min_occ; |
| }; |
| |
| __attribute__((noipa)) struct C * |
| foo (int *node) |
| { |
| struct A *p = __builtin_malloc (sizeof (struct C)); |
| if (!p) |
| return 0; |
| p->next = 0; |
| /* Originally placement new. */ |
| struct C *nw = (struct C *)(void *)p; |
| nw->of = node; |
| nw->parent = 0; |
| nw->prev = 0; |
| nw->next = 0; |
| nw->depth = 0; |
| nw->min_occ = nw; |
| nw->min = 0; |
| return nw; |
| } |
| |
| int |
| main () |
| { |
| int o; |
| struct C *p = foo (&o); |
| if (p) |
| { |
| if (p->of != &o || p->parent || p->prev || p->next || p->depth |
| || p->min || p->min_occ != p) |
| __builtin_abort (); |
| } |
| __builtin_free (p); |
| return 0; |
| } |