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 <[email protected]>
+
+ * 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 <[email protected]>
* config/rs6000/rs6000.c (call_ABI_of_interest): Call