]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
lto/121935 - visit all DECL_ARGUMENTS in free-lang-data
authorRichard Biener <rguenther@suse.de>
Sun, 14 Sep 2025 09:01:11 +0000 (11:01 +0200)
committerRichard Biener <rguenther@suse.de>
Sun, 14 Sep 2025 11:24:48 +0000 (13:24 +0200)
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.

gcc/ipa-free-lang-data.cc
gcc/testsuite/g++.dg/lto/pr121935_0.C [new file with mode: 0644]

index 41afc6ec82fc8c72d29a98ba3d983ced7ae351e6..8196cab607930c51eeb5fb4e28aa413ef40a57c8 100644 (file)
@@ -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 (file)
index 0000000..a4519b1
--- /dev/null
@@ -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) { }