diff options
Diffstat (limited to 'check.h')
-rw-r--r-- | check.h | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -0,0 +1,24 @@ +#ifndef CHECK_H +#define CHECK_H +#include "gcc.h" +#include <stdlib.h> +#include <assert.h> +#undef assert +/* + * standard assert may malloc, but NDEBUG behavior is standardized, + * however Perl headers add some weirdness if we undef NDEBUG, so + * keep NDEBUG defined and use MWRAP_NO_DEBUG + */ +#if defined(NDEBUG) && defined(MWRAP_NO_DEBUG) +# define assert(expr) +# define CHECK(type, expect, expr) (void)(expr) +#else +# define assert(expr) do { if (caa_unlikely(!(expr))) abort(); } while (0) +# define CHECK(type, expect, expr) do { \ + type checkvar = (expr); \ + assert(checkvar==(expect)&& "BUG" && __FILE__ && __LINE__); \ + (void)checkvar; \ + } while (0) +#endif + +#endif /* CHECK_H */ |