diff options
Diffstat (limited to 'runtime/base/logging.h')
| -rw-r--r-- | runtime/base/logging.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/runtime/base/logging.h b/runtime/base/logging.h index 814195c7fa..caeb946ff0 100644 --- a/runtime/base/logging.h +++ b/runtime/base/logging.h @@ -66,6 +66,16 @@ } \ } while (false) +// CHECK that can be used in a constexpr function. For example, +// constexpr int half(int n) { +// return +// DCHECK_CONSTEXPR(n >= 0, , 0) +// CHECK_CONSTEXPR((n & 1) == 0), << "Extra debugging output: n = " << n, 0) +// n / 2; +// } +#define CHECK_CONSTEXPR(x, out, dummy) \ + (UNLIKELY(!(x))) ? (LOG(FATAL) << "Check failed: " << #x out, dummy) : + #ifndef NDEBUG #define DCHECK(x) CHECK(x) @@ -77,6 +87,7 @@ #define DCHECK_GT(x, y) CHECK_GT(x, y) #define DCHECK_STREQ(s1, s2) CHECK_STREQ(s1, s2) #define DCHECK_STRNE(s1, s2) CHECK_STRNE(s1, s2) +#define DCHECK_CONSTEXPR(x, out, dummy) CHECK_CONSTEXPR(x, out, dummy) #else // NDEBUG @@ -116,6 +127,9 @@ while (false) \ CHECK_STRNE(str1, str2) +#define DCHECK_CONSTEXPR(x, out, dummy) \ + (false && (x)) ? (dummy) : + #endif #define LOG(severity) ::art::LogMessage(__FILE__, __LINE__, severity, -1).stream() |