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