diff options
Diffstat (limited to 'runtime/mirror/array-inl.h')
| -rw-r--r-- | runtime/mirror/array-inl.h | 10 |
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; |