X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Ferror_bootstrap.h;h=185f4c6c4af86147b127a186c7a991219d3adb1a;hb=d824aac1077cc744f66fba62879e4b668f60ed6a;hp=1cd910585748491c846cf0e511fe15cdf83f21df;hpb=da9513af296b54ac0299206862e9654ae2431bf7;p=vpp.git diff --git a/src/vppinfra/error_bootstrap.h b/src/vppinfra/error_bootstrap.h index 1cd91058574..185f4c6c4af 100644 --- a/src/vppinfra/error_bootstrap.h +++ b/src/vppinfra/error_bootstrap.h @@ -79,11 +79,36 @@ do { \ } \ } while (0) -#if defined(__clang__) -#define STATIC_ASSERT(truth,...) -#else +/* + * This version always generates code, and has a Coverity-specific + * version to stop Coverity complaining about + * ALWAYS_ASSERT(p != 0); p->member... + */ + +#ifndef __COVERITY__ +#define ALWAYS_ASSERT(truth) \ +do { \ + if (PREDICT_FALSE(!(truth))) \ + { \ + _clib_error (CLIB_ERROR_ABORT, 0, 0, \ + "%s:%d (%s) assertion `%s' fails", \ + __FILE__, \ + (uword) __LINE__, \ + clib_error_function, \ + # truth); \ + } \ +} while (0) +#else /* __COVERITY__ */ +#define ALWAYS_ASSERT(truth) \ +do { \ + if (PREDICT_FALSE(!(truth))) \ + { \ + abort(); \ + } \ +} while (0) +#endif /* __COVERITY */ + #define STATIC_ASSERT(truth,...) _Static_assert(truth, __VA_ARGS__) -#endif #define STATIC_ASSERT_SIZEOF(d, s) \ STATIC_ASSERT (sizeof (d) == s, "Size of " #d " must be " # s " bytes")