[PATCH] Be careful about comdat boundary in ICF (PR ipa/82352).

Martin Liška mliska@suse.cz
Wed Jan 3 13:36:00 GMT 2018


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  <mliska@suse.cz>
>>
>> 	PR ipa/82352
>> 	* ipa-icf.c (sem_function::merge): Do not cross comdat boundary.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2018-01-03  Martin Liska  <mliska@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



More information about the Gcc-patches mailing list