1 /* { dg-do compile } */
2 /* { dg-options "-O2 -flto -fdump-tree-evrp" } */
3 typedef struct rtx_def *rtx;
4 typedef struct cselib_val_struct
5 {
6   union
7   {
8   } u;
9   struct elt_loc_list *locs;
10 }
11 cselib_val;
12 struct elt_loc_list
13 {
14   struct elt_loc_list *next;
15   rtx loc;
16 };
17 static int n_useless_values;
18 unchain_one_elt_loc_list (pl)
19      struct elt_loc_list **pl;
20 {
21   struct elt_loc_list *l = *pl;
22   *pl = l->next;
23 }
24 
discard_useless_locs(x,info)25 discard_useless_locs (x, info)
26      void **x;
27 {
28   cselib_val *v = (cselib_val *) * x;
29   struct elt_loc_list **p = &v->locs;
30   int had_locs = v->locs != 0;
31   while (*p)
32     {
33       unchain_one_elt_loc_list (p);
34       p = &(*p)->next;
35     }
36   if (had_locs && v->locs == 0)
37     {
38       n_useless_values++;
39     }
40 }
41 /* { dg-final { scan-tree-dump-times "n_useless_values" 2 "evrp" } } */
42