]> granicus.if.org Git - libevent/commitdiff
Fix compilation on Windows with NDEBUG
authorNick Mathewson <nickm@torproject.org>
Sun, 2 Jan 2011 02:37:21 +0000 (21:37 -0500)
committerNick Mathewson <nickm@torproject.org>
Sun, 2 Jan 2011 05:56:01 +0000 (00:56 -0500)
Dongsheng Song reports that when building on windows with NDEBUG, you
run into an attempt to do EVUTIL_ASSERT(x) where x is a bitfield,
which turns into _EVUTIL_NIL_CONDITION(x), which takes sizeof(x),
which is illegal.  This patch fixes _EVUTIL_NIL_CONDITION to work on
bitfields too.

util-internal.h

index cb76ee4fdd590bf76a3f2a33e30237d720ca4146..5c153d30e2800d8e0a3da43fd83dd6f6957e2cb4 100644 (file)
@@ -52,9 +52,13 @@ extern "C" {
 
 /* A good no-op to use in macro definitions. */
 #define _EVUTIL_NIL_STMT ((void)0)
-/* Suppresses the compiler's "unused variable" warnings for unused assert. */
+/* A no-op that tricks the compiler into thinking a condition is used while
+ * definitely not making any code for it.  Used to compile out asserts while
+ * avoiding "unused variable" warnings.  The "!" forces the compiler to
+ * do the sizeof() on an int, in case "condition" is a bitfield value.
+ */
 #define _EVUTIL_NIL_CONDITION(condition) do { \
-       (void)sizeof(condition); \
+       (void)sizeof(!(condition));  \
 } while(0)
 
 /* Internal use only: macros to match patterns of error codes in a