/* PR optimization/5844
   This testcase was miscompiled because of an rtx sharing bug.  */
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-options "-O2 -mtune=i586" { target i?86-*-* } } */

struct A
{
  struct A *a;
  int b;
};

struct B
{
  struct A *c;
  unsigned int d;
};

struct A p = { &p, -1 };
struct B q = { &p, 0 };

extern void abort (void);
extern void exit (int);

struct B *
foo (void)
{
  return &q;
}

void
bar (void)
{
  struct B *e = foo ();
  struct A *f = e->c;
  int g = f->b;

  if (++g == 0)
    {
      e->d++;
      e->c = f->a;
    }

  f->b = g;
}

int
main ()
{
  bar ();
  if (p.b != 0 || q.d != 1 || q.c != &p)
    abort ();
  exit (0);
}
