diff -r 5d42601232b1 -r 16053580a684 hotspot/src/share/vm/interpreter/linkResolver.cpp --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Fri Oct 23 14:33:19 2015 +0300 +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Mon Oct 26 13:11:36 2015 -0400 @@ -307,12 +307,14 @@ return methodHandle(THREAD, result); } + InstanceKlass* ik = InstanceKlass::cast(klass()); + // JDK 8, JVMS 5.4.3.4: Interface method resolution should // ignore static and non-public methods of java.lang.Object, // like clone, finalize, registerNatives. if (in_imethod_resolve && result != NULL && - klass->is_interface() && + ik->is_interface() && (result->is_static() || !result->is_public()) && result->method_holder() == SystemDictionary::Object_klass()) { result = NULL; @@ -321,11 +323,11 @@ // Before considering default methods, check for an overpass in the // current class if a method has not been found. if (result == NULL) { - result = InstanceKlass::cast(klass())->find_method(name, signature); + result = ik->find_method(name, signature); } if (result == NULL) { - Array* default_methods = InstanceKlass::cast(klass())->default_methods(); + Array* default_methods = ik->default_methods(); if (default_methods != NULL) { result = InstanceKlass::find_method(default_methods, name, signature); } @@ -374,21 +376,21 @@ int vtable_index = Method::invalid_vtable_index; Symbol* name = resolved_method->name(); Symbol* signature = resolved_method->signature(); + InstanceKlass* ik = InstanceKlass::cast(klass()); // First check in default method array - if (!resolved_method->is_abstract() && - (InstanceKlass::cast(klass())->default_methods() != NULL)) { - int index = InstanceKlass::find_method_index(InstanceKlass::cast(klass())->default_methods(), + if (!resolved_method->is_abstract() && ik->default_methods() != NULL) { + int index = InstanceKlass::find_method_index(ik->default_methods(), name, signature, Klass::find_overpass, Klass::find_static, Klass::find_private); if (index >= 0 ) { - vtable_index = InstanceKlass::cast(klass())->default_vtable_indices()->at(index); + vtable_index = ik->default_vtable_indices()->at(index); } } if (vtable_index == Method::invalid_vtable_index) { // get vtable_index for miranda methods ResourceMark rm; - klassVtable *vt = InstanceKlass::cast(klass())->vtable(); + klassVtable *vt = ik->vtable(); vtable_index = vt->index_of_miranda(name, signature); } return vtable_index;