Hi,

i386 -m32 failure of the PR 66616 testcase was caused by the fact
that, on the callee side, the calling conventions of a thunk are
decided according to the properties of the function it is associated
with, but on the caller side, the actual thunk is examined.  Since
they depend on the can_change_signature cgraph_node flag and the flag
of artificial thunks has not been copied from the function, the caller
and callee could disagree on ABI.

Fixed thusly, by copying the flag to the artificial thunk.  Testcase
is already in the testsuite (g++.dg/ipa/pr66616.C).  The patch has
successfully passed bootstrap and testing on i686-linux, I have also
included it in a bootstrap and testing that is underway on
x86_64-linux.  OK if it passes there as well?

Thanks,

Martin


[PR ipa/66616] Copy can_change_signature flag to artificial thunks

2016-01-07  Martin Jambor  <mjam...@suse.cz>

        PR ipa/66616
        * cgraphclones.c (duplicate_thunk_for_node): Copy can_change_signature
        flag.

diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c
index f8a7d37..8759ce4 100644
--- a/gcc/cgraphclones.c
+++ b/gcc/cgraphclones.c
@@ -328,6 +328,7 @@ duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node 
*node)
   new_thunk = cgraph_node::create (new_decl);
   set_new_clone_decl_and_node_flags (new_thunk);
   new_thunk->definition = true;
+  new_thunk->local.can_change_signature = node->local.can_change_signature;
   new_thunk->thunk = thunk->thunk;
   new_thunk->unique_name = in_lto_p;
   new_thunk->former_clone_of = thunk->decl;

Reply via email to