X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Ferror_bootstrap.h;h=8dbbc7f359de3de82bdbf1c83177508b10c3523c;hb=37b445468e45b537621269fc1e375f26ca2100ee;hp=3416c2f90331750b2ad81392123fe3103a4c5b51;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vppinfra/error_bootstrap.h b/src/vppinfra/error_bootstrap.h index 3416c2f9033..8dbbc7f359d 100644 --- a/src/vppinfra/error_bootstrap.h +++ b/src/vppinfra/error_bootstrap.h @@ -79,6 +79,35 @@ do { \ } \ } while (0) +/* + * 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 */ + #if defined(__clang__) #define STATIC_ASSERT(truth,...) #else @@ -88,6 +117,16 @@ do { \ #define STATIC_ASSERT_SIZEOF(d, s) \ STATIC_ASSERT (sizeof (d) == s, "Size of " #d " must be " # s " bytes") +#define STATIC_ASSERT_SIZEOF_ELT(d, e, s) \ + STATIC_ASSERT (sizeof (((d *)0)->e) == s, "Size of " #d "." #e " must be " # s " bytes") + +#define STATIC_ASSERT_OFFSET_OF(s, e, o) \ + STATIC_ASSERT (STRUCT_OFFSET_OF(s,e) == o, "Offset of " #s "." #e " must be " # o) + +#define STATIC_ASSERT_FITS_IN(s, e, o) \ + STATIC_ASSERT (STRUCT_OFFSET_OF(s,e) <= (o - sizeof(((s *)0)->e)), \ + #s "." #e " does not fit into " # o " bytes") + /* Assert without allocating memory. */ #define ASSERT_AND_PANIC(truth) \ do { \