1/* This test was causing an ICE in DCE because we were allowing void *
2   pointers to have a memory tag, which we were copying when doing copy
3   propagation.  Since void * can never be de-referenced, its memory tag
4   was never renamed.  */
5
6/* { dg-do compile } */
7/* { dg-options "-O -ftree-dominator-opts" } */
8
9typedef __SIZE_TYPE__ size_t;
10typedef union tree_node *tree;
11struct operands_d
12{
13  tree *def_op;
14};
15
16void
17gt_ggc_mx_operands_d (void *x_p)
18{
19  struct operands_d *const x = (struct operands_d *) x_p;
20  if ((*x).def_op != ((void *) 0))
21    {
22      size_t i0;
23      do
24	{
25	  const void *const a__ = ((*x).def_op);
26	  if (a__ != ((void *) 0) && a__ != (void *) 1)
27	    ggc_set_mark (a__);
28	}
29      while (0);
30      for (i0 = 0; i0 < (size_t) (1); i0++)
31	{
32	  do
33	    {
34	      if ((void *) (*x).def_op[i0] != ((void *) 0))
35		gt_ggc_mx_lang_tree_node ((*x).def_op[i0]);
36	    }
37	  while (0);
38	}
39    }
40}
41