Try to fix a warning in hash_debug_entry
authorNick Mathewson <nickm@torproject.org>
Tue, 26 Jan 2010 17:08:34 +0000 (12:08 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 26 Jan 2010 17:08:34 +0000 (12:08 -0500)
Apparently some 64-bit platforms don't like it when you say

   unsigned hash(void *p)
   {
      return (unsigned)p;
   }

even if you really honestly don't want the high bits of p.  Perhaps
they will tolerate it if I say the equivalent of

   unsigned hash(void *p)
   {
      return (unsigned) (uintptr_t) p;
   }

event.c

diff --git a/event.c b/event.c
index ce2d7536520f9178fd96210a2164927d475b434f..19674c7b14ef359150d9d4457439aa97a0337fd6 100644 (file)
--- a/event.c
+++ b/event.c
@@ -157,10 +157,15 @@ struct event_debug_entry {
 static inline unsigned
 hash_debug_entry(const struct event_debug_entry *e)
 {
+       /* We need to do this silliness to convince compilers that we
+        * honestly mean to cast e->ptr to an integer, and discard any
+        * part of it that doesn't fit in an unsigned.
+        */
+       unsigned u = (unsigned) ((ev_uintptr_t) e->ptr);
        /* Our hashtable implementation is pretty sensitive to low bits,
         * and every struct event is over 64 bytes in size, so we can
-        * just say... */
-       return ((unsigned)e->ptr) >> 6;
+        * just say >>6. */
+       return (u >> 6);
 }
 
 static inline int