On Thu, May 1, 2025 at 10:46 PM Jason Merrill <ja...@redhat.com> wrote: > > Tested x86_64-pc-linux-gnu, OK for trunk? > > -- 8< -- > > This warning relies on the TRANSLATION_UNIT_WARN_EMPTY_P flag (set in > cxx_init_decl_processing) to decide whether we want to warn about the GCC 8 > empty class parameter passing fix, but in a call through a function pointer > we don't have a translation unit and so complain for any -Wabi flag, even > now long after this was likely to be relevant. > > In that situation, let's check the TU for current_function_decl instead. > And if we still can't come up with a TU, default to not warning. > > PR c++/60336 > > gcc/ChangeLog: > > * config/i386/i386.cc (ix86_warn_parameter_passing_abi): > If no target, check the current TU. > > gcc/testsuite/ChangeLog: > > * g++.dg/abi/pr60336-8a.C: New test.
LGTM. Thanks, Uros. > --- > gcc/config/i386/i386.cc | 11 ++++++++--- > gcc/testsuite/g++.dg/abi/pr60336-8a.C | 15 +++++++++++++++ > 2 files changed, 23 insertions(+), 3 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/abi/pr60336-8a.C > > diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc > index 2f840338138..cb348cb9cfb 100644 > --- a/gcc/config/i386/i386.cc > +++ b/gcc/config/i386/i386.cc > @@ -18084,9 +18084,14 @@ ix86_warn_parameter_passing_abi (cumulative_args_t > cum_v, tree type) > if (cum->decl && !TREE_PUBLIC (cum->decl)) > return; > > - const_tree ctx = get_ultimate_context (cum->decl); > - if (ctx != NULL_TREE > - && !TRANSLATION_UNIT_WARN_EMPTY_P (ctx)) > + tree decl = cum->decl; > + if (!decl) > + /* If we don't know the target, look at the current TU. */ > + decl = current_function_decl; > + > + const_tree ctx = get_ultimate_context (decl); > + if (ctx == NULL_TREE > + || !TRANSLATION_UNIT_WARN_EMPTY_P (ctx)) > return; > > /* If the actual size of the type is zero, then there is no change > diff --git a/gcc/testsuite/g++.dg/abi/pr60336-8a.C > b/gcc/testsuite/g++.dg/abi/pr60336-8a.C > new file mode 100644 > index 00000000000..a0518436e0e > --- /dev/null > +++ b/gcc/testsuite/g++.dg/abi/pr60336-8a.C > @@ -0,0 +1,15 @@ > +// { dg-do compile } > +// { dg-options "-O2 -Wabi=12" } > + > +struct dummy { struct{} a[7][3]; }; > + > +extern void test1 (struct dummy, ...); > +extern void (*test2) (struct dummy, ...); > + > +void > +foo () > +{ > + struct dummy a0; > + test1 (a0, 42); > + test2 (a0, 42); > +} > > base-commit: 87c4460024dadef0aa1c767be146ad3831857ebe > -- > 2.49.0 >