From a90c86dd47e795b60ba45ddb27b4a54562ee443b Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 11 Jun 2021 20:05:25 +0200 Subject: [PATCH] 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 --- spa/include/spa/utils/defs.h | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/spa/include/spa/utils/defs.h b/spa/include/spa/utils/defs.h index e77212ce3..aafb5c056 100644 --- a/spa/include/spa/utils/defs.h +++ b/spa/include/spa/utils/defs.h @@ -259,6 +259,7 @@ struct spa_fraction { /* spa_assert_se() is an assert which guarantees side effects of x, * i.e. is never optimized away, regardless of NDEBUG or FASTPATH. */ +#ifndef __COVERITY__ #define spa_assert_se(expr) \ do { \ if (SPA_UNLIKELY(!(expr))) { \ @@ -267,25 +268,36 @@ struct spa_fraction { abort(); \ } \ } while (false) - -#define spa_assert(expr) \ +#else +#define spa_assert_se(expr) \ do { \ - if (SPA_UNLIKELY(!(expr))) { \ - fprintf(stderr, "'%s' failed at %s:%u %s()\n", \ - #expr , __FILE__, __LINE__, __func__); \ + int _unique_var = (expr); \ + if (!_unique_var) \ 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() \ do { \ fprintf(stderr, "Code should not be reached at %s:%u %s()\n", \ __FILE__, __LINE__, __func__); \ abort(); \ } while (false) - -/* Does exactly nothing */ -#define spa_nop() do {} while (false) +#endif #define spa_memzero(x,l) (memset((x), 0, (l))) #define spa_zero(x) (spa_memzero(&(x), sizeof(x)))