debug: respecte NDEBUG for CHECK macros

This commit is contained in:
Danny Robson 2016-09-28 17:20:46 +10:00
parent fad44bd1f7
commit 657a407d0e
2 changed files with 21 additions and 22 deletions

View File

@ -24,12 +24,10 @@
///////////////////////////////////////////////////////////////////////////////
#ifdef ENABLE_DEBUGGING
#define DEBUG_ONLY(X) do { \
X \
} while (0)
#if !defined(NDEBUG)
#define _DEBUG_ONLY(X) do { X } while (0)
#else
#define DEBUG_ONLY(X)
#define _DEBUG_ONLY(X) do { } while (0)
#endif
@ -41,14 +39,14 @@
///////////////////////////////////////////////////////////////////////////////
#define TRACE { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
std::cerr << __FILE__ << ":" << __func__ << ":" << __LINE__ << std::endl; \
); \
}
#define WARN(C) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
if (C) { \
std::cerr << __FILE__ << ":" << __func__ << ":" << __LINE__ << ", " << #C << std::endl; \
} \
@ -66,7 +64,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK(C) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
if (!(C)) \
panic (#C); \
); \
@ -75,7 +73,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_SANITY(A) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
if (!util::debug::is_valid (__a)) { \
_CHECK_PANIC("failed sanity test for %s, %!\n", #A, __a); \
@ -86,7 +84,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_EQ(A,B) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
const auto &__b = (B); \
\
@ -103,7 +101,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_LT(A,B) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
const auto &__b = (B); \
\
@ -120,7 +118,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_LE(A,B) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
const auto &__b = (B); \
\
@ -137,7 +135,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_GT(A,B) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
const auto &__b = (B); \
\
@ -154,7 +152,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_GE(A,B) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
const auto &__b = (B); \
\
@ -171,7 +169,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_LIMIT(V,L,H) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__v = (V); \
const auto &__l = (L); \
const auto &__h = (H); \
@ -190,7 +188,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_NEQ(A,B) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
const auto &__b = (B); \
\
@ -207,7 +205,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_ZERO(A) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
\
if (!util::almost_zero (__a)) { \
@ -221,7 +219,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_NEZ(A) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
const auto &__a = (A); \
if (util::exactly_zero (__a)) \
_CHECK_PANIC ("expected zero\n" \
@ -233,7 +231,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_MOD(V,M) do { \
DEBUG_ONLY ( \
_DEBUG_ONLY ( \
const auto &__check_mod_v = (V); \
const auto &__check_mod_m = (M); \
if (!util::exactly_zero (__check_mod_v % __check_mod_m)) \
@ -268,7 +266,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_THROWS(E,C) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
bool caught = false; \
\
try \
@ -284,7 +282,7 @@
///////////////////////////////////////////////////////////////////////////////
#define CHECK_NOTHROW(C) do { \
DEBUG_ONLY( \
_DEBUG_ONLY( \
try { \
C; \
} catch (const std::exception &e) { \
@ -395,6 +393,7 @@ namespace util { namespace debug {
#include "./debug.ipp"
///////////////////////////////////////////////////////////////////////////////
// XXX: maths needs to be included so that CHECK_EQ/NEQ can call almost_equal,
// but maths.hpp might be using CHECK_ macros so we must include maths.hpp

2
m4/nc

@ -1 +1 @@
Subproject commit ab01cbf966c2f0a09e7740db56f50827afe284ac
Subproject commit 006f69779160a490786399b1af6a7d1e251cd15c