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. --- 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;