/* Spurious uninitialized variable warnings.  Slight variant on the
   documented case, inspired by reg-stack.c:record_asm_reg_life.  */

/* { dg-do compile } */
/* { dg-options "-O -Wuninitialized" } */

struct foo
{
    int type;
    struct foo *car;
    struct foo *cdr;
    char *data;
    int data2;
};

extern void use(struct foo *);

#define CLOBBER 6
#define PARALLEL 3

void
func(struct foo *list, int count)
{
    int n_clobbers = 0;
    int i;
    struct foo **clob_list;   /* { dg-bogus "clob_list" "uninitialized variable warning" { xfail *-*-* } } */

    if(list[0].type == PARALLEL)
    {
	clob_list = __builtin_alloca(count * sizeof(struct foo *));
	
	for(i = 1; i < count; i++)
	{
	    if(list[i].type == CLOBBER)
		clob_list[n_clobbers++] = &list[i];
	}
    }

    for(i = 0; i < n_clobbers; i++)
	use(clob_list[i]);
}
