1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-pre-stats" } */
5 typedef union tree_node
*tree
;
14 struct tree_common common
;
21 struct tree_common common
;
22 struct tree_list list
;
25 extern void abort (void) __attribute__((noreturn
));
27 void __attribute__((noinline
))
33 /* There are some reloaded loads of *cell, and cell->common.chain on various
35 void __attribute__((noinline
))
36 remove_useless_vars (tree
*unexpanded_var_list
, int dump_file
)
40 for (cell
= unexpanded_var_list
; *cell
; )
42 var
= (*cell
)->list
.value
;
48 *cell
= ((*cell
)->common
.chain
);
52 cell
= &((*cell
)->common
.chain
);
55 extern void *malloc (__SIZE_TYPE__
) __attribute__ ((malloc
));
61 tree unexpanded_var_list
, last
= (tree
) 0;
63 for (i
= 0; i
< 2; i
++)
65 unexpanded_var_list
= malloc (sizeof (struct tree_list
));
66 unexpanded_var_list
->list
.value
= (tree
) (long unsigned) (i
& 1);
67 unexpanded_var_list
->common
.chain
= last
;
68 last
= unexpanded_var_list
;
71 remove_useless_vars (&unexpanded_var_list
, 0);
74 /* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre" } } */
75 /* { dg-final { cleanup-tree-dump "pre" } } */