xref: /netbsd-src/external/bsd/jemalloc.old/include/jemalloc/internal/assert.h (revision 8e33eff89e26cf71871ead62f0d5063e1313c33a)
1*8e33eff8Schristos #include "jemalloc/internal/malloc_io.h"
2*8e33eff8Schristos #include "jemalloc/internal/util.h"
3*8e33eff8Schristos 
4*8e33eff8Schristos /*
5*8e33eff8Schristos  * Define a custom assert() in order to reduce the chances of deadlock during
6*8e33eff8Schristos  * assertion failure.
7*8e33eff8Schristos  */
8*8e33eff8Schristos #ifndef assert
9*8e33eff8Schristos #define assert(e) do {							\
10*8e33eff8Schristos 	if (unlikely(config_debug && !(e))) {				\
11*8e33eff8Schristos 		malloc_printf(						\
12*8e33eff8Schristos 		    "<jemalloc>: %s:%d: Failed assertion: \"%s\"\n",	\
13*8e33eff8Schristos 		    __FILE__, __LINE__, #e);				\
14*8e33eff8Schristos 		abort();						\
15*8e33eff8Schristos 	}								\
16*8e33eff8Schristos } while (0)
17*8e33eff8Schristos #endif
18*8e33eff8Schristos 
19*8e33eff8Schristos #ifndef not_reached
20*8e33eff8Schristos #define not_reached() do {						\
21*8e33eff8Schristos 	if (config_debug) {						\
22*8e33eff8Schristos 		malloc_printf(						\
23*8e33eff8Schristos 		    "<jemalloc>: %s:%d: Unreachable code reached\n",	\
24*8e33eff8Schristos 		    __FILE__, __LINE__);				\
25*8e33eff8Schristos 		abort();						\
26*8e33eff8Schristos 	}								\
27*8e33eff8Schristos 	unreachable();							\
28*8e33eff8Schristos } while (0)
29*8e33eff8Schristos #endif
30*8e33eff8Schristos 
31*8e33eff8Schristos #ifndef not_implemented
32*8e33eff8Schristos #define not_implemented() do {						\
33*8e33eff8Schristos 	if (config_debug) {						\
34*8e33eff8Schristos 		malloc_printf("<jemalloc>: %s:%d: Not implemented\n",	\
35*8e33eff8Schristos 		    __FILE__, __LINE__);				\
36*8e33eff8Schristos 		abort();						\
37*8e33eff8Schristos 	}								\
38*8e33eff8Schristos } while (0)
39*8e33eff8Schristos #endif
40*8e33eff8Schristos 
41*8e33eff8Schristos #ifndef assert_not_implemented
42*8e33eff8Schristos #define assert_not_implemented(e) do {					\
43*8e33eff8Schristos 	if (unlikely(config_debug && !(e))) {				\
44*8e33eff8Schristos 		not_implemented();					\
45*8e33eff8Schristos 	}								\
46*8e33eff8Schristos } while (0)
47*8e33eff8Schristos #endif
48*8e33eff8Schristos 
49*8e33eff8Schristos /* Use to assert a particular configuration, e.g., cassert(config_debug). */
50*8e33eff8Schristos #ifndef cassert
51*8e33eff8Schristos #define cassert(c) do {							\
52*8e33eff8Schristos 	if (unlikely(!(c))) {						\
53*8e33eff8Schristos 		not_reached();						\
54*8e33eff8Schristos 	}								\
55*8e33eff8Schristos } while (0)
56*8e33eff8Schristos #endif
57