> Hi. > > As mentioned in the PR, we should bail out inlining of thunks with variadic > arguments. It's problematic for cgraph_node::expand_thunk function that > does not support variadic functions. > > Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. > > Ready to be installed? > Martin > > gcc/ChangeLog: > > 2018-01-03 Martin Liska <mli...@suse.cz> > > PR ipa/83549 > * ipa-fnsummary.c (compute_fn_summary): Do not inline variadic > thunks. > > gcc/testsuite/ChangeLog: > > 2018-01-03 Martin Liska <mli...@suse.cz> > > PR ipa/83549 > * g++.dg/ipa/pr83549.C: New test.
OK, but please introduce new CIF_CODE for this case. MISMATCHED arguments is a kitchen sink for various issues and it is very hard to analyze what happened when it triggers. Thanks, Honza > --- > gcc/ipa-fnsummary.c | 5 +++++ > gcc/testsuite/g++.dg/ipa/pr83549.C | 8 ++++++++ > 2 files changed, 13 insertions(+) > create mode 100644 gcc/testsuite/g++.dg/ipa/pr83549.C > > > diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c > index 94150312105..274bd8c6758 100644 > --- a/gcc/ipa-fnsummary.c > +++ b/gcc/ipa-fnsummary.c > @@ -2422,6 +2422,11 @@ compute_fn_summary (struct cgraph_node *node, bool > early) > info->inlinable = false; > node->callees->inline_failed = CIF_CHKP; > } > + else if (stdarg_p (TREE_TYPE (node->decl))) > + { > + info->inlinable = false; > + node->callees->inline_failed = CIF_MISMATCHED_ARGUMENTS; > + } > else > info->inlinable = true; > } > diff --git a/gcc/testsuite/g++.dg/ipa/pr83549.C > b/gcc/testsuite/g++.dg/ipa/pr83549.C > new file mode 100644 > index 00000000000..90cf8fe7e0d > --- /dev/null > +++ b/gcc/testsuite/g++.dg/ipa/pr83549.C > @@ -0,0 +1,8 @@ > +// PR ipa/83549 > +// { dg-do compile } > +// { dg-options "-O2" } > + > +struct A { virtual ~A (); }; > +struct B { virtual void foo (...); }; > +struct C : A, B { void foo (...) {} }; > +C c; >