From: Nick Mathewson Date: Tue, 26 Jan 2010 17:08:34 +0000 (-0500) Subject: Try to fix a warning in hash_debug_entry X-Git-Tag: release-2.0.4-alpha~55 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=137f2c602f440327b10e68f5af4e575e23d82362;p=libevent Try to fix a warning in hash_debug_entry 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; } --- diff --git a/event.c b/event.c index ce2d7536..19674c7b 100644 --- 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