https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92535

--- Comment #10 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Here are main reason for miscompares:
   1125 libxul.so.wpa.076i.icf:  false returned: 'variables types are
different' in equals at ../../gcc/ipa-icf.c:1697
   1171 libxul.so.wpa.076i.icf:  false returned: 'DECL_CXX_CONSTRUCTOR
mismatch' in equals_wpa at ../../gcc/ipa-icf.c:562
   2211 libxul.so.wpa.076i.icf:  false returned: 'different decl attributes' in
equals_wpa at ../../gcc/ipa-icf.c:662
   3362 libxul.so.wpa.076i.icf:  false returned: 'ctor polymorphic type
mismatch' in equals_wpa at ../../gcc/ipa-icf.c:585
   3627 libxul.so.wpa.076i.icf:  false returned: 'GIMPLE LHS type mismatch' in
compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:695
   5297 libxul.so.wpa.076i.icf:  false returned: '' in compare_decl at
../../gcc/ipa-icf-gimple.c:157
   5304 libxul.so.wpa.076i.icf:  false returned: '' in compare_variable_decl at
../../gcc/ipa-icf-gimple.c:422
   5304 libxul.so.wpa.076i.icf:  false returned: '' in operand_equal_p at
../../gcc/ipa-icf-gimple.c:291
   8588 libxul.so.wpa.076i.icf:  false returned: 'parameter type is not
compatible' in compatible_parm_types_p at ../../gcc/ipa-icf.c:512
  10188 libxul.so.wpa.076i.icf:  false returned: 'inline attributes are
different' in compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:350
  16218 libxul.so.wpa.076i.icf:  false returned: 'parameter types are not
compatible' in equals_wpa at ../../gcc/ipa-icf.c:639
  26076 libxul.so.wpa.076i.icf:  false returned: 'references to virtual tables
cannot be merged' in compare_referenced_symbol_properties at
../../gcc/ipa-icf.c:373
  28813 libxul.so.wpa.076i.icf:  false returned: 'decl_or_type flags are
different' in equals_wpa at ../../gcc/ipa-icf.c:572
  32478 libxul.so.wpa.076i.icf:  false returned: 'different tree types' in
compatible_types_p at ../../gcc/ipa-icf-gimple.c:206
  60520 libxul.so.wpa.076i.icf:  false returned: 'call function types are not
compatible' in compare_gimple_call at ../../gcc/ipa-icf-gimple.c:635
 106399 libxul.so.wpa.076i.icf:  false returned: 'types are not compatible' in
compatible_types_p at ../../gcc/ipa-icf-gimple.c:212
 120240 libxul.so.wpa.076i.icf:  false returned: 'result types are different'
in equals_wpa at ../../gcc/ipa-icf.c:621
 269745 libxul.so.wpa.076i.icf:  false returned: 'compare_ao_refs failed
(semantic difference)' in compare_operand at ../../gcc/ipa-icf-gimple.c:336
 355772 libxul.so.wpa.076i.icf:  false returned: '' in compare_gimple_call at
../../gcc/ipa-icf-gimple.c:607
 456913 libxul.so.wpa.076i.icf:  false returned: 'THIS pointer ODR type
mismatch' in equals_wpa at ../../gcc/ipa-icf.c:677
 460252 libxul.so.wpa.076i.icf:  false returned: 'types are not same for ODR'
in compatible_polymorphic_types_p at ../../gcc/ipa-icf-gimple.c:197
1391954 libxul.so.wpa.076i.icf:  false returned: 'GIMPLE assignment operands
are different' in compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:699
1477890 libxul.so.wpa.076i.icf:  false returned: 'operand_equal_p failed' in
compare_operand at ../../gcc/ipa-icf-gimple.c:356
1840986 libxul.so.wpa.076i.icf:  false returned: '' in equals_private at
../../gcc/ipa-icf.c:886

So compare_ao_refs is not really a top even though it can be improved.  I
suppose it is time to improve the hash.

Common problem is
OBJ_TYPE_REF(_7;(struct nsServerSocket)_1->2) (_1);                             
OBJ_TYPE_REF(_7;(struct nsJSProtocolHandler)_1->2) (_1);                        
this happens 350645 (24% of the operand_equal_p failures) so I guess one can
start from there.

here clearly we want to hash ODR name of the OTR type.

Reply via email to