PR c/97172 - ICE: tree code 'ssa_name' is not supported in LTO streams
authorMartin Sebor <msebor@redhat.com>
Fri, 19 Feb 2021 18:06:06 +0000 (11:06 -0700)
committerMartin Sebor <msebor@redhat.com>
Fri, 19 Feb 2021 18:06:06 +0000 (11:06 -0700)
gcc/ChangeLog:

PR c/97172
* attribs.c (init_attr_rdwr_indices): Guard vblist use.
(attr_access::free_lang_data): Remove a spurious test.

gcc/testsuite/ChangeLog:

PR c/97172
* gcc.dg/pr97172.c: Add test cases.

gcc/attribs.c
gcc/testsuite/gcc.dg/pr97172.c

index 81322d40f1dd63072ce3a9822ac96efd5275144c..60933d20810d9aeb43686ca2d74e2aad59638cee 100644 (file)
@@ -2124,7 +2124,7 @@ init_attr_rdwr_indices (rdwr_map *rwm, tree attrs)
                  if (*m == '$')
                    {
                      ++m;
-                     if (!acc.size)
+                     if (!acc.size && vblist)
                        {
                          /* Extract the list of VLA bounds for the current
                             parameter, store it in ACC.SIZE, and advance
@@ -2252,10 +2252,6 @@ attr_access::free_lang_data (tree attrs)
       if (!vblist)
        continue;
 
-      vblist = TREE_VALUE (vblist);
-      if (!vblist)
-       continue;
-
       for (vblist = TREE_VALUE (vblist); vblist; vblist = TREE_CHAIN (vblist))
        {
          tree *pvbnd = &TREE_VALUE (vblist);
index ab5b2e9e7e9cde92ac76097ea0802c6948ecd5f5..8ae6342db7f9efd756c85eeb9068dfc81915039c 100644 (file)
@@ -30,21 +30,52 @@ void fnp1_np1_np1 (int a[n + 1][n + 1][n + 1]);
 
 void gn (int a[n]) { fn (a); }
 void gnp1 (int a[n + 1]) { fnp1 (a); }
+void gnd2p1 (int a[n / 2 + 1]) { fnp1 (a); }
 
 void gx_n (int a[][n]) { fx_n (a); }
 void gx_np1 (int a[][n + 1]) { fx_np1 (a); }
+void gx_nd2p1 (int a[][n / 2 + 1]) { fx_np1 (a); }
 
 void g2_n (int a[2][n]) { f2_n (a); }
 void g2_np1 (int a[2][n + 1]) { f2_np1 (a); }
+void g2_nd2p1 (int a[2][n / 2 + 1]) { f2_np1 (a); }
 
 void gn_3 (int a[n][3]) { fn_3 (a); }
 void gnp1_3 (int a[n + 1][3]) { fnp1_3 (a); }
+void gnd2p1_3 (int a[n / 2 + 1][3]) { fnp1_3 (a); }
 
 void gn_n (int a[n][n]) { fn_n (a); }
 void gn_np1 (int a[n][n + 1]) { fn_np1 (a); }
 void gnp1_np1 (int a[n + 1][n + 1]) { fnp1_np1 (a); }
+void gnd2p1_nd2p1 (int a[n / 2 + 1][n / 2 + 1]) { fnp1_np1 (a); }
 
 void gn_n_n (int a[n][n][n]) { fn_n_n (a); }
 void gn_n_np1 (int a[n][n][n + 1]) { fn_n_np1 (a); }
 void gn_np1_np1 (int a[n][n + 1][n + 1]) { fn_np1_np1 (a); }
 void gnp1_np1_np1 (int a[n + 1][n + 1][n + 1]) { fnp1_np1_np1 (a); }
+void gnd2p1_nd2p1_nd2p1 (int a[n / 2 + 1][n / 2 + 1][n / 2 + 1])
+{ fnp1_np1_np1 (a); }
+
+
+void fna3_1 (int n,
+            int a[n / 2 + 1],
+            int b[n / 2 + 1],
+            int c[n / 2 + 1]);
+
+void gna3_1 (int n,
+            int a[n / 2 + 1],
+            int b[n / 2 + 1],
+            int c[n / 2 + 1]) { fna3_1 (n, a, b, c); }
+
+void fna3_2_3_4 (int n,
+                int a[n / 2 + 1][n / 2 + 2],
+                int b[n / 2 + 1][n / 2 + 2][n / 2 + 3],
+                int c[n / 2 + 1][n / 2 + 2][n / 2 + 3][n / 2 + 4]);
+
+void gna3_2_3_4 (int n,
+                int a[n / 2 + 1][n / 2 + 2],
+                int b[n / 2 + 1][n / 2 + 2][n / 2 + 3],
+                int c[n / 2 + 1][n / 2 + 2][n / 2 + 3][n / 2 + 4])
+{
+  fna3_2_3_4 (n, a, b, c);
+}