While reading GCC code, I noticed that in gengtype-state.c the equality function in a string hashtable is set to strcmp.
But that returns 0 (ie, false for hashtable.c) when the strings are equal! I can't see how that hashtable would ever work. Do we have any tests for gengtype-state ? Am I missing something ? :-) Else, Ok to commit the following patch ? Thanks Index: gengtype-state.c =================================================================== --- gengtype-state.c (revision 172522) +++ gengtype-state.c (working copy) @@ -2385,7 +2385,16 @@ equals_type_number (const void *ty1, const void *t return type1->state_number == type2->state_number; } +static int +string_eq (const void *a, const void *b) +{ + const char *a0 = (const char *)a; + const char *b0 = (const char *)b; + return (strcmp (a0, b0) == 0); +} + + /* The function reading the state, called by main from gengtype.c. */ void read_state (const char *path) @@ -2408,7 +2417,7 @@ read_state (const char *path) state_seen_types = htab_create (2017, hash_type_number, equals_type_number, NULL); state_ident_tab = - htab_create (4027, htab_hash_string, (htab_eq) strcmp, NULL); + htab_create (4027, htab_hash_string, string_eq, NULL); read_state_version (version_string); read_state_srcdir (); read_state_languages (); Index: ChangeLog =================================================================== --- ChangeLog (revision 172522) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2011-04-17 Nicola Pero <nicola.p...@meta-innovation.com> + + * gengtype-state.c (string_eq): New. + (read_state): Use string_eq instead of strcmp when creating the + state_ident_tab. + 2011-04-15 Pat Haugen <pthau...@us.ibm.com> * config/rs6000/rs6000.c (call_ABI_of_interest): Call