brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · 08d52cc Raw
180 lines · c
1/*2 * kmp_debug.h -- debug / assertion code for Assure library3 */4 5//===----------------------------------------------------------------------===//6//7// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.8// See https://llvm.org/LICENSE.txt for license information.9// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception10//11//===----------------------------------------------------------------------===//12 13#ifndef KMP_DEBUG_H14#define KMP_DEBUG_H15 16#include <stdarg.h>17 18#ifdef __cplusplus19extern "C" {20#endif // __cplusplus21 22// -----------------------------------------------------------------------------23// Build-time assertion.24 25// New C++11 style build assert26#define KMP_BUILD_ASSERT(expr) static_assert(expr, "Build condition error")27 28// -----------------------------------------------------------------------------29// Run-time assertions.30 31extern void __kmp_dump_debug_buffer(void);32 33#ifdef KMP_USE_ASSERT34extern int __kmp_debug_assert(char const *expr, char const *file, int line);35#ifdef KMP_DEBUG36#define KMP_ASSERT(cond)                                                       \37  if (!(cond)) {                                                               \38    __kmp_debug_assert(#cond, __FILE__, __LINE__);                             \39  }40#define KMP_ASSERT2(cond, msg)                                                 \41  if (!(cond)) {                                                               \42    __kmp_debug_assert((msg), __FILE__, __LINE__);                             \43  }44#define KMP_DEBUG_ASSERT(cond) KMP_ASSERT(cond)45#define KMP_DEBUG_ASSERT2(cond, msg) KMP_ASSERT2(cond, msg)46#define KMP_DEBUG_USE_VAR(x) /* Nothing (it is used!) */47#else48// Do not expose condition in release build. Use "assertion failure".49#define KMP_ASSERT(cond)                                                       \50  if (!(cond)) {                                                               \51    __kmp_debug_assert("assertion failure", __FILE__, __LINE__);               \52  }53#define KMP_ASSERT2(cond, msg) KMP_ASSERT(cond)54#define KMP_DEBUG_ASSERT(cond) /* Nothing */55#define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */56#define KMP_DEBUG_USE_VAR(x) ((void)(x))57#endif // KMP_DEBUG58#else59#define KMP_ASSERT(cond) /* Nothing */60#define KMP_ASSERT2(cond, msg) /* Nothing */61#define KMP_DEBUG_ASSERT(cond) /* Nothing */62#define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */63#define KMP_DEBUG_USE_VAR(x) ((void)(x))64#endif // KMP_USE_ASSERT65 66#ifdef KMP_DEBUG67extern void __kmp_debug_printf_stdout(char const *format, ...);68#endif69extern void __kmp_debug_printf(char const *format, ...);70 71#ifdef KMP_DEBUG72 73extern int kmp_a_debug;74extern int kmp_b_debug;75extern int kmp_c_debug;76extern int kmp_d_debug;77extern int kmp_e_debug;78extern int kmp_f_debug;79extern int kmp_diag;80 81#define KA_TRACE(d, x)                                                         \82  if (kmp_a_debug >= d) {                                                      \83    __kmp_debug_printf x;                                                      \84  }85#define KB_TRACE(d, x)                                                         \86  if (kmp_b_debug >= d) {                                                      \87    __kmp_debug_printf x;                                                      \88  }89#define KC_TRACE(d, x)                                                         \90  if (kmp_c_debug >= d) {                                                      \91    __kmp_debug_printf x;                                                      \92  }93#define KD_TRACE(d, x)                                                         \94  if (kmp_d_debug >= d) {                                                      \95    __kmp_debug_printf x;                                                      \96  }97#define KE_TRACE(d, x)                                                         \98  if (kmp_e_debug >= d) {                                                      \99    __kmp_debug_printf x;                                                      \100  }101#define KF_TRACE(d, x)                                                         \102  if (kmp_f_debug >= d) {                                                      \103    __kmp_debug_printf x;                                                      \104  }105#define K_DIAG(d, x)                                                           \106  {                                                                            \107    if (kmp_diag == d) {                                                       \108      __kmp_debug_printf_stdout x;                                             \109    }                                                                          \110  }111 112#define KA_DUMP(d, x)                                                          \113  if (kmp_a_debug >= d) {                                                      \114    int ks;                                                                    \115    __kmp_disable(&ks);                                                        \116    (x);                                                                       \117    __kmp_enable(ks);                                                          \118  }119#define KB_DUMP(d, x)                                                          \120  if (kmp_b_debug >= d) {                                                      \121    int ks;                                                                    \122    __kmp_disable(&ks);                                                        \123    (x);                                                                       \124    __kmp_enable(ks);                                                          \125  }126#define KC_DUMP(d, x)                                                          \127  if (kmp_c_debug >= d) {                                                      \128    int ks;                                                                    \129    __kmp_disable(&ks);                                                        \130    (x);                                                                       \131    __kmp_enable(ks);                                                          \132  }133#define KD_DUMP(d, x)                                                          \134  if (kmp_d_debug >= d) {                                                      \135    int ks;                                                                    \136    __kmp_disable(&ks);                                                        \137    (x);                                                                       \138    __kmp_enable(ks);                                                          \139  }140#define KE_DUMP(d, x)                                                          \141  if (kmp_e_debug >= d) {                                                      \142    int ks;                                                                    \143    __kmp_disable(&ks);                                                        \144    (x);                                                                       \145    __kmp_enable(ks);                                                          \146  }147#define KF_DUMP(d, x)                                                          \148  if (kmp_f_debug >= d) {                                                      \149    int ks;                                                                    \150    __kmp_disable(&ks);                                                        \151    (x);                                                                       \152    __kmp_enable(ks);                                                          \153  }154 155#else156 157#define KA_TRACE(d, x) /* nothing to do */158#define KB_TRACE(d, x) /* nothing to do */159#define KC_TRACE(d, x) /* nothing to do */160#define KD_TRACE(d, x) /* nothing to do */161#define KE_TRACE(d, x) /* nothing to do */162#define KF_TRACE(d, x) /* nothing to do */163#define K_DIAG(d, x)                                                           \164  {} /* nothing to do */165 166#define KA_DUMP(d, x) /* nothing to do */167#define KB_DUMP(d, x) /* nothing to do */168#define KC_DUMP(d, x) /* nothing to do */169#define KD_DUMP(d, x) /* nothing to do */170#define KE_DUMP(d, x) /* nothing to do */171#define KF_DUMP(d, x) /* nothing to do */172 173#endif // KMP_DEBUG174 175#ifdef __cplusplus176} // extern "C"177#endif // __cplusplus178 179#endif /* KMP_DEBUG_H */180