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

Reply via email to