2008-02-08 03:17:38 +00:00
|
|
|
#ifndef TOKU_ASSERT_H
|
|
|
|
#define TOKU_ASSERT_H
|
2008-02-07 16:35:39 +00:00
|
|
|
/* The problem with assert.h: If NDEBUG is set then it doesn't execute the function, if NDEBUG isn't set then we get a branch that isn't taken. */
|
|
|
|
/* This version will complain if NDEBUG is set. */
|
|
|
|
/* It evaluates the argument and then calls a function toku_do_assert() which takes all the hits for the branches not taken. */
|
|
|
|
|
2013-04-16 23:59:09 -04:00
|
|
|
#if defined(__cplusplus) || defined(__cilkplusplus)
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2008-02-07 16:35:39 +00:00
|
|
|
#ifdef NDEBUG
|
|
|
|
#error NDEBUG should not be set
|
|
|
|
#endif
|
|
|
|
|
2013-04-16 23:59:01 -04:00
|
|
|
void toku_do_assert_fail(const char*/*expr_as_string*/,const char */*fun*/,const char*/*file*/,int/*line*/) __attribute__((__visibility__("default"))) __attribute__((__noreturn__));
|
|
|
|
void toku_do_assert(int,const char*/*expr_as_string*/,const char */*fun*/,const char*/*file*/,int/*line*/) __attribute__((__visibility__("default")));
|
2008-02-07 16:35:39 +00:00
|
|
|
|
2013-04-16 23:57:24 -04:00
|
|
|
// Define GCOV if you want to get test-coverage information that ignores the assert statements.
|
2013-04-16 23:57:48 -04:00
|
|
|
// #define GCOV
|
2013-04-16 23:58:56 -04:00
|
|
|
|
|
|
|
#if defined(GCOV) || TOKU_WINDOWS
|
|
|
|
#define assert(expr) toku_do_assert((expr) != 0, #expr, __FUNCTION__, __FILE__, __LINE__)
|
|
|
|
#else
|
2013-04-16 23:59:01 -04:00
|
|
|
#define assert(expr) ((expr) ? (void)0 : toku_do_assert_fail(#expr, __FUNCTION__, __FILE__, __LINE__))
|
2013-04-16 23:58:56 -04:00
|
|
|
#endif
|
|
|
|
|
2013-04-16 23:57:24 -04:00
|
|
|
#ifdef GCOV
|
|
|
|
#define WHEN_GCOV(x) x
|
|
|
|
#define WHEN_NOT_GCOV(x)
|
2008-02-07 16:35:39 +00:00
|
|
|
#else
|
2013-04-16 23:57:48 -04:00
|
|
|
#define WHEN_GCOV(x)
|
|
|
|
#define WHEN_NOT_GCOV(x) x
|
2008-02-08 03:17:38 +00:00
|
|
|
#endif
|
2013-04-16 23:57:48 -04:00
|
|
|
|
2013-04-16 23:59:09 -04:00
|
|
|
#if defined(__cplusplus) || defined(__cilkplusplus)
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
2008-02-07 16:35:39 +00:00
|
|
|
#endif
|