|
9 | 9 |
|
10 | 10 | #include <iostream> |
11 | 11 |
|
| 12 | +#include "absl/log/check.h" |
12 | 13 | #include "absl/strings/str_format.h" |
13 | 14 | #include "third_party/util/util.h" |
14 | 15 |
|
15 | 16 | #if defined(GHOST_LOGGING) |
16 | 17 |
|
17 | | -#define __LCHECK(op, invop, expr1, expr2) \ |
18 | | - do { \ |
19 | | - auto __val1 = expr1; \ |
20 | | - auto __val2 = expr2; \ |
21 | | - if (!(__val1 op __val2)) { \ |
22 | | - int __errno = errno; \ |
23 | | - std::cerr << __FILE__ << ":" << __LINE__ << "(" << ghost::GetTID() \ |
24 | | - << ") " \ |
25 | | - << "CHECK FAILED: " << #expr1 << " " #op " " << #expr2 << " [" \ |
26 | | - << __val1 << " " #invop " " << __val2 << "]" << std::endl; \ |
27 | | - if (__errno) { \ |
28 | | - std::cerr << "errno: " << __errno << " [" << std::strerror(__errno) \ |
29 | | - << "]" << std::endl; \ |
30 | | - } \ |
31 | | - ghost::Exit(1); \ |
32 | | - } \ |
33 | | - } while (0) |
34 | | - |
35 | | -#define CHECK_EQ(val1, val2) __LCHECK(==, !=, val1, val2) |
36 | | -#define CHECK_NE(val1, val2) __LCHECK(!=, ==, val1, val2) |
37 | | -#define CHECK_LT(val1, val2) __LCHECK(<, >=, val1, val2) |
38 | | -#define CHECK_LE(val1, val2) __LCHECK(<=, <, val1, val2) |
39 | | -#define CHECK_GT(val1, val2) __LCHECK(>, <=, val1, val2) |
40 | | -#define CHECK_GE(val1, val2) __LCHECK(>=, >, val1, val2) |
41 | | -#define CHECK(val1) CHECK_NE(val1, 0) |
42 | | - |
43 | | -#ifndef NDEBUG |
44 | | -#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2) |
45 | | -#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2) |
46 | | -#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2) |
47 | | -#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2) |
48 | | -#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2) |
49 | | -#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2) |
50 | | -#define DCHECK(condition) CHECK(condition) |
51 | | -#else |
52 | | -// `NDEBUG` is defined, so `DCHECK_EQ(x, y)` and so on do nothing. However, we |
53 | | -// still want the compiler to parse `x` and `y`, because we don't want to lose |
54 | | -// potentially useful errors and warnings. |
55 | | -// |
56 | | -// (cribbed from ABSL_LOGGING_INTERNAL_DCHECK_NOP) |
57 | | -#define GHOST_DCHECK_NOP(x, y) while (false && ((void)(x), (void)(y), 0)) |
58 | | - |
59 | | -#define DCHECK_EQ(val1, val2) GHOST_DCHECK_NOP(val1, val2) |
60 | | -#define DCHECK_NE(val1, val2) GHOST_DCHECK_NOP(val1, val2) |
61 | | -#define DCHECK_LT(val1, val2) GHOST_DCHECK_NOP(val1, val2) |
62 | | -#define DCHECK_LE(val1, val2) GHOST_DCHECK_NOP(val1, val2) |
63 | | -#define DCHECK_GT(val1, val2) GHOST_DCHECK_NOP(val1, val2) |
64 | | -#define DCHECK_GE(val1, val2) GHOST_DCHECK_NOP(val1, val2) |
65 | | -#define DCHECK(condition) GHOST_DCHECK_NOP(condition, 0) |
66 | | -#endif |
67 | | - |
68 | 18 | #ifndef GHOST_DEBUG |
69 | 19 | #ifdef NDEBUG |
70 | 20 | #define GHOST_DEBUG 0 |
|
0 commit comments