/* { 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" } } */ /* { dg-final { cleanup-tree-dump "gimple" } } */