/* This test was causing an ICE in DCE because we were allowing void *
|
/* This test was causing an ICE in DCE because we were allowing void *
|
pointers to have a memory tag, which we were copying when doing copy
|
pointers to have a memory tag, which we were copying when doing copy
|
propagation. Since void * can never be de-referenced, its memory tag
|
propagation. Since void * can never be de-referenced, its memory tag
|
was never renamed. */
|
was never renamed. */
|
|
|
/* { dg-do compile } */
|
/* { dg-do compile } */
|
/* { dg-options "-O -ftree-dominator-opts" } */
|
/* { dg-options "-O -ftree-dominator-opts" } */
|
|
|
typedef __SIZE_TYPE__ size_t;
|
typedef __SIZE_TYPE__ size_t;
|
typedef union tree_node *tree;
|
typedef union tree_node *tree;
|
struct operands_d
|
struct operands_d
|
{
|
{
|
tree *def_op;
|
tree *def_op;
|
};
|
};
|
|
|
void
|
void
|
gt_ggc_mx_operands_d (void *x_p)
|
gt_ggc_mx_operands_d (void *x_p)
|
{
|
{
|
struct operands_d *const x = (struct operands_d *) x_p;
|
struct operands_d *const x = (struct operands_d *) x_p;
|
if ((*x).def_op != ((void *) 0))
|
if ((*x).def_op != ((void *) 0))
|
{
|
{
|
size_t i0;
|
size_t i0;
|
do
|
do
|
{
|
{
|
const void *const a__ = ((*x).def_op);
|
const void *const a__ = ((*x).def_op);
|
if (a__ != ((void *) 0) && a__ != (void *) 1)
|
if (a__ != ((void *) 0) && a__ != (void *) 1)
|
ggc_set_mark (a__);
|
ggc_set_mark (a__);
|
}
|
}
|
while (0);
|
while (0);
|
for (i0 = 0; i0 < (size_t) (1); i0++)
|
for (i0 = 0; i0 < (size_t) (1); i0++)
|
{
|
{
|
do
|
do
|
{
|
{
|
if ((void *) (*x).def_op[i0] != ((void *) 0))
|
if ((void *) (*x).def_op[i0] != ((void *) 0))
|
gt_ggc_mx_lang_tree_node ((*x).def_op[i0]);
|
gt_ggc_mx_lang_tree_node ((*x).def_op[i0]);
|
}
|
}
|
while (0);
|
while (0);
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|