defs: reorganize the assert macros a little

Make a special Coverity version of spa_assert_se borrowed from
PulseAudio
NDEBUG now compiles the asserts to nop, except for the _se one.

See !755
This commit is contained in:
Wim Taymans 2021-06-11 20:05:25 +02:00
parent b7c2e7a693
commit a90c86dd47

View file

@ -259,6 +259,7 @@ struct spa_fraction {
/* spa_assert_se() is an assert which guarantees side effects of x, /* spa_assert_se() is an assert which guarantees side effects of x,
* i.e. is never optimized away, regardless of NDEBUG or FASTPATH. */ * i.e. is never optimized away, regardless of NDEBUG or FASTPATH. */
#ifndef __COVERITY__
#define spa_assert_se(expr) \ #define spa_assert_se(expr) \
do { \ do { \
if (SPA_UNLIKELY(!(expr))) { \ if (SPA_UNLIKELY(!(expr))) { \
@ -267,25 +268,36 @@ struct spa_fraction {
abort(); \ abort(); \
} \ } \
} while (false) } while (false)
#else
#define spa_assert(expr) \ #define spa_assert_se(expr) \
do { \ do { \
if (SPA_UNLIKELY(!(expr))) { \ int _unique_var = (expr); \
fprintf(stderr, "'%s' failed at %s:%u %s()\n", \ if (!_unique_var) \
#expr , __FILE__, __LINE__, __func__); \
abort(); \ abort(); \
} \
} while (false) } while (false)
#endif
/* Does exactly nothing */
#define spa_nop() do {} while (false)
#ifdef NDEBUG
#define spa_assert(expr) spa_nop()
#elif defined (FASTPATH)
#define spa_assert(expr) spa_assert_se(expr)
#else
#define spa_assert(expr) spa_assert_se(expr)
#endif
#ifdef NDEBUG
#define spa_assert_not_reached() abort()
#else
#define spa_assert_not_reached() \ #define spa_assert_not_reached() \
do { \ do { \
fprintf(stderr, "Code should not be reached at %s:%u %s()\n", \ fprintf(stderr, "Code should not be reached at %s:%u %s()\n", \
__FILE__, __LINE__, __func__); \ __FILE__, __LINE__, __func__); \
abort(); \ abort(); \
} while (false) } while (false)
#endif
/* Does exactly nothing */
#define spa_nop() do {} while (false)
#define spa_memzero(x,l) (memset((x), 0, (l))) #define spa_memzero(x,l) (memset((x), 0, (l)))
#define spa_zero(x) (spa_memzero(&(x), sizeof(x))) #define spa_zero(x) (spa_memzero(&(x), sizeof(x)))