2 * kmp_debug.h -- debug / assertion code for Assure library
5 //===----------------------------------------------------------------------===//
7 // The LLVM Compiler Infrastructure
9 // This file is dual licensed under the MIT and the University of Illinois Open
10 // Source Licenses. See LICENSE.txt for details.
12 //===----------------------------------------------------------------------===//
23 // -----------------------------------------------------------------------------
24 // Build-time assertion.
26 // New C++11 style build assert
27 #define KMP_BUILD_ASSERT(expr) static_assert(expr, "Build condition error")
29 // -----------------------------------------------------------------------------
30 // Run-time assertions.
32 extern void __kmp_dump_debug_buffer(void);
35 extern int __kmp_debug_assert(char const *expr, char const *file, int line);
37 #define KMP_ASSERT(cond) \
39 __kmp_debug_assert(#cond, __FILE__, __LINE__); \
41 #define KMP_ASSERT2(cond, msg) \
43 __kmp_debug_assert((msg), __FILE__, __LINE__); \
45 #define KMP_DEBUG_ASSERT(cond) KMP_ASSERT(cond)
46 #define KMP_DEBUG_ASSERT2(cond, msg) KMP_ASSERT2(cond, msg)
47 #define KMP_DEBUG_USE_VAR(x) /* Nothing (it is used!) */
49 // Do not expose condition in release build. Use "assertion failure".
50 #define KMP_ASSERT(cond) \
52 __kmp_debug_assert("assertion failure", __FILE__, __LINE__); \
54 #define KMP_ASSERT2(cond, msg) KMP_ASSERT(cond)
55 #define KMP_DEBUG_ASSERT(cond) /* Nothing */
56 #define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */
57 #define KMP_DEBUG_USE_VAR(x) ((void)(x))
60 #define KMP_ASSERT(cond) /* Nothing */
61 #define KMP_ASSERT2(cond, msg) /* Nothing */
62 #define KMP_DEBUG_ASSERT(cond) /* Nothing */
63 #define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */
64 #define KMP_DEBUG_USE_VAR(x) ((void)(x))
65 #endif // KMP_USE_ASSERT
68 extern void __kmp_debug_printf_stdout(char const *format, ...);
70 extern void __kmp_debug_printf(char const *format, ...);
74 extern int kmp_a_debug;
75 extern int kmp_b_debug;
76 extern int kmp_c_debug;
77 extern int kmp_d_debug;
78 extern int kmp_e_debug;
79 extern int kmp_f_debug;
82 #define KA_TRACE(d, x) \
83 if (kmp_a_debug >= d) { \
84 __kmp_debug_printf x; \
86 #define KB_TRACE(d, x) \
87 if (kmp_b_debug >= d) { \
88 __kmp_debug_printf x; \
90 #define KC_TRACE(d, x) \
91 if (kmp_c_debug >= d) { \
92 __kmp_debug_printf x; \
94 #define KD_TRACE(d, x) \
95 if (kmp_d_debug >= d) { \
96 __kmp_debug_printf x; \
98 #define KE_TRACE(d, x) \
99 if (kmp_e_debug >= d) { \
100 __kmp_debug_printf x; \
102 #define KF_TRACE(d, x) \
103 if (kmp_f_debug >= d) { \
104 __kmp_debug_printf x; \
106 #define K_DIAG(d, x) \
108 if (kmp_diag == d) { \
109 __kmp_debug_printf_stdout x; \
113 #define KA_DUMP(d, x) \
114 if (kmp_a_debug >= d) { \
116 __kmp_disable(&ks); \
120 #define KB_DUMP(d, x) \
121 if (kmp_b_debug >= d) { \
123 __kmp_disable(&ks); \
127 #define KC_DUMP(d, x) \
128 if (kmp_c_debug >= d) { \
130 __kmp_disable(&ks); \
134 #define KD_DUMP(d, x) \
135 if (kmp_d_debug >= d) { \
137 __kmp_disable(&ks); \
141 #define KE_DUMP(d, x) \
142 if (kmp_e_debug >= d) { \
144 __kmp_disable(&ks); \
148 #define KF_DUMP(d, x) \
149 if (kmp_f_debug >= d) { \
151 __kmp_disable(&ks); \
158 #define KA_TRACE(d, x) /* nothing to do */
159 #define KB_TRACE(d, x) /* nothing to do */
160 #define KC_TRACE(d, x) /* nothing to do */
161 #define KD_TRACE(d, x) /* nothing to do */
162 #define KE_TRACE(d, x) /* nothing to do */
163 #define KF_TRACE(d, x) /* nothing to do */
164 #define K_DIAG(d, x) \
165 {} /* nothing to do */
167 #define KA_DUMP(d, x) /* nothing to do */
168 #define KB_DUMP(d, x) /* nothing to do */
169 #define KC_DUMP(d, x) /* nothing to do */
170 #define KD_DUMP(d, x) /* nothing to do */
171 #define KE_DUMP(d, x) /* nothing to do */
172 #define KF_DUMP(d, x) /* nothing to do */
178 #endif // __cplusplus
180 #endif /* KMP_DEBUG_H */