Silence unused variable warnings caused by BT_ASSERT() in non-debug mode
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Tue, 3 Apr 2018 20:24:49 +0000 (16:24 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 2 May 2019 04:05:45 +0000 (00:05 -0400)
When building with the BABELTRACE_DEBUG_MODE configure option _not_ set,
multiple set-but-not-used warnings are emitted by the compiler. Most of
the time this happens because BT_ASSERT() is used to verify the return
value of functions and when not in DEBUG_MODE those return value are not
used.

The solution is to explicitly tell the compiler that we don't care about
this value so that it does not emit warning when building in non-debug
mode. This approach also makes sure not to evaluate the expression using
the `sizeof` operator, thus preventing any side effects.

See this post for further detailsĀ [1].

[1]: https://stackoverflow.com/questions/37411809/how-to-elegantly-fix-this-unused-variable-warning/37412551#37412551

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
include/babeltrace/assert-internal.h

index c8a9f8377b469b48131cbe41e875d982dd101724..5d78f96f40668187cd68982c12caa87f8cc7be21 100644 (file)
  */
 # define BT_ASSERT_FUNC
 #else
-# define BT_ASSERT(_cond)
+/*
+ * When BT_DEBUG_MODE is not defined, define BT_ASSERT() macro to the following
+ * to trick the compiler into thinking that the variable passed as condition to
+ * the assertion is used. This is to prevent set-but-not-used warnings from the
+ * compiler when assertions are disabled. The `sizeof` operator also makes sure
+ * that the `_cond` expression is not evaluated, thus preventing unwanted side
+ * effects.
+ *
+ * In-depth explanation: https://stackoverflow.com/questions/37411809/how-to-elegantly-fix-this-unused-variable-warning/37412551#37412551
+ */
+# define BT_ASSERT(_cond)      ((void) sizeof((void) (_cond), 0))
 # define BT_ASSERT_FUNC                __attribute__((unused))
 #endif /* BT_DEBUG_MODE */
 
This page took 0.025937 seconds and 4 git commands to generate.