blob: 62912f372de22492d57b783ee9b9d6dae80c2b30 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-threadfull1-stats" } */
struct S;
struct S { struct S *next; };
int foo (struct S *chain, _Bool is_ctor, _Bool is_dtor)
{
int num_args = 0;
if (chain) /* A */
{
do {
num_args++;
chain = chain->next;
if (!chain)
break;
} while (1);
}
if (is_ctor)
num_args++; /* B */
if (is_dtor)
num_args++;
else
{
if (num_args > 2) /* C */
__builtin_puts ("x");
}
return num_args;
}
/* We want to thread both paths from A with NULL chain to C, the one through
B and one around it.
??? Ideally we'd thread one "path" containing the half-diamond with B. */
/* { dg-final { scan-tree-dump "Jumps threaded: 2" "threadfull1" } } */