7012072: CompileTheWorld causes incorrect class initialization
authornever
Wed, 23 Feb 2011 19:09:16 -0800
changeset 8490 d58c5dbf8c7b
parent 8489 7ab03c615436
child 8491 058b35a9d008
child 8492 e93bfdd91c63
7012072: CompileTheWorld causes incorrect class initialization Reviewed-by: kvn, twisti
hotspot/src/share/vm/prims/unsafe.cpp
--- a/hotspot/src/share/vm/prims/unsafe.cpp	Wed Feb 23 12:28:23 2011 -0800
+++ b/hotspot/src/share/vm/prims/unsafe.cpp	Wed Feb 23 19:09:16 2011 -0800
@@ -110,6 +110,8 @@
 
 inline void* index_oop_from_field_offset_long(oop p, jlong field_offset) {
   jlong byte_offset = field_offset_to_byte_offset(field_offset);
+  // Don't allow unsafe to be used to read or write the header word of oops
+  assert(p == NULL || field_offset >= oopDesc::header_size(), "offset must be outside of header");
 #ifdef ASSERT
   if (p != NULL) {
     assert(byte_offset >= 0 && byte_offset <= (jlong)MAX_OBJECT_SIZE, "sane offset");