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