Fix object verification.
Refactor VERIFY_OBJECT_ENABLED to become less brittle to change enum and global
constant.
Change-Id: Ie405106be81dce9a913730c7f46a5659582fa18b
diff --git a/src/mirror/object.h b/src/mirror/object.h
index c404b61..0cce8d8 100644
--- a/src/mirror/object.h
+++ b/src/mirror/object.h
@@ -58,6 +58,8 @@
#define OFFSET_OF_OBJECT_MEMBER(type, field) \
MemberOffset(OFFSETOF_MEMBER(type, field))
+const bool kCheckFieldAssignments = false;
+
// C++ mirror of java.lang.Object
class MANAGED Object {
public:
@@ -231,15 +233,17 @@
}
private:
-#if VERIFY_OBJECT_ENABLED
static void VerifyObject(const Object* obj);
- void CheckFieldAssignment(MemberOffset field_offset, const Object* new_value)
+
+ // Verify the type correctness of stores to fields.
+ void CheckFieldAssignmentImpl(MemberOffset field_offset, const Object* new_value)
SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
-#else
- static void VerifyObject(const Object*) {}
- void CheckFieldAssignment(MemberOffset, const Object*)
- SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {}
-#endif
+ void CheckFieldAssignment(MemberOffset field_offset, const Object* new_value)
+ SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
+ if (kCheckFieldAssignments) {
+ CheckFieldAssignmentImpl(field_offset, new_value);
+ }
+ }
// Write barrier called post update to a reference bearing field.
static void WriteBarrierField(const Object* dst, MemberOffset offset, const Object* new_value);