/* 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" } */
/* { dg-require-effective-target alloca } */

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" } */

    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]);
}
