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

Reply via email to