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.