https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111519
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Slightly cleaned up testcase: int a, o; char b, f, i; long c; static signed char d; static char g; unsigned *h; signed char *e = &f; static signed char **j = &e; static long k[2]; unsigned **l = &h; short m; volatile int z; __attribute__((noipa)) void foo (char *p) { (void) p; } int main () { int p = z; signed char *n = &d; *n = 0; while (c) for (; i; i--) ; for (g = 0; g <= 1; g++) { *n = **j; k[g] = 0 != &m; *e = l && k[0]; } if (p) foo (&b); for (; o < 4; o++) { a = d; if (p) foo (&b); } if (a != 1) __builtin_abort (); }