http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60567
--- Comment #14 from Jan Hubicka <hubicka at gcc dot gnu.org> --- OK, the problem is that one comdat group has two functions: _ZNK19MutableIntegerValue18isValidNativeValueEi/0 (isValidNativeValue) @0x7ffff6adfe18 Type: function definition analyzed Visibility: forced_by_abi externally_visible public weak comdat_group:_ZNK19MutableIntegerValue18isValidNativeValueEi one_only section_name:.text._ZNK19MutableIntegerValue18isValidNativeValueEi virtual Same comdat group as: _ZThn8_NK19MutableIntegerValue18isValidNativeValueEi/2 Address is taken. Aux: @0x1 References: Referring: *.LTHUNK0/1 (alias)_ZTV19MutableIntegerValue/3 (addr) Read from file: t.o Availability: available First run: 0 Function flags: Called by: Calls: and _ZThn8_NK19MutableIntegerValue18isValidNativeValueEi/2 (_ZThn8_NK19MutableIntegerValue18isValidNativeValueEi) @0x7ffff6c64148 Type: function definition analyzed Visibility: externally_visible public weak comdat_group:_ZNK19MutableIntegerValue18isValidNativeValueEi one_only section_name:.text._ZNK19MutableIntegerValue18isValidNativeValueEi virtual artificial Same comdat group as: _ZNK19MutableIntegerValue18isValidNativeValueEi/0 Address is taken. Aux: @0x1 References: Referring: _ZTV19MutableIntegerValue/3 (addr) Read from file: t.o Availability: overwritable First run: 0 Function flags: Thunk fixed offset -8 virtual value 0 has virtual offset 0) Called by: Calls: *.LTHUNK0/1 (1.00 per call) Thunk doesn't have forced_by_abi. This makes the partitinoning code to deal with the comdat in two ways - duplicating into every partion that use it as well as keying it to one partition. This looks to me as C++ FE bug: When function is forced (keyed), its thunk should also be forced IMO. It doesn't seem to make sense to keep function but optimize out the thunk as we would do now (even w/o LTO)