This was fixed by r12-8835-ge8d5f3a1b5a583 which surely made it latent but richi points out it was likely an instance of PR90348. -fstack-reuse continues to be a menace, so let's add the testcase.
gcc/testsuite/ChangeLog: PR middle-end/90348 PR tree-optimization/106073 * gcc.dg/pr106073.c: New test. --- OK? gcc/testsuite/gcc.dg/pr106073.c | 123 ++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr106073.c diff --git a/gcc/testsuite/gcc.dg/pr106073.c b/gcc/testsuite/gcc.dg/pr106073.c new file mode 100644 index 00000000000..570e68868b2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr106073.c @@ -0,0 +1,123 @@ +/* { dg-do run } */ +/* { dg-options "-O3" } */ +int a, f = 1, h, l, m = 1, o, r = 4, q, s, x, e, aa, ab, ac, *ad, ae = 5, **y, **af, ag, ah, ai, aj; +static int c[6], d, g[6][5], n, *v = &s, ak; +volatile int p; +const volatile int al; +static volatile int t, u, w = 3, z, am, an; +static int ao(); +void ap(); +static void aq() { + int ar[4] = {6, 6, 6, 6}, as[1], i, j; + as[0] = 0; + if (m) { + int at[11] = {4, 4, 6, 5, 7, 0, 7, 6, 7, 6, 6}, *au, *av[7], k; + au = (int*) &au; + for (i = 0; i < 1; i++) + for (j = 0; j < 1; j++) + for (k = 0; k < 7; k++) { + (t || n) && u; + av[k] = 0; + } + y = av; + while (o) { + int *b[2] = {as, ar}; + *af = at; + } + m = 0; + } +} +inline void ap() { + for (; l <= 4; l++) { + *v = 0; + aq(); + if (a) + break; + for (; q; q++) + ; + } +} +int ao() { + int be = 0, j; + if (n) + aa = d = 0; + l = 0; + for (; be < 2; be++) { + int bf[7][2]; + for (ai = 0; ai < 7; ai++) + for (j = 0; j < 2; j++) + bf[ai][j] = 5; + if (be) { + for (; h >= 0; h--) { + while (z >= w) { + ap(); + *ad = 0; + } + ap(); + } + return bf[3][0]; + } + if (bf[3][0]) + continue; + while (1) + ; + } + return 0; +} +static void aw() { + for (; ah; ah++) { + p = 0; + p = 0; + } + int ax = ~e; + L1: + e = a = 0; + L2: + if (!r) + goto L3; + if (!ax) + goto L2; + if (d) + goto L1; + if (!ae) + goto L1; + if (w && x <= 808 && f) + ag = ao(); + g[0][4] = ag; + if (a) { + int bd; + n++; + while (n) + for (bd = 0; bd < 7; bd++) { + am; + am; + am; + am; + d = c[d ^ am]; + } + } else { + L3: + an; + for (; ak; ak++) { + int bc = 7; + for (; bc >= 0; bc--) { + al; + al; + d = f && an; + an; + } + } + } +} +int main() { + int k; + for (; aj < 6; aj++) + c[0] = aj; + aw(); + for (aj = 0; aj < 6; aj++) + for (k = 0; k < 5; k++) + d = c[d ^ g[aj][k]]; + if (d != 5) + __builtin_abort(); + return 0; +} -- 2.47.0