diff options
author | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-01-17 11:45:48 +0000 |
---|---|---|
committer | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-01-17 11:45:48 +0000 |
commit | 470a1124f822114ae73e4f257cf095726013dab9 (patch) | |
tree | 638bd20b902a0a77801d4963d15bf3799b64a090 | |
parent | efcf544eb21432692f77c83025f6bca5d496f17f (diff) |
Backport r256177
2018-01-17 Martin Liska <mliska@suse.cz>
Backport from mainline
2018-01-03 Martin Liska <mliska@suse.cz>
PR ipa/83549
* cif-code.def (VARIADIC_THUNK): New enum value.
* ipa-inline-analysis.c (compute_inline_parameters):
Do not inline variadic thunks.
2018-01-17 Martin Liska <mliska@suse.cz>
Backport from mainline
2018-01-03 Martin Liska <mliska@suse.cz>
PR ipa/83549
* g++.dg/ipa/pr83549.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256788 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cif-code.def | 4 | ||||
-rw-r--r-- | gcc/ipa-inline-analysis.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ipa/pr83549.C | 8 |
5 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 42fe9b15dbf8..7cc7dc8d20d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,16 @@ 2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline + 2018-01-03 Martin Liska <mliska@suse.cz> + + PR ipa/83549 + * cif-code.def (VARIADIC_THUNK): New enum value. + * ipa-inline-analysis.c (compute_inline_parameters): + Do not inline variadic thunks. + +2018-01-17 Martin Liska <mliska@suse.cz> + + Backport from mainline 2017-12-27 Martin Liska <mliska@suse.cz> PR tree-optimization/83552 diff --git a/gcc/cif-code.def b/gcc/cif-code.def index a2f05e016f2a..966c6d6f323e 100644 --- a/gcc/cif-code.def +++ b/gcc/cif-code.def @@ -95,6 +95,10 @@ DEFCIFCODE(MISMATCHED_ARGUMENTS, CIF_FINAL_ERROR, DEFCIFCODE(LTO_MISMATCHED_DECLARATIONS, CIF_FINAL_ERROR, N_("mismatched declarations during linktime optimization")) +/* Caller is variadic thunk. */ +DEFCIFCODE(VARIADIC_THUNK, CIF_FINAL_ERROR, + N_("variadic thunk call")) + /* Call was originally indirect. */ DEFCIFCODE(ORIGINALLY_INDIRECT_CALL, CIF_FINAL_NORMAL, N_("originally indirect function call not considered for inlining")) diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index 97338e19f3a6..0674e6b9cbc3 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -2994,6 +2994,11 @@ compute_inline_parameters (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_VARIADIC_THUNK; + } else info->inlinable = true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4c22beb07aaa..394690eba3bf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,14 @@ 2018-01-17 Martin Liska <mliska@suse.cz> Backport from mainline + 2018-01-03 Martin Liska <mliska@suse.cz> + + PR ipa/83549 + * g++.dg/ipa/pr83549.C: New test. + +2018-01-17 Martin Liska <mliska@suse.cz> + + Backport from mainline 2017-12-27 Martin Liska <mliska@suse.cz> PR tree-optimization/83552 diff --git a/gcc/testsuite/g++.dg/ipa/pr83549.C b/gcc/testsuite/g++.dg/ipa/pr83549.C new file mode 100644 index 000000000000..90cf8fe7e0d7 --- /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; |