> 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.
OK, thanks Honza > > 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;