Enhance CHECK_EQ and friends to allow extra detail to be appended (like CHECK).

Change-Id: Iaa980892ab31621c8bcca9ea7c6c4ee743333f45
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 2cbac12..b480d87 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -1911,7 +1911,7 @@
   }
   if (ifcount == 0) {
     // TODO: enable these asserts with klass status validation
-    // DCHECK(klass->GetIfTableCount() == 0);
+    // DCHECK_EQ(klass->GetIfTableCount(), 0);
     // DCHECK(klass->GetIfTable() == NULL);
     return true;
   }
diff --git a/src/compiler/Utility.cc b/src/compiler/Utility.cc
index b9fe050..0fc8a80 100644
--- a/src/compiler/Utility.cc
+++ b/src/compiler/Utility.cc
@@ -124,7 +124,7 @@
 /* Insert a new element into the growable list */
 void oatInsertGrowableList(GrowableList* gList, intptr_t elem)
 {
-    DCHECK(gList->numAllocated != 0);
+    DCHECK_NE(gList->numAllocated, 0U);
     if (gList->numUsed == gList->numAllocated) {
         expandGrowableList(gList);
     }
@@ -212,7 +212,7 @@
     ArenaBitVector* bv;
     unsigned int count;
 
-    DCHECK(sizeof(bv->storage[0]) == 4);        /* assuming 32-bit units */
+    DCHECK_EQ(sizeof(bv->storage[0]), 4U);        /* assuming 32-bit units */
 
     bv = (ArenaBitVector*) oatNew(sizeof(ArenaBitVector), false);
 
diff --git a/src/compiler/codegen/arm/ArchUtility.cc b/src/compiler/codegen/arm/ArchUtility.cc
index edce114..aef98fa 100644
--- a/src/compiler/codegen/arm/ArchUtility.cc
+++ b/src/compiler/codegen/arm/ArchUtility.cc
@@ -122,7 +122,7 @@
                 strcpy(tbuf, "!");
             } else {
                DCHECK_LT(fmt, fmtEnd);
-               DCHECK((unsigned)(nc-'0') < 4);
+               DCHECK_LT((unsigned)(nc-'0'), 4U);
                operand = lir->operands[nc-'0'];
                switch(*fmt++) {
                    case 'H':
diff --git a/src/compiler/codegen/arm/Thumb2/Factory.cc b/src/compiler/codegen/arm/Thumb2/Factory.cc
index 318be5a..1ea565a 100644
--- a/src/compiler/codegen/arm/Thumb2/Factory.cc
+++ b/src/compiler/codegen/arm/Thumb2/Factory.cc
@@ -341,7 +341,7 @@
             LOG(FATAL) << "Bad opcode: " << (int)op;
             break;
     }
-    DCHECK(opcode >= 0);
+    DCHECK_GE(static_cast<int>(opcode), 0);
     if (EncodingMap[opcode].flags & IS_BINARY_OP)
         return newLIR2(cUnit, opcode, rDestSrc1, rSrc2);
     else if (EncodingMap[opcode].flags & IS_TERTIARY_OP) {
@@ -418,7 +418,7 @@
             LOG(FATAL) << "Bad opcode: " << (int)op;
             break;
     }
-    DCHECK(opcode >= 0);
+    DCHECK_GE(static_cast<int>(opcode), 0);
     if (EncodingMap[opcode].flags & IS_QUAD_OP)
         return newLIR4(cUnit, opcode, rDest, rSrc1, rSrc2, shift);
     else {
diff --git a/src/dex_instruction_visitor.h b/src/dex_instruction_visitor.h
index 6a6bc3e..7b7704b 100644
--- a/src/dex_instruction_visitor.h
+++ b/src/dex_instruction_visitor.h
@@ -28,7 +28,7 @@
 #undef DEX_INSTRUCTION_LIST
 #undef INSTRUCTION_CASE
         default:
-          CHECK(true);
+          CHECK(false);
       }
       ptr += inst->Size() * sizeof(uint16_t);
       CHECK_LE(ptr, end);
diff --git a/src/logging.cc b/src/logging.cc
index 5e9ae3a..35a84ed 100644
--- a/src/logging.cc
+++ b/src/logging.cc
@@ -20,15 +20,13 @@
 #include "thread.h"
 #include "utils.h"
 
-namespace {
+namespace art {
 
 art::Mutex& GetLoggingLock() {
   static art::Mutex lock("LogMessage lock");
   return lock;
 }
 
-}
-
 LogMessage::~LogMessage() {
   // Finish constructing the message.
   if (errno_ != -1) {
@@ -62,3 +60,5 @@
 std::ostream& LogMessage::stream() {
   return buffer_;
 }
+
+}  // namespace art
diff --git a/src/logging.h b/src/logging.h
index 4abafdd..e358db6 100644
--- a/src/logging.h
+++ b/src/logging.h
@@ -26,19 +26,44 @@
 
 #define CHECK(x) \
   if (!(x)) \
-    LogMessage(__FILE__, __LINE__, FATAL, -1).stream() \
+    ::art::LogMessage(__FILE__, __LINE__, FATAL, -1).stream() \
         << "Check failed: " #x << " "
 
+namespace art {
+
+template <typename LHS, typename RHS>
+struct EagerEvaluator {
+  EagerEvaluator(LHS lhs, RHS rhs) : lhs(lhs), rhs(rhs) { }
+  LHS lhs;
+  RHS rhs;
+};
+
+
+class LogMessage {
+ public:
+  LogMessage(const char* file, int line, LogSeverity severity, int error);
+  ~LogMessage();
+  std::ostream& stream();
+
+ private:
+  void LogLine(const char*);
+
+  std::stringstream buffer_;
+  const char* file_;
+  int line_number_;
+  LogSeverity severity_;
+  int errno_;
+
+  DISALLOW_COPY_AND_ASSIGN(LogMessage);
+};
+
+}  // namespace art
+
 #define CHECK_OP(LHS, RHS, OP) \
-  do { \
-    typeof (LHS) _lhs = (LHS); \
-    typeof (RHS) _rhs = (RHS); \
-    if (!(_lhs OP _rhs)) { \
-      LogMessage(__FILE__, __LINE__, FATAL, -1).stream() \
-          << "Check failed: " << #LHS << " " << #OP << " " << #RHS \
-          << " (" #LHS "=" << _lhs << ", " #RHS "=" << _rhs << ")";  \
-    } \
-  } while (false)
+  for (::art::EagerEvaluator<typeof(LHS), typeof(RHS)> _values(LHS, RHS); !(_values.lhs OP _values.rhs); ) \
+    ::art::LogMessage(__FILE__, __LINE__, FATAL, -1).stream() \
+        << "Check failed: " << #LHS << " " << #OP << " " << #RHS \
+        << " (" #LHS "=" << _values.lhs << ", " #RHS "=" << _values.rhs << ") "
 
 #define CHECK_EQ(x, y) CHECK_OP(x, y, ==)
 #define CHECK_NE(x, y) CHECK_OP(x, y, !=)
@@ -48,14 +73,11 @@
 #define CHECK_GT(x, y) CHECK_OP(x, y, >)
 
 #define CHECK_STROP(s1, s2, sense) \
-  do { \
-    if ((strcmp(s1, s2) == 0) != sense) { \
-      LOG(FATAL) << "Check failed: " \
-                 << "\"" << s1 << "\"" \
-                 << (sense ? " == " : " != ") \
-                 << "\"" << s2 << "\""; \
-    } \
-  } while (false)
+  if ((strcmp(s1, s2) == 0) != sense) \
+    LOG(FATAL) << "Check failed: " \
+               << "\"" << s1 << "\"" \
+               << (sense ? " == " : " != ") \
+               << "\"" << s2 << "\""
 
 #define CHECK_STREQ(s1, s2) CHECK_STROP(s1, s2, true)
 #define CHECK_STRNE(s1, s2) CHECK_STROP(s1, s2, false)
@@ -121,29 +143,11 @@
 
 #endif
 
-#define LOG(severity) LogMessage(__FILE__, __LINE__, severity, -1).stream()
-#define PLOG(severity) LogMessage(__FILE__, __LINE__, severity, errno).stream()
+#define LOG(severity) ::art::LogMessage(__FILE__, __LINE__, severity, -1).stream()
+#define PLOG(severity) ::art::LogMessage(__FILE__, __LINE__, severity, errno).stream()
 
 #define LG LOG(INFO)
 
 #define UNIMPLEMENTED(level) LOG(level) << __PRETTY_FUNCTION__ << " unimplemented "
 
-class LogMessage {
- public:
-  LogMessage(const char* file, int line, LogSeverity severity, int error);
-  ~LogMessage();
-  std::ostream& stream();
-
- private:
-  void LogLine(const char*);
-
-  std::stringstream buffer_;
-  const char* file_;
-  int line_number_;
-  LogSeverity severity_;
-  int errno_;
-
-  DISALLOW_COPY_AND_ASSIGN(LogMessage);
-};
-
 #endif  // ART_SRC_LOGGING_H_
diff --git a/src/logging_android.cc b/src/logging_android.cc
index f404349..4e7a5fa 100644
--- a/src/logging_android.cc
+++ b/src/logging_android.cc
@@ -21,6 +21,8 @@
 
 #include "cutils/log.h"
 
+namespace art {
+
 static const int kLogSeverityToAndroidLogPriority[] = {
   ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL
 };
@@ -36,3 +38,5 @@
   int priority = kLogSeverityToAndroidLogPriority[severity_];
   LOG_PRI(priority, LOG_TAG, "%s:%d] %s", file_, line_number_, line);
 }
+
+}  // namespace art
diff --git a/src/logging_linux.cc b/src/logging_linux.cc
index fd12b98..d62649b 100644
--- a/src/logging_linux.cc
+++ b/src/logging_linux.cc
@@ -25,6 +25,8 @@
 #include "stringprintf.h"
 #include "utils.h"
 
+namespace art {
+
 LogMessage::LogMessage(const char* file, int line, LogSeverity severity, int error)
 : line_number_(line), severity_(severity), errno_(error)
 {
@@ -36,3 +38,5 @@
   std::cerr << "IWEF"[severity_] << ' ' << StringPrintf("%5d %5d", getpid(), ::art::GetTid()) << ' '
             << file_ << ':' << line_number_ << "] " << line << std::endl;
 }
+
+}  // namespace art
diff --git a/src/object.cc b/src/object.cc
index 99cdbc8..9f225d7 100644
--- a/src/object.cc
+++ b/src/object.cc
@@ -648,7 +648,7 @@
 uintptr_t Method::ToNativePC(const uint32_t dex_pc) const {
   const uint32_t* mapping_table = GetMappingTable();
   if (mapping_table == NULL) {
-    DCHECK(dex_pc == 0);
+    DCHECK_EQ(dex_pc, 0U);
     return 0;   // Special no mapping/pc == 0 case
   }
   size_t mapping_table_length = GetMappingTableLength();
diff --git a/src/object.h b/src/object.h
index de3075b..d8eb179 100644
--- a/src/object.h
+++ b/src/object.h
@@ -903,28 +903,26 @@
   }
 
   size_t GetFrameSizeInBytes() const {
-    DCHECK(sizeof(size_t) == sizeof(uint32_t));
-    size_t result = GetField32(
-        OFFSET_OF_OBJECT_MEMBER(Method, frame_size_in_bytes_), false);
+    DCHECK_EQ(sizeof(size_t), sizeof(uint32_t));
+    size_t result = GetField32(OFFSET_OF_OBJECT_MEMBER(Method, frame_size_in_bytes_), false);
     DCHECK_LE(static_cast<size_t>(kStackAlignment), result);
     return result;
   }
 
   void SetFrameSizeInBytes(size_t new_frame_size_in_bytes) {
-    DCHECK(sizeof(size_t) == sizeof(uint32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(uint32_t));
     DCHECK_LE(static_cast<size_t>(kStackAlignment), new_frame_size_in_bytes);
     SetField32(OFFSET_OF_OBJECT_MEMBER(Method, frame_size_in_bytes_),
                new_frame_size_in_bytes, false);
   }
 
   size_t GetReturnPcOffsetInBytes() const {
-    DCHECK(sizeof(size_t) == sizeof(uint32_t));
-    return GetField32(
-        OFFSET_OF_OBJECT_MEMBER(Method, return_pc_offset_in_bytes_), false);
+    DCHECK_EQ(sizeof(size_t), sizeof(uint32_t));
+    return GetField32(OFFSET_OF_OBJECT_MEMBER(Method, return_pc_offset_in_bytes_), false);
   }
 
   void SetReturnPcOffsetInBytes(size_t return_pc_offset_in_bytes) {
-    DCHECK(sizeof(size_t) == sizeof(uint32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(uint32_t));
     DCHECK_LT(return_pc_offset_in_bytes, GetFrameSizeInBytes());
     SetField32(OFFSET_OF_OBJECT_MEMBER(Method, return_pc_offset_in_bytes_),
                return_pc_offset_in_bytes, false);
@@ -1321,9 +1319,8 @@
   };
 
   Status GetStatus() const {
-    CHECK(sizeof(Status) == sizeof(uint32_t));
-    return static_cast<Status>(
-        GetField32(OFFSET_OF_OBJECT_MEMBER(Class, status_), false));
+    DCHECK_EQ(sizeof(Status), sizeof(uint32_t));
+    return static_cast<Status>(GetField32(OFFSET_OF_OBJECT_MEMBER(Class, status_), false));
   }
 
   void SetStatus(Status new_status);
@@ -1429,13 +1426,13 @@
   }
 
   PrimitiveType GetPrimitiveType() const {
-    CHECK(sizeof(PrimitiveType) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(PrimitiveType), sizeof(int32_t));
     return static_cast<PrimitiveType>(
         GetField32(OFFSET_OF_OBJECT_MEMBER(Class, primitive_type_), false));
   }
 
   void SetPrimitiveType(PrimitiveType new_type) {
-    CHECK(sizeof(PrimitiveType) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(PrimitiveType), sizeof(int32_t));
     SetField32(OFFSET_OF_OBJECT_MEMBER(Class, primitive_type_), new_type, false);
   }
 
@@ -1527,26 +1524,23 @@
   }
 
   size_t SizeOf() const {
-    CHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, class_size_), false);
   }
 
   size_t GetClassSize() const {
-    CHECK(sizeof(size_t) == sizeof(uint32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(uint32_t));
     return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, class_size_), false);
   }
 
   void SetClassSize(size_t new_class_size) {
-    DCHECK(new_class_size >= GetClassSize())
-            << " class=" << PrettyTypeOf(this)
-            << " new_class_size=" << new_class_size
-            << " GetClassSize=" << GetClassSize();
+    DCHECK_GE(new_class_size, GetClassSize()) << " class=" << PrettyTypeOf(this);
     SetField32(OFFSET_OF_OBJECT_MEMBER(Class, class_size_), new_class_size, false);
   }
 
   size_t GetObjectSize() const {
     CHECK(!IsVariableSize());
-    CHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     size_t result = GetField32(OFFSET_OF_OBJECT_MEMBER(Class, object_size_), false);
     CHECK_GE(result, sizeof(Object));
     return result;
@@ -1554,7 +1548,7 @@
 
   void SetObjectSize(size_t new_object_size) {
     DCHECK(!IsVariableSize());
-    CHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     return SetField32(OFFSET_OF_OBJECT_MEMBER(Class, object_size_), new_object_size, false);
   }
 
@@ -1628,8 +1622,7 @@
     // Can only get super class for loaded classes (hack for when runtime is
     // initializing)
     DCHECK(IsLoaded() || !Runtime::Current()->IsStarted());
-    return GetFieldObject<Class*>(
-        OFFSET_OF_OBJECT_MEMBER(Class, super_class_), false);
+    return GetFieldObject<Class*>(OFFSET_OF_OBJECT_MEMBER(Class, super_class_), false);
   }
 
   static MemberOffset SuperClassOffset() {
@@ -1747,14 +1740,12 @@
 
   ObjectArray<Method>* GetVTable() const {
     DCHECK(IsResolved() || IsErroneous());
-    return GetFieldObject<ObjectArray<Method>*>(
-        OFFSET_OF_OBJECT_MEMBER(Class, vtable_), false);
+    return GetFieldObject<ObjectArray<Method>*>(OFFSET_OF_OBJECT_MEMBER(Class, vtable_), false);
   }
 
   ObjectArray<Method>* GetVTableDuringLinking() const {
     DCHECK(IsLoaded() || IsErroneous());
-    return GetFieldObject<ObjectArray<Method>*>(
-        OFFSET_OF_OBJECT_MEMBER(Class, vtable_), false);
+    return GetFieldObject<ObjectArray<Method>*>(OFFSET_OF_OBJECT_MEMBER(Class, vtable_), false);
   }
 
   void SetVTable(ObjectArray<Method>* new_vtable) {
@@ -1814,21 +1805,18 @@
 
   IntArray* GetInterfacesTypeIdx() const {
     CHECK(IsIdxLoaded() || IsErroneous());
-    return GetFieldObject<IntArray*>(
-        OFFSET_OF_OBJECT_MEMBER(Class, interfaces_type_idx_), false);
+    return GetFieldObject<IntArray*>(OFFSET_OF_OBJECT_MEMBER(Class, interfaces_type_idx_), false);
   }
 
   void SetInterfacesTypeIdx(IntArray* new_interfaces_idx);
 
   ObjectArray<Class>* GetInterfaces() const {
     CHECK(IsLoaded() || IsErroneous());
-    return GetFieldObject<ObjectArray<Class>*>(
-        OFFSET_OF_OBJECT_MEMBER(Class, interfaces_), false);
+    return GetFieldObject<ObjectArray<Class>*>(OFFSET_OF_OBJECT_MEMBER(Class, interfaces_), false);
   }
 
   void SetInterfaces(ObjectArray<Class>* new_interfaces) {
-    DCHECK(NULL == GetFieldObject<Object*>(
-        OFFSET_OF_OBJECT_MEMBER(Class, interfaces_), false));
+    DCHECK(NULL == GetFieldObject<Object*>(OFFSET_OF_OBJECT_MEMBER(Class, interfaces_), false));
     SetFieldObject(OFFSET_OF_OBJECT_MEMBER(Class, interfaces_), new_interfaces, false);
   }
 
@@ -1893,18 +1881,18 @@
   // Returns the number of instance fields containing reference types.
   size_t NumReferenceInstanceFields() const {
     DCHECK(IsResolved() || IsErroneous());
-    DCHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, num_reference_instance_fields_), false);
   }
 
   size_t NumReferenceInstanceFieldsDuringLinking() const {
     DCHECK(IsLoaded() || IsErroneous());
-    DCHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, num_reference_instance_fields_), false);
   }
 
   void SetNumReferenceInstanceFields(size_t new_num) {
-    DCHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     SetField32(OFFSET_OF_OBJECT_MEMBER(Class, num_reference_instance_fields_), new_num, false);
   }
 
@@ -1923,18 +1911,18 @@
   // Returns the number of static fields containing reference types.
   size_t NumReferenceStaticFields() const {
     DCHECK(IsResolved() || IsErroneous());
-    DCHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, num_reference_static_fields_), false);
   }
 
   size_t NumReferenceStaticFieldsDuringLinking() const {
     DCHECK(IsLoaded() || IsErroneous());
-    DCHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, num_reference_static_fields_), false);
   }
 
   void SetNumReferenceStaticFields(size_t new_num) {
-    DCHECK(sizeof(size_t) == sizeof(int32_t));
+    DCHECK_EQ(sizeof(size_t), sizeof(int32_t));
     SetField32(OFFSET_OF_OBJECT_MEMBER(Class, num_reference_static_fields_), new_num, false);
   }
 
@@ -2641,8 +2629,7 @@
 inline const String* Method::GetSignature() const {
   DCHECK(GetDeclaringClass()->IsLoaded() || GetDeclaringClass()->IsErroneous());
   const String* result =
-      GetFieldObject<const String*>(
-          OFFSET_OF_OBJECT_MEMBER(Method, signature_), false);
+      GetFieldObject<const String*>(OFFSET_OF_OBJECT_MEMBER(Method, signature_), false);
   DCHECK(result != NULL);
   return result;
 }
diff --git a/src/object_bitmap.cc b/src/object_bitmap.cc
index 06d86d6..483feac 100644
--- a/src/object_bitmap.cc
+++ b/src/object_bitmap.cc
@@ -111,7 +111,7 @@
 void HeapBitmap::ScanWalk(uintptr_t base, ScanCallback* callback, void* arg) {
   CHECK(words_ != NULL);
   CHECK(callback != NULL);
-  CHECK(base >= base_);
+  CHECK_GE(base, base_);
   uintptr_t end = HB_OFFSET_TO_INDEX(max_ - base);
   for (uintptr_t i = 0; i <= end; ++i) {
     unsigned long word = words_[i];
@@ -141,11 +141,11 @@
                            HeapBitmap::SweepCallback* callback, void* arg) {
   CHECK(live_bitmap.words_ != NULL);
   CHECK(mark_bitmap.words_ != NULL);
-  CHECK(live_bitmap.base_ == mark_bitmap.base_);
-  CHECK(live_bitmap.num_bytes_ == mark_bitmap.num_bytes_);
+  CHECK_EQ(live_bitmap.base_, mark_bitmap.base_);
+  CHECK_EQ(live_bitmap.num_bytes_, mark_bitmap.num_bytes_);
   CHECK(callback != NULL);
-  CHECK(base <= max);
-  CHECK(base >= live_bitmap.base_);
+  CHECK_LE(base, max);
+  CHECK_GE(base, live_bitmap.base_);
   max = std::min(max-1, live_bitmap.max_);
   if (live_bitmap.max_ < live_bitmap.base_) {
     // Easy case; both are obviously empty.
diff --git a/src/stack_walk.cc b/src/stack_walk.cc
index a1f6e0f..b2feee3 100644
--- a/src/stack_walk.cc
+++ b/src/stack_walk.cc
@@ -59,7 +59,7 @@
         EXPECT_EQ(0U, m->ToDexPC(pc));
         EXPECT_REGS(1);
       } else {
-        CHECK(gJava_StackWalk_refmap_calls == 2);
+        CHECK_EQ(gJava_StackWalk_refmap_calls, 2);
         EXPECT_EQ(4U, m->ToDexPC(pc));
         EXPECT_REGS(1);  // Note that v1 is not in the minimal root set
       }
@@ -68,7 +68,7 @@
         EXPECT_EQ(0xaU, m->ToDexPC(pc));
         EXPECT_REGS(1, 2, 3);
       } else {
-        CHECK(gJava_StackWalk_refmap_calls == 2);
+        CHECK_EQ(gJava_StackWalk_refmap_calls, 2);
         EXPECT_EQ(0xaU, m->ToDexPC(pc));
           EXPECT_REGS(1, 2, 3);
       }
@@ -77,7 +77,7 @@
         EXPECT_EQ(0x2d5U, m->ToDexPC(pc));
         EXPECT_REGS(2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 25);
       } else {
-        CHECK(gJava_StackWalk_refmap_calls == 2);
+        CHECK_EQ(gJava_StackWalk_refmap_calls, 2);
         EXPECT_EQ(0x2d5U, m->ToDexPC(pc));
         EXPECT_REGS(2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 25);
       }
diff --git a/src/thread.cc b/src/thread.cc
index 5ffd451..b3dbcb6 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -698,7 +698,7 @@
       class_loader_override_(NULL),
       long_jump_context_(NULL),
       throwing_OOME_(false) {
-  CHECK((sizeof(Thread) % 4) == 0) << sizeof(Thread);
+  CHECK_EQ((sizeof(Thread) % 4), 0U) << sizeof(Thread);
 }
 
 void MonitorExitVisitor(const Object* object, void*) {
diff --git a/src/utils.cc b/src/utils.cc
index 03a4811..48ae2ae 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -203,8 +203,8 @@
 
   std::string class_name(declaring_class->GetDescriptor()->ToModifiedUtf8());
   // Remove the leading 'L' and trailing ';'...
-  CHECK(class_name[0] == 'L') << class_name;
-  CHECK(class_name[class_name.size() - 1] == ';') << class_name;
+  CHECK_EQ(class_name[0], 'L') << class_name;
+  CHECK_EQ(class_name[class_name.size() - 1], ';') << class_name;
   class_name.erase(0, 1);
   class_name.erase(class_name.size() - 1, 1);
 
diff --git a/src/zip_archive.cc b/src/zip_archive.cc
index 8c77391..82d97ec 100644
--- a/src/zip_archive.cc
+++ b/src/zip_archive.cc
@@ -222,7 +222,7 @@
     }
   } while (zerr == Z_OK);
 
-  DCHECK(zerr == Z_STREAM_END); // other errors should've been caught
+  DCHECK_EQ(zerr, Z_STREAM_END); // other errors should've been caught
 
   // paranoia
   if (zstream->Get().total_out != uncompressed_length) {