https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108657
--- Comment #16 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Slightly more reduced: int a = -8, c, e, f, g, i; short b; static int *d = &c; int m[256]; unsigned n = ~0U; void foo (int b) { n = (n >> 8) ^ m[(n ^ b) & 255]; } void bar (long x) { n = (n >> 8) ^ m[(n ^ x) & 255]; foo (x >> 8); foo (x >> 16); } int main () { if (__CHAR_BIT__ != 8 || __SIZEOF_SHORT__ != 2 || __SIZEOF_INT__ != 4) return 0; for (g = 0; g < 256; g++) m[g] = g; b = 53935 & a; a = -18; for (c = 1; c >= 0; c--) { e = 0; for (int j = 0; j <= 3; j++) { short k[1]; if (e) break; e ^= f; } } *d = 8 || 0; bar (a); bar (b); bar (2185655400); bar (c); if (n != 0x30) __builtin_abort (); }