1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-pre-stats" } */
6 typedef union tree_node
*tree
;
15 struct tree_common common
;
22 struct tree_common common
;
23 struct tree_list list
;
26 extern void abort (void) __attribute__((noreturn
));
28 void __attribute__((noinline
))
34 /* There are some reloaded loads of *cell, and cell->common.chain on various
36 void __attribute__((noinline
))
37 remove_useless_vars (tree
*unexpanded_var_list
, int dump_file
)
41 for (cell
= unexpanded_var_list
; *cell
; )
43 var
= (*cell
)->list
.value
;
49 *cell
= ((*cell
)->common
.chain
);
53 cell
= &((*cell
)->common
.chain
);
56 extern void *malloc (__SIZE_TYPE__
) __attribute__ ((malloc
));
62 tree unexpanded_var_list
, last
= (tree
) 0;
64 for (i
= 0; i
< 2; i
++)
66 unexpanded_var_list
= malloc (sizeof (struct tree_list
));
67 unexpanded_var_list
->list
.value
= (tree
) (ptrdiff_t) (i
& 1);
68 unexpanded_var_list
->common
.chain
= last
;
69 last
= unexpanded_var_list
;
72 remove_useless_vars (&unexpanded_var_list
, 0);
75 /* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre" } } */
76 /* { dg-final { cleanup-tree-dump "pre" } } */