From: Richard Biener Date: Sun, 14 Sep 2025 09:01:11 +0000 (+0200) Subject: lto/121935 - visit all DECL_ARGUMENTS in free-lang-data X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=38666cbccff5114e2f23930fae180f03c385eb45;p=thirdparty%2Fgcc.git 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 --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc index 41afc6ec82f..8196cab6079 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 00000000000..a4519b1d3ad --- /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 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) { }