1 /* Spurious uninitialized variable warnings.  Slight variant on the
2    documented case, inspired by reg-stack.c:record_asm_reg_life.  */
3 
4 /* { dg-do compile } */
5 /* { dg-options "-Wuninitialized" } */
6 /* { dg-require-effective-target alloca } */
7 
8 struct foo
9 {
10     int type;
11     struct foo *car;
12     struct foo *cdr;
13     char *data;
14     int data2;
15 };
16 
17 extern void use(struct foo *);
18 
19 #define CLOBBER 6
20 #define PARALLEL 3
21 
22 void
func(struct foo * list,int count)23 func(struct foo *list, int count)
24 {
25     int n_clobbers = 0;
26     int i;
27     struct foo **clob_list;   /* { dg-bogus "clob_list" "uninitialized variable warning" } */
28 
29     if(list[0].type == PARALLEL)
30     {
31 	clob_list = __builtin_alloca(count * sizeof(struct foo *));
32 
33 	for(i = 1; i < count; i++)
34 	{
35 	    if(list[i].type == CLOBBER)
36 		clob_list[n_clobbers++] = &list[i];
37 	}
38     }
39 
40     for(i = 0; i < n_clobbers; i++)
41 	use(clob_list[i]);
42 }
43