/* { dg-do compile } */
/* { dg-options "-fdump-tree-gimple" } */

struct f
{
  int i;
  int j;
};

struct g
{
  int i;
  struct f j;
  struct f *k;
};

int foo(struct f *x, struct f *y)
{
  return &x->j == &y->j; /* x == y */
}

struct f y;
int bar(struct f *x)
{
  return &x->j == &y.j; /* x == &y */
}

struct g yy;
int foobar(struct g *x)
{
  return &x->j.i == &yy.j.i; /* x == &yy */
}
int foobar2(struct g *x)
{
  return &x->k->i == &yy.k->i; /* x->k == yy.k */
}

/* { dg-final { scan-tree-dump-times "x == y" 1 "gimple" } } */
/* { dg-final { scan-tree-dump-times "x == &y" 2 "gimple" } } */
/* { dg-final { scan-tree-dump "x->k" "gimple" } } */
/* { dg-final { scan-tree-dump "yy.k" "gimple" } } */
