/* { dg-do compile } */ /* { dg-options "-O2 -flto -fdump-tree-evrp" } */ typedef struct rtx_def *rtx; typedef struct cselib_val_struct { union { } u; struct elt_loc_list *locs; } cselib_val; struct elt_loc_list { struct elt_loc_list *next; rtx loc; }; static int n_useless_values; unchain_one_elt_loc_list (pl) struct elt_loc_list **pl; { struct elt_loc_list *l = *pl; *pl = l->next; } discard_useless_locs (x, info) void **x; { cselib_val *v = (cselib_val *) * x; struct elt_loc_list **p = &v->locs; int had_locs = v->locs != 0; while (*p) { unchain_one_elt_loc_list (p); p = &(*p)->next; } if (had_locs && v->locs == 0) { n_useless_values++; } } /* { dg-final { scan-tree-dump-times "n_useless_values" 2 "evrp" } } */