Mercurial > hg > truffle
diff src/share/vm/c1/c1_LIRGenerator.cpp @ 12000:8d77d02828d9
8016474: Crash in sun.reflect.UnsafeObjectFieldAccessorImpl.get
Summary: C1's GetUnsafeObject G1 pre-barrier uses the wrong type to read the klass pointer.
Reviewed-by: iveresov, kvn
author | twisti |
---|---|
date | Mon, 29 Jul 2013 16:32:38 -0700 |
parents | b800986664f4 |
children | 3cce976666d9 c775af091fe9 |
line wrap: on
line diff
--- a/src/share/vm/c1/c1_LIRGenerator.cpp Mon Jul 29 11:54:18 2013 +0400 +++ b/src/share/vm/c1/c1_LIRGenerator.cpp Mon Jul 29 16:32:38 2013 -0700 @@ -2295,7 +2295,7 @@ if (gen_type_check) { // We have determined that offset == referent_offset && src != null. // if (src->_klass->_reference_type == REF_NONE) -> continue - __ move(new LIR_Address(src.result(), oopDesc::klass_offset_in_bytes(), UseCompressedKlassPointers ? T_OBJECT : T_ADDRESS), src_klass); + __ move(new LIR_Address(src.result(), oopDesc::klass_offset_in_bytes(), T_ADDRESS), src_klass); LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE); LIR_Opr reference_type = new_register(T_INT); __ move(reference_type_addr, reference_type);