On Fri, Oct 16, 2015 at 5:12 AM, Jan Hubicka <hubi...@ucw.cz> wrote: > Hi, > as Richard noticed in my port of the code to operand_equal_p, the checking of > CONSTURCTOR in ipa-icf-gimple is incomplete missing the index checks. > It is also unnecesary since non-empty ctors does not happen as gimple > operands. This patch thus removes the unnecesary code.
Err - they do happen, for vector constructors. Just empty constructors are not allowed for vector constructors - vector constructors are required to have elements in proper order and none left out. Sorry for misleading you. > Bootstrapped/regtested x86_64-linux, comitted. this will definitely ICE ... Richard. > Honza > > * ipa-icf-gimple.c (func_checker::compare_operand): Compare only > empty constructors. > Index: ipa-icf-gimple.c > =================================================================== > --- ipa-icf-gimple.c (revision 228851) > +++ ipa-icf-gimple.c (working copy) > @@ -415,20 +415,9 @@ func_checker::compare_operand (tree t1, > switch (TREE_CODE (t1)) > { > case CONSTRUCTOR: > - { > - unsigned length1 = vec_safe_length (CONSTRUCTOR_ELTS (t1)); > - unsigned length2 = vec_safe_length (CONSTRUCTOR_ELTS (t2)); > - > - if (length1 != length2) > - return return_false (); > - > - for (unsigned i = 0; i < length1; i++) > - if (!compare_operand (CONSTRUCTOR_ELT (t1, i)->value, > - CONSTRUCTOR_ELT (t2, i)->value)) > - return return_false(); > - > - return true; > - } > + gcc_assert (!vec_safe_length (CONSTRUCTOR_ELTS (t1)) > + && !vec_safe_length (CONSTRUCTOR_ELTS (t2))); > + return true; > case ARRAY_REF: > case ARRAY_RANGE_REF: > /* First argument is the array, second is the index. */