/* Spurious uninitialized variable warnings, case 1.
   Taken from cppfiles.c (merge_include_chains) */
/* { dg-do compile } */
/* { dg-options "-O -Wuninitialized" } */

struct list
{
  struct list *next;
  int id;
};

extern void free (void *);

void remove_dupes (struct list *el)
{
  struct list *p, *q, *r;  /* { dg-bogus "r" "uninitialized variable warning" } */

  for (p = el; p; p = p->next)
  {
    for (q = el; q != p; q = q->next)
      if (q->id == p->id)
      {
	r->next = p->next;
	free (p);
	p = r;
	break;
      }
    r = p;
  }
}
