[gcc r16-3849] lto/121935 - visit all DECL_ARGUMENTS in free-lang-data

Richard Biener rguenth@gcc.gnu.org
Sun Sep 14 11:25:00 GMT 2025


https://gcc.gnu.org/g:38666cbccff5114e2f23930fae180f03c385eb45

commit r16-3849-g38666cbccff5114e2f23930fae180f03c385eb45
Author: Richard Biener <rguenther@suse.de>
Date:   Sun Sep 14 11:01:11 2025 +0200

    lto/121935 - visit all DECL_ARGUMENTS in free-lang-data
    
    With no longer visiting TREE_CHAIN for decls we have to visit
    the DECL_ARGUMENT chain manually.
    
            PR lto/121935
            * ipa-free-lang-data.cc (find_decls_types_r): Visit DECL_ARGUMENTS
            chain manually.
    
            * g++.dg/lto/pr121935_0.C: New testcase.

Diff:
---
 gcc/ipa-free-lang-data.cc             |  3 ++-
 gcc/testsuite/g++.dg/lto/pr121935_0.C | 13 +++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc
index 41afc6ec82fc..8196cab60793 100644
--- a/gcc/ipa-free-lang-data.cc
+++ b/gcc/ipa-free-lang-data.cc
@@ -735,7 +735,8 @@ find_decls_types_r (tree *tp, int *ws, void *data)
 
       if (TREE_CODE (t) == FUNCTION_DECL)
 	{
-	  fld_worklist_push (DECL_ARGUMENTS (t), fld);
+	  for (tree arg = DECL_ARGUMENTS (t); arg; arg = DECL_CHAIN (arg))
+	    fld_worklist_push (arg, fld);
 	  fld_worklist_push (DECL_RESULT (t), fld);
 	}
       else if (TREE_CODE (t) == FIELD_DECL)
diff --git a/gcc/testsuite/g++.dg/lto/pr121935_0.C b/gcc/testsuite/g++.dg/lto/pr121935_0.C
new file mode 100644
index 000000000000..a4519b1d3ad3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr121935_0.C
@@ -0,0 +1,13 @@
+// { dg-lto-do assemble }
+// { dg-lto-options {{-flto -Wno-return-type}} }
+
+struct a {
+  static int b;
+};
+template <int> struct c {
+  struct d {
+    d e(unsigned, unsigned, bool, bool, bool, unsigned, a);
+  };
+};
+template <>
+c<2>::d c<2>::d::e(unsigned, unsigned, bool, bool, bool, unsigned, const a) { }


More information about the Gcc-cvs mailing list