On 01/03/2018 02:24 PM, Jan Hubicka wrote: >> Hi. >> >> This patch is follow-up of r246848. This time ICF creates an edge between 2 >> functions, >> where one is inside a comdat group and second is not. I've got patch that is >> conservative >> about the comdat groups (in_same_comdat_group_p). >> >> 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/82352 >> * ipa-icf.c (sem_function::merge): Do not cross comdat boundary. >> >> gcc/testsuite/ChangeLog: >> >> 2018-01-03 Martin Liska <mli...@suse.cz> >> >> PR ipa/82352 >> * g++.dg/ipa/pr82352.C: New test. >> --- >> gcc/ipa-icf.c | 9 ++++ >> gcc/testsuite/g++.dg/ipa/pr82352.C | 93 >> ++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 102 insertions(+) >> create mode 100644 gcc/testsuite/g++.dg/ipa/pr82352.C >> >> > >> diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c >> index a8d3b800318..a56c7306201 100644 >> --- a/gcc/ipa-icf.c >> +++ b/gcc/ipa-icf.c >> @@ -1113,6 +1113,15 @@ sem_function::merge (sem_item *alias_item) >> return false; >> } >> >> + if (!original->in_same_comdat_group_p (alias)) >> + { >> + if (dump_file) >> + fprintf (dump_file, "Not unifying; alias cannot be created; " >> + "across comdat group boundary\n\n"); >> + >> + return false; >> + } > > Wasn't we supposed to do the wrapper in this case? > > Honza >
We attempt to do a wrapper, but even with wrapper we cannot introduce such call crossing the boundary. Proper message should be probably: "Not unifying; alias nor wrapper cannot be created; across comdat group boundary" Martin