Home | History | Annotate | Line # | Download | only in urcu
      1 // SPDX-FileCopyrightText: 2021 Francis Deslauriers <francis.deslauriers (at) efficios.com>
      2 //
      3 // SPDX-License-Identifier: MIT
      4 
      5 #ifndef _URCU_ASSERT_H
      6 #define _URCU_ASSERT_H
      7 
      8 /*
      9  * Userspace RCU assertion facilities.
     10  */
     11 
     12 #include <urcu/config.h>
     13 
     14 /*
     15  * Force usage of an expression to prevent unused expression compiler warning.
     16  */
     17 #define _urcu_use_expression(_expr) ((void) sizeof((void) (_expr), 0))
     18 
     19 #ifdef NDEBUG
     20 /*
     21  * Vanilla assert() replacement. When NDEBUG is defined, the expression is
     22  * consumed to prevent unused variable compile warnings.
     23  */
     24 # define urcu_posix_assert(_cond) _urcu_use_expression(_cond)
     25 #else
     26 # include <assert.h>
     27 # define urcu_posix_assert(_cond) assert(_cond)
     28 #endif
     29 
     30 #if defined(DEBUG_RCU) || defined(CONFIG_RCU_DEBUG)
     31 
     32 /*
     33  * Enables debugging/expensive assertions to be used in fast paths and only
     34  * enabled on demand. When disabled, the expression is consumed to prevent
     35  * unused variable compile warnings.
     36  */
     37 # define urcu_assert_debug(_cond) urcu_posix_assert(_cond)
     38 #else
     39 # define urcu_assert_debug(_cond) _urcu_use_expression(_cond)
     40 #endif
     41 
     42 #endif /* _URCU_ASSERT_H */
     43