From 137f2c602f440327b10e68f5af4e575e23d82362 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 26 Jan 2010 12:08:34 -0500 Subject: [PATCH] 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; } --- event.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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