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

Reply via email to