xref: /openbsd-src/gnu/usr.bin/gcc/gcc/testsuite/gcc.dg/uninit-1.c (revision c87b03e512fc05ed6e0222f6fb0ae86264b1d05b)
1*c87b03e5Sespie /* Spurious uninitialized variable warnings, case 1.
2*c87b03e5Sespie    Taken from cppfiles.c (merge_include_chains) */
3*c87b03e5Sespie /* { dg-do compile } */
4*c87b03e5Sespie /* { dg-options "-O -Wuninitialized" } */
5*c87b03e5Sespie 
6*c87b03e5Sespie struct list
7*c87b03e5Sespie {
8*c87b03e5Sespie   struct list *next;
9*c87b03e5Sespie   int id;
10*c87b03e5Sespie };
11*c87b03e5Sespie 
12*c87b03e5Sespie extern void free (void *);
13*c87b03e5Sespie 
remove_dupes(struct list * el)14*c87b03e5Sespie void remove_dupes (struct list *el)
15*c87b03e5Sespie {
16*c87b03e5Sespie   struct list *p, *q, *r;  /* { dg-bogus "r" "uninitialized variable warning" { xfail *-*-* } } */
17*c87b03e5Sespie 
18*c87b03e5Sespie   for (p = el; p; p = p->next)
19*c87b03e5Sespie   {
20*c87b03e5Sespie     for (q = el; q != p; q = q->next)
21*c87b03e5Sespie       if (q->id == p->id)
22*c87b03e5Sespie       {
23*c87b03e5Sespie 	r->next = p->next;
24*c87b03e5Sespie 	free (p);
25*c87b03e5Sespie 	p = r;
26*c87b03e5Sespie 	break;
27*c87b03e5Sespie       }
28*c87b03e5Sespie     r = p;
29*c87b03e5Sespie   }
30*c87b03e5Sespie }
31