提交 1aaad3e2 编写于 作者: Y ysr

6908208: UseCompressedOops: array_size() returns incorrect size for MAX_INT...

6908208: UseCompressedOops: array_size() returns incorrect size for MAX_INT object array following 6906727
Summary: In array_size() cast to an unsigned to avoid overflow of intermediate value.
Reviewed-by: kvn, tonyp, jmasa, jcoomes, coleenp
上级 3b7a4c32
...@@ -58,7 +58,7 @@ private: ...@@ -58,7 +58,7 @@ private:
old_res = align_size_up(length, OopsPerHeapWord)/OopsPerHeapWord; old_res = align_size_up(length, OopsPerHeapWord)/OopsPerHeapWord;
} }
#endif // ASSERT #endif // ASSERT
int res = (length + OopsPerHeapWord - 1)/OopsPerHeapWord; int res = ((uint)length + OopsPerHeapWord - 1)/OopsPerHeapWord;
assert(res == old_res, "Inconsistency between old and new."); assert(res == old_res, "Inconsistency between old and new.");
return res; return res;
} }
...@@ -96,7 +96,11 @@ private: ...@@ -96,7 +96,11 @@ private:
static int object_size(int length) { static int object_size(int length) {
// This returns the object size in HeapWords. // This returns the object size in HeapWords.
return align_object_size(header_size() + array_size(length)); uint asz = array_size(length);
uint osz = align_object_size(header_size() + asz);
assert(osz >= asz, "no overflow");
assert((int)osz > 0, "no overflow");
return (int)osz;
} }
// special iterators for index ranges, returns size of object // special iterators for index ranges, returns size of object
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册