/* PR ipa/60013 */ /* { dg-do compile } */ /* { dg-options "-O2" } */ typedef long int jmp_buf[64]; extern int _setjmp (jmp_buf) __attribute__ ((__nothrow__)); struct S { int a, b, c; }; extern struct S *baz (struct S *); static jmp_buf j; static inline int bar (int b, int d) { return (b & d) < 0; } struct S * foo (int a, struct S *b, struct S *c, struct S *d) { if (b->a == 0) { switch (a) { case 8: return baz (b); case 7: bar (b->c, c->b); return 0; case 6: case 5: case 4: return baz (c); case 3: case 2: return baz (d); } return 0; } if (b->a == 1) { if (baz (c)) return c; else if (_setjmp (j)) baz (b); } return 0; }