Adding attribute access to declarations of functions that take
VLA arguments relies on the front end adding attribute "arg spec"
to each VLA parameter.  Like the VLA bounds in attribute access,
the same VLA bounds in attribute "arg spec" can cause trouble
during LTO streaming which expects front end trees to have been
either gimplified or removed.  For some reason, with arg spec
the LTO abort happens only with -fpic/-shared and so it escaped
testing in the prior fixes.

The attached patch clears the bounds from attribute "arg spec."

Martin
PR middle-end/97172 - ICE: tree code ‘ssa_name’ is not supported in LTO streams

gcc/ChangeLog:
	PR middle-end/97172
	* attribs.c (attr_access::free_lang_data): Clear attribute arg spec
	from function arguments.

gcc/c/ChangeLog:

	PR middle-end/97172
	* c-decl.c (free_attr_access_data): Clear attribute arg spec.

gcc/testsuite/ChangeLog:

	PR middle-end/97172
	* gcc.dg/pr97172-2.c: New test.


diff --git a/gcc/attribs.c b/gcc/attribs.c
index 60933d20810..16c6b12d477 100644
--- a/gcc/attribs.c
+++ b/gcc/attribs.c
@@ -2265,6 +2265,14 @@ attr_access::free_lang_data (tree attrs)
 	  *pvbnd = NULL_TREE;
 	}
     }
+
+  for (tree argspec = attrs; (argspec = lookup_attribute ("arg spec", argspec));
+       argspec = TREE_CHAIN (argspec))
+    {
+      /* Same as above.  */
+      tree *pvblist = &TREE_VALUE (argspec);
+      *pvblist = NULL_TREE;
+    }
 }
 
 /* Defined in attr_access.  */
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index a5852a3bae7..b559ed5d76a 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -12166,6 +12166,10 @@ free_attr_access_data ()
   /* Iterate over all functions declared in the translation unit.  */
   FOR_EACH_FUNCTION (n)
     {
+      for (tree parm = DECL_ARGUMENTS (n->decl); parm; parm = TREE_CHAIN (parm))
+	if (tree attrs = DECL_ATTRIBUTES (parm))
+	  attr_access::free_lang_data (attrs);
+
       tree fntype = TREE_TYPE (n->decl);
       if (!fntype)
 	continue;
diff --git a/gcc/testsuite/gcc.dg/pr97172-2.c b/gcc/testsuite/gcc.dg/pr97172-2.c
new file mode 100644
index 00000000000..6f355bb9ed9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr97172-2.c
@@ -0,0 +1,8 @@
+/* PR middle-end/97172 - ICE: tree code ‘ssa_name’ is not supported in LTO
+   streams
+   { dg-do link }
+   { dg-options "-Wall -flto -fpic -shared" }
+   { dg-require-effective-target fpic }
+   { dg-require-effective-target lto } */
+
+#include "pr97172.c"

Reply via email to