reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
  157
  158
  159
  160
  161
  162
  163
  164
  165
  166
  167
  168
  169
  170
  171
  172
  173
  174
  175
  176
  177
  178
  179
/*
 * kmp_debug.h -- debug / assertion code for Assure library
 */

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef KMP_DEBUG_H
#define KMP_DEBUG_H

#include <stdarg.h>

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

// -----------------------------------------------------------------------------
// Build-time assertion.

// New C++11 style build assert
#define KMP_BUILD_ASSERT(expr) static_assert(expr, "Build condition error")

// -----------------------------------------------------------------------------
// Run-time assertions.

extern void __kmp_dump_debug_buffer(void);

#ifdef KMP_USE_ASSERT
extern int __kmp_debug_assert(char const *expr, char const *file, int line);
#ifdef KMP_DEBUG
#define KMP_ASSERT(cond)                                                       \
  if (!(cond)) {                                                               \
    __kmp_debug_assert(#cond, __FILE__, __LINE__);                             \
  }
#define KMP_ASSERT2(cond, msg)                                                 \
  if (!(cond)) {                                                               \
    __kmp_debug_assert((msg), __FILE__, __LINE__);                             \
  }
#define KMP_DEBUG_ASSERT(cond) KMP_ASSERT(cond)
#define KMP_DEBUG_ASSERT2(cond, msg) KMP_ASSERT2(cond, msg)
#define KMP_DEBUG_USE_VAR(x) /* Nothing (it is used!) */
#else
// Do not expose condition in release build. Use "assertion failure".
#define KMP_ASSERT(cond)                                                       \
  if (!(cond)) {                                                               \
    __kmp_debug_assert("assertion failure", __FILE__, __LINE__);               \
  }
#define KMP_ASSERT2(cond, msg) KMP_ASSERT(cond)
#define KMP_DEBUG_ASSERT(cond) /* Nothing */
#define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */
#define KMP_DEBUG_USE_VAR(x) ((void)(x))
#endif // KMP_DEBUG
#else
#define KMP_ASSERT(cond) /* Nothing */
#define KMP_ASSERT2(cond, msg) /* Nothing */
#define KMP_DEBUG_ASSERT(cond) /* Nothing */
#define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */
#define KMP_DEBUG_USE_VAR(x) ((void)(x))
#endif // KMP_USE_ASSERT

#ifdef KMP_DEBUG
extern void __kmp_debug_printf_stdout(char const *format, ...);
#endif
extern void __kmp_debug_printf(char const *format, ...);

#ifdef KMP_DEBUG

extern int kmp_a_debug;
extern int kmp_b_debug;
extern int kmp_c_debug;
extern int kmp_d_debug;
extern int kmp_e_debug;
extern int kmp_f_debug;
extern int kmp_diag;

#define KA_TRACE(d, x)                                                         \
  if (kmp_a_debug >= d) {                                                      \
    __kmp_debug_printf x;                                                      \
  }
#define KB_TRACE(d, x)                                                         \
  if (kmp_b_debug >= d) {                                                      \
    __kmp_debug_printf x;                                                      \
  }
#define KC_TRACE(d, x)                                                         \
  if (kmp_c_debug >= d) {                                                      \
    __kmp_debug_printf x;                                                      \
  }
#define KD_TRACE(d, x)                                                         \
  if (kmp_d_debug >= d) {                                                      \
    __kmp_debug_printf x;                                                      \
  }
#define KE_TRACE(d, x)                                                         \
  if (kmp_e_debug >= d) {                                                      \
    __kmp_debug_printf x;                                                      \
  }
#define KF_TRACE(d, x)                                                         \
  if (kmp_f_debug >= d) {                                                      \
    __kmp_debug_printf x;                                                      \
  }
#define K_DIAG(d, x)                                                           \
  {                                                                            \
    if (kmp_diag == d) {                                                       \
      __kmp_debug_printf_stdout x;                                             \
    }                                                                          \
  }

#define KA_DUMP(d, x)                                                          \
  if (kmp_a_debug >= d) {                                                      \
    int ks;                                                                    \
    __kmp_disable(&ks);                                                        \
    (x);                                                                       \
    __kmp_enable(ks);                                                          \
  }
#define KB_DUMP(d, x)                                                          \
  if (kmp_b_debug >= d) {                                                      \
    int ks;                                                                    \
    __kmp_disable(&ks);                                                        \
    (x);                                                                       \
    __kmp_enable(ks);                                                          \
  }
#define KC_DUMP(d, x)                                                          \
  if (kmp_c_debug >= d) {                                                      \
    int ks;                                                                    \
    __kmp_disable(&ks);                                                        \
    (x);                                                                       \
    __kmp_enable(ks);                                                          \
  }
#define KD_DUMP(d, x)                                                          \
  if (kmp_d_debug >= d) {                                                      \
    int ks;                                                                    \
    __kmp_disable(&ks);                                                        \
    (x);                                                                       \
    __kmp_enable(ks);                                                          \
  }
#define KE_DUMP(d, x)                                                          \
  if (kmp_e_debug >= d) {                                                      \
    int ks;                                                                    \
    __kmp_disable(&ks);                                                        \
    (x);                                                                       \
    __kmp_enable(ks);                                                          \
  }
#define KF_DUMP(d, x)                                                          \
  if (kmp_f_debug >= d) {                                                      \
    int ks;                                                                    \
    __kmp_disable(&ks);                                                        \
    (x);                                                                       \
    __kmp_enable(ks);                                                          \
  }

#else

#define KA_TRACE(d, x) /* nothing to do */
#define KB_TRACE(d, x) /* nothing to do */
#define KC_TRACE(d, x) /* nothing to do */
#define KD_TRACE(d, x) /* nothing to do */
#define KE_TRACE(d, x) /* nothing to do */
#define KF_TRACE(d, x) /* nothing to do */
#define K_DIAG(d, x)                                                           \
  {} /* nothing to do */

#define KA_DUMP(d, x) /* nothing to do */
#define KB_DUMP(d, x) /* nothing to do */
#define KC_DUMP(d, x) /* nothing to do */
#define KD_DUMP(d, x) /* nothing to do */
#define KE_DUMP(d, x) /* nothing to do */
#define KF_DUMP(d, x) /* nothing to do */

#endif // KMP_DEBUG

#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus

#endif /* KMP_DEBUG_H */