/* PR tree-optimization/57149 */ /* { dg-do compile } */ /* { dg-options "-Os -Wuninitialized" } */ struct A { struct A *a, *b; }; struct D { struct A e; }; struct E { unsigned char f; struct { struct A e; } g; }; struct F { struct E i[32]; }; extern int fn0 (void); extern int fn1 (struct E *, struct D *); static inline __attribute__ ((always_inline)) int fn2 (const struct A *x) { return x->a == x; } static int fn3 (struct E *x) { struct D *l, *m; int retval = retval; if (fn2 (&x->g.e)) return 0; for (l = (struct D *) x->g.e.a, m = (struct D *) l->e.a; &l->e != &x->g.e; l = m, m = (struct D *) m->e.a) retval = fn1 (x, l); return retval; } void fn4 (struct F *x, unsigned k) { unsigned i; for (i = 0; i < k; i++) { struct E *y = &x->i[i]; int err = -22; err = fn3 (y); if (y->f == 0) { if (err > 0) err = fn0 (); if (err < 0) /* { dg-bogus "may be used uninitialized in this function" } */ fn0 (); } } }