Assignability checks for SetFieldObject.
Adds check to SetFieldObject that is enabled with VERIFY_OBJECT_ENABLED.
The check verifies that the object being set to the field is assignable
to that field.
Fix bug that iftable was typed to be Object[][] but being assigned a
Object[].
Change-Id: I3d3744347f2dd142ca90db321ed876eaebfe7f7f
diff --git a/src/heap.h b/src/heap.h
index 1f9ac86..d3127de 100644
--- a/src/heap.h
+++ b/src/heap.h
@@ -170,13 +170,14 @@
MemberOffset finalizer_reference_zombie_offset);
Object* GetReferenceReferent(Object* reference);
- void ClearReferenceReferent(Object* reference);
+ void ClearReferenceReferent(Object* reference) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
// Returns true if the reference object has not yet been enqueued.
bool IsEnqueuable(const Object* ref);
- void EnqueueReference(Object* ref, Object** list);
- void EnqueuePendingReference(Object* ref, Object** list);
- Object* DequeuePendingReference(Object** list);
+ void EnqueueReference(Object* ref, Object** list) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
+ void EnqueuePendingReference(Object* ref, Object** list)
+ SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
+ Object* DequeuePendingReference(Object** list) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
MemberOffset GetReferencePendingNextOffset() {
DCHECK_NE(reference_pendingNext_offset_.Uint32Value(), 0U);
@@ -199,6 +200,10 @@
verify_objects_ = false;
}
+ bool IsObjectValidationEnabled() const {
+ return verify_objects_;
+ }
+
void RecordFree(size_t freed_objects, size_t freed_bytes);
// Must be called if a field of an Object in the heap changes, and before any GC safe-point.