On Sun, 14 Sep 2025, Sam James wrote:
> Richard Biener <[email protected]> writes:
>
> > With no longer visiting TREE_CHAIN for decls we have to visit
> > the DECL_ARGUMENT chain manually.
> >
> > LTO bootstrap and regtest running on x86_64-unknown-linux-gnu.
> >
> > I'm not sure whether LTO bootstrap worked before
>
> I didn't have bootstrap issues myself but I only tried my usual x86_64, not
> other targets (which I test less often). But the patch regtests fine for me.
LTO bootstrap also succeeded. I've pushed the patch.
Richard.
> Thanks.
>
> > but hopefully this
> > would have fixed it. Testing non-LTO to be able to push it anyway as
> > well.
> >
> > Richard.
> >
> > 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 | 3 ++-
> > gcc/testsuite/g++.dg/lto/pr121935_0.C | 13 +++++++++++++
> > 2 files changed, 15 insertions(+), 1 deletion(-)
> > create mode 100644 gcc/testsuite/g++.dg/lto/pr121935_0.C
> >
> > 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 <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) { }
>
--
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)