summaryrefslogtreecommitdiff
path: root/runtime/mirror/array-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/mirror/array-inl.h')
-rw-r--r--runtime/mirror/array-inl.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h
index 19d35a89ec..34925f52e2 100644
--- a/runtime/mirror/array-inl.h
+++ b/runtime/mirror/array-inl.h
@@ -35,14 +35,16 @@ inline uint32_t Array::ClassSize(PointerSize pointer_size) {
return Class::ComputeClassSize(true, vtable_entries, 0, 0, 0, 0, 0, pointer_size);
}
-template<VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption>
+template<VerifyObjectFlags kVerifyFlags>
inline size_t Array::SizeOf() {
- // This is safe from overflow because the array was already allocated, so we know it's sane.
- size_t component_size_shift = GetClass<kVerifyFlags, kReadBarrierOption>()->
- template GetComponentSizeShift<kReadBarrierOption>();
+ // No read barrier is needed for reading a constant primitive field through
+ // constant reference field chain. See ReadBarrierOption.
+ size_t component_size_shift =
+ GetClass<kVerifyFlags, kWithoutReadBarrier>()->GetComponentSizeShift();
// Don't need to check this since we already check this in GetClass.
int32_t component_count =
GetLength<static_cast<VerifyObjectFlags>(kVerifyFlags & ~kVerifyThis)>();
+ // This is safe from overflow because the array was already allocated, so we know it's sane.
size_t header_size = DataOffset(1U << component_size_shift).SizeValue();
size_t data_size = component_count << component_size_shift;
return header_size + data_size;