15e8470afSJim Cownie /* 25e8470afSJim Cownie * kmp_debug.h -- debug / assertion code for Assure library 35e8470afSJim Cownie */ 45e8470afSJim Cownie 55e8470afSJim Cownie //===----------------------------------------------------------------------===// 65e8470afSJim Cownie // 7*57b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 8*57b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 9*57b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 105e8470afSJim Cownie // 115e8470afSJim Cownie //===----------------------------------------------------------------------===// 125e8470afSJim Cownie 135e8470afSJim Cownie #ifndef KMP_DEBUG_H 145e8470afSJim Cownie #define KMP_DEBUG_H 155e8470afSJim Cownie 165e8470afSJim Cownie #include <stdarg.h> 175e8470afSJim Cownie 185e8470afSJim Cownie #ifdef __cplusplus 195e8470afSJim Cownie extern "C" { 205e8470afSJim Cownie #endif // __cplusplus 215e8470afSJim Cownie 223041982dSJonathan Peyton // ----------------------------------------------------------------------------- 235e8470afSJim Cownie // Build-time assertion. 245e8470afSJim Cownie 253692fcf6SJonathan Peyton // New C++11 style build assert 263692fcf6SJonathan Peyton #define KMP_BUILD_ASSERT(expr) static_assert(expr, "Build condition error") 275e8470afSJim Cownie 283041982dSJonathan Peyton // ----------------------------------------------------------------------------- 295e8470afSJim Cownie // Run-time assertions. 305e8470afSJim Cownie 315e8470afSJim Cownie extern void __kmp_dump_debug_buffer(void); 325e8470afSJim Cownie 335e8470afSJim Cownie #ifdef KMP_USE_ASSERT 345e8470afSJim Cownie extern int __kmp_debug_assert(char const *expr, char const *file, int line); 355e8470afSJim Cownie #ifdef KMP_DEBUG 363041982dSJonathan Peyton #define KMP_ASSERT(cond) \ 37baad3f60SJonathan Peyton if (!(cond)) { \ 38baad3f60SJonathan Peyton __kmp_debug_assert(#cond, __FILE__, __LINE__); \ 39baad3f60SJonathan Peyton } 403041982dSJonathan Peyton #define KMP_ASSERT2(cond, msg) \ 41baad3f60SJonathan Peyton if (!(cond)) { \ 42baad3f60SJonathan Peyton __kmp_debug_assert((msg), __FILE__, __LINE__); \ 43baad3f60SJonathan Peyton } 445e8470afSJim Cownie #define KMP_DEBUG_ASSERT(cond) KMP_ASSERT(cond) 455e8470afSJim Cownie #define KMP_DEBUG_ASSERT2(cond, msg) KMP_ASSERT2(cond, msg) 46baad3f60SJonathan Peyton #define KMP_DEBUG_USE_VAR(x) /* Nothing (it is used!) */ 475e8470afSJim Cownie #else 485e8470afSJim Cownie // Do not expose condition in release build. Use "assertion failure". 493041982dSJonathan Peyton #define KMP_ASSERT(cond) \ 50baad3f60SJonathan Peyton if (!(cond)) { \ 51baad3f60SJonathan Peyton __kmp_debug_assert("assertion failure", __FILE__, __LINE__); \ 52baad3f60SJonathan Peyton } 535e8470afSJim Cownie #define KMP_ASSERT2(cond, msg) KMP_ASSERT(cond) 54baad3f60SJonathan Peyton #define KMP_DEBUG_ASSERT(cond) /* Nothing */ 55baad3f60SJonathan Peyton #define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */ 56baad3f60SJonathan Peyton #define KMP_DEBUG_USE_VAR(x) ((void)(x)) 575e8470afSJim Cownie #endif // KMP_DEBUG 585e8470afSJim Cownie #else 59baad3f60SJonathan Peyton #define KMP_ASSERT(cond) /* Nothing */ 60baad3f60SJonathan Peyton #define KMP_ASSERT2(cond, msg) /* Nothing */ 61baad3f60SJonathan Peyton #define KMP_DEBUG_ASSERT(cond) /* Nothing */ 62baad3f60SJonathan Peyton #define KMP_DEBUG_ASSERT2(cond, msg) /* Nothing */ 63baad3f60SJonathan Peyton #define KMP_DEBUG_USE_VAR(x) ((void)(x)) 645e8470afSJim Cownie #endif // KMP_USE_ASSERT 655e8470afSJim Cownie 665e8470afSJim Cownie #ifdef KMP_DEBUG 675e8470afSJim Cownie extern void __kmp_debug_printf_stdout(char const *format, ...); 685e8470afSJim Cownie #endif 695e8470afSJim Cownie extern void __kmp_debug_printf(char const *format, ...); 705e8470afSJim Cownie 715e8470afSJim Cownie #ifdef KMP_DEBUG 725e8470afSJim Cownie 735e8470afSJim Cownie extern int kmp_a_debug; 745e8470afSJim Cownie extern int kmp_b_debug; 755e8470afSJim Cownie extern int kmp_c_debug; 765e8470afSJim Cownie extern int kmp_d_debug; 775e8470afSJim Cownie extern int kmp_e_debug; 785e8470afSJim Cownie extern int kmp_f_debug; 795e8470afSJim Cownie extern int kmp_diag; 805e8470afSJim Cownie 813041982dSJonathan Peyton #define KA_TRACE(d, x) \ 823041982dSJonathan Peyton if (kmp_a_debug >= d) { \ 833041982dSJonathan Peyton __kmp_debug_printf x; \ 843041982dSJonathan Peyton } 853041982dSJonathan Peyton #define KB_TRACE(d, x) \ 863041982dSJonathan Peyton if (kmp_b_debug >= d) { \ 873041982dSJonathan Peyton __kmp_debug_printf x; \ 883041982dSJonathan Peyton } 893041982dSJonathan Peyton #define KC_TRACE(d, x) \ 903041982dSJonathan Peyton if (kmp_c_debug >= d) { \ 913041982dSJonathan Peyton __kmp_debug_printf x; \ 923041982dSJonathan Peyton } 933041982dSJonathan Peyton #define KD_TRACE(d, x) \ 943041982dSJonathan Peyton if (kmp_d_debug >= d) { \ 953041982dSJonathan Peyton __kmp_debug_printf x; \ 963041982dSJonathan Peyton } 973041982dSJonathan Peyton #define KE_TRACE(d, x) \ 983041982dSJonathan Peyton if (kmp_e_debug >= d) { \ 993041982dSJonathan Peyton __kmp_debug_printf x; \ 1003041982dSJonathan Peyton } 1013041982dSJonathan Peyton #define KF_TRACE(d, x) \ 1023041982dSJonathan Peyton if (kmp_f_debug >= d) { \ 1033041982dSJonathan Peyton __kmp_debug_printf x; \ 1043041982dSJonathan Peyton } 1053041982dSJonathan Peyton #define K_DIAG(d, x) \ 1063041982dSJonathan Peyton { \ 1073041982dSJonathan Peyton if (kmp_diag == d) { \ 1083041982dSJonathan Peyton __kmp_debug_printf_stdout x; \ 1093041982dSJonathan Peyton } \ 1103041982dSJonathan Peyton } 1115e8470afSJim Cownie 1123041982dSJonathan Peyton #define KA_DUMP(d, x) \ 1133041982dSJonathan Peyton if (kmp_a_debug >= d) { \ 1143041982dSJonathan Peyton int ks; \ 1153041982dSJonathan Peyton __kmp_disable(&ks); \ 1163041982dSJonathan Peyton (x); \ 1173041982dSJonathan Peyton __kmp_enable(ks); \ 1183041982dSJonathan Peyton } 1193041982dSJonathan Peyton #define KB_DUMP(d, x) \ 1203041982dSJonathan Peyton if (kmp_b_debug >= d) { \ 1213041982dSJonathan Peyton int ks; \ 1223041982dSJonathan Peyton __kmp_disable(&ks); \ 1233041982dSJonathan Peyton (x); \ 1243041982dSJonathan Peyton __kmp_enable(ks); \ 1253041982dSJonathan Peyton } 1263041982dSJonathan Peyton #define KC_DUMP(d, x) \ 1273041982dSJonathan Peyton if (kmp_c_debug >= d) { \ 1283041982dSJonathan Peyton int ks; \ 1293041982dSJonathan Peyton __kmp_disable(&ks); \ 1303041982dSJonathan Peyton (x); \ 1313041982dSJonathan Peyton __kmp_enable(ks); \ 1323041982dSJonathan Peyton } 1333041982dSJonathan Peyton #define KD_DUMP(d, x) \ 1343041982dSJonathan Peyton if (kmp_d_debug >= d) { \ 1353041982dSJonathan Peyton int ks; \ 1363041982dSJonathan Peyton __kmp_disable(&ks); \ 1373041982dSJonathan Peyton (x); \ 1383041982dSJonathan Peyton __kmp_enable(ks); \ 1393041982dSJonathan Peyton } 1403041982dSJonathan Peyton #define KE_DUMP(d, x) \ 1413041982dSJonathan Peyton if (kmp_e_debug >= d) { \ 1423041982dSJonathan Peyton int ks; \ 1433041982dSJonathan Peyton __kmp_disable(&ks); \ 1443041982dSJonathan Peyton (x); \ 1453041982dSJonathan Peyton __kmp_enable(ks); \ 1463041982dSJonathan Peyton } 1473041982dSJonathan Peyton #define KF_DUMP(d, x) \ 1483041982dSJonathan Peyton if (kmp_f_debug >= d) { \ 1493041982dSJonathan Peyton int ks; \ 1503041982dSJonathan Peyton __kmp_disable(&ks); \ 1513041982dSJonathan Peyton (x); \ 1523041982dSJonathan Peyton __kmp_enable(ks); \ 1533041982dSJonathan Peyton } 1545e8470afSJim Cownie 1555e8470afSJim Cownie #else 1565e8470afSJim Cownie 1575e8470afSJim Cownie #define KA_TRACE(d, x) /* nothing to do */ 1585e8470afSJim Cownie #define KB_TRACE(d, x) /* nothing to do */ 1595e8470afSJim Cownie #define KC_TRACE(d, x) /* nothing to do */ 1605e8470afSJim Cownie #define KD_TRACE(d, x) /* nothing to do */ 1615e8470afSJim Cownie #define KE_TRACE(d, x) /* nothing to do */ 1625e8470afSJim Cownie #define KF_TRACE(d, x) /* nothing to do */ 1633041982dSJonathan Peyton #define K_DIAG(d, x) \ 1643041982dSJonathan Peyton {} /* nothing to do */ 1655e8470afSJim Cownie 1665e8470afSJim Cownie #define KA_DUMP(d, x) /* nothing to do */ 1675e8470afSJim Cownie #define KB_DUMP(d, x) /* nothing to do */ 1685e8470afSJim Cownie #define KC_DUMP(d, x) /* nothing to do */ 1695e8470afSJim Cownie #define KD_DUMP(d, x) /* nothing to do */ 1705e8470afSJim Cownie #define KE_DUMP(d, x) /* nothing to do */ 1715e8470afSJim Cownie #define KF_DUMP(d, x) /* nothing to do */ 1725e8470afSJim Cownie 1735e8470afSJim Cownie #endif // KMP_DEBUG 1745e8470afSJim Cownie 1755e8470afSJim Cownie #ifdef __cplusplus 1765e8470afSJim Cownie } // extern "C" 1775e8470afSJim Cownie #endif // __cplusplus 1785e8470afSJim Cownie 1795e8470afSJim Cownie #endif /* KMP_DEBUG_H */ 180