http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48161
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-03-17 15:00:56 UTC --- Reduced testcase for -O2: typedef struct T *R; typedef union P { int i; } S; struct T { union { S f[1]; } u; }; struct G { int l; int t; int r; }; typedef struct G H; typedef struct { H v[1]; } V; H * f1 (V *x, unsigned y) { return &x->v[y]; } typedef struct { V b; } W; W *h; int foo (R x, R y) { if ((f1 (&h->b, y->u.f[0].i)->t ? f1 (&h->b, y->u.f[0].i)->t : 0) - f1 (h ? &h->b : 0, x->u.f[0].i)->r - (f1 (h ? &h->b : 0, x->u.f[0].i)->t > 0 ? 5 : 0)) return 1; }