http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50165

--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-08-24 
10:46:17 UTC ---
(In reply to comment #6)
> (In reply to comment #4)
> > > -
> > > -  if (ds1->len == ds2->len)
> > > -    return memcmp (ds1->s, ds2->s, ds1->len) == 0;
> > > -
> > > -  return 0;
> > > +  return strcmp (ds1->s, ds2->s) == 0;
> > >  }
> > > 
> > >  /* Returns a new bit-packing context for bit-packing into S.  */
> > 
> > Can you check if keeping the ds1->len == ds2->len check in 
> > eq_string_slot_node
> > but using strcmp works as well?  If not, then it seems ->len is not
> > properly initialized in all cases (which would explain that changing the
> > hash is also important).
> 
> No, keeping the (ds1->len == ds2->len) check doesn't work.

Oh dear.  I'll leave it for Diego to investigate then :)

At this point (well, and everywhere else, including in the hash function)

 gcc_assert (ds1->len == strlen (ds1->s) + 1
             && ds2->len == strlen (ds2->s) + 1);

should hold.

Reply via email to