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


Reply via email to