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