util: Make assert a no-op on non-debug builds.
authorJosé Fonseca <jfonseca@vmware.com>
Sun, 4 Oct 2009 20:59:24 +0000 (21:59 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Sun, 4 Oct 2009 21:03:16 +0000 (22:03 +0100)
This ensures that an assertion like

  assert(expensive_test());

won't have any penalty on release builds. It also implies that no vital
code should be in assert expressions.

src/gallium/auxiliary/util/u_debug.h

index b82e7cb4d40c0670d11c67f55e52807862c71524..b8c56fd600c552e2cf7f5f343b4c484dbb801d6e 100644 (file)
@@ -181,11 +181,14 @@ void _debug_assert_fail(const char *expr,
  * 
  * Do not expect that the assert call terminates -- errors must be handled 
  * regardless of assert behavior.
+ *
+ * For non debug builds the assert macro will expand to a no-op, so do not
+ * call functions with side effects in the assert expression.
  */
 #ifdef DEBUG
 #define debug_assert(expr) ((expr) ? (void)0 : _debug_assert_fail(#expr, __FILE__, __LINE__, __FUNCTION__))
 #else
-#define debug_assert(expr) ((void)(expr))
+#define debug_assert(expr) ((void)0)
 #endif