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