# HG changeset patch # User kvn # Date 1350500972 25200 # Node ID cfe522e6461cbb99c6a7b140427bd7349cd05086 # Parent 58fbf2da3c169c33bd83df4d4dcfec2915b495a5 8000623: tools/javac/Diagnostics/6769027/T6769027.java crashes in PSPromotionManager::copy_to_survivor_space Summary: Fix type of method pointer load from vtable. Reviewed-by: twisti, johnc, roland diff -r 58fbf2da3c16 -r cfe522e6461c src/share/vm/opto/compile.cpp --- a/src/share/vm/opto/compile.cpp Fri Oct 12 14:06:27 2012 -0700 +++ b/src/share/vm/opto/compile.cpp Wed Oct 17 12:09:32 2012 -0700 @@ -3047,9 +3047,9 @@ case T_LONG: case T_DOUBLE: return (_v._value.j == other._v._value.j); case T_OBJECT: - case T_METADATA: return (_v._metadata == other._v._metadata); case T_ADDRESS: return (_v._value.l == other._v._value.l); case T_VOID: return (_v._value.l == other._v._value.l); // jump-table entries + case T_METADATA: return (_v._metadata == other._v._metadata); default: ShouldNotReachHere(); } return false; diff -r 58fbf2da3c16 -r cfe522e6461c src/share/vm/opto/compile.hpp --- a/src/share/vm/opto/compile.hpp Fri Oct 12 14:06:27 2012 -0700 +++ b/src/share/vm/opto/compile.hpp Wed Oct 17 12:09:32 2012 -0700 @@ -149,7 +149,7 @@ private: BasicType _type; union { - jvalue _value; + jvalue _value; Metadata* _metadata; } _v; int _offset; // offset of this constant (in bytes) relative to the constant table base. diff -r 58fbf2da3c16 -r cfe522e6461c src/share/vm/opto/library_call.cpp --- a/src/share/vm/opto/library_call.cpp Fri Oct 12 14:06:27 2012 -0700 +++ b/src/share/vm/opto/library_call.cpp Wed Oct 17 12:09:32 2012 -0700 @@ -3830,7 +3830,7 @@ vtable_index*vtableEntry::size()) * wordSize + vtableEntry::method_offset_in_bytes(); Node* entry_addr = basic_plus_adr(obj_klass, entry_offset); - Node* target_call = make_load(NULL, entry_addr, TypeInstPtr::NOTNULL, T_OBJECT); + Node* target_call = make_load(NULL, entry_addr, TypePtr::NOTNULL, T_ADDRESS); // Compare the target method with the expected method (e.g., Object.hashCode). const TypePtr* native_call_addr = TypeMetadataPtr::make(method);