--- old/src/hotspot/share/interpreter/interpreterRuntime.cpp 2019-05-07 03:04:52.128417225 -0400 +++ new/src/hotspot/share/interpreter/interpreterRuntime.cpp 2019-05-07 03:04:51.638388618 -0400 @@ -920,23 +920,19 @@ info.call_kind() == CallInfo::vtable_call, ""); } #endif + // Get sender or sender's unsafe_anonymous_host, and only set cpCache entry to resolved if + // it is not an interface. The receiver for invokespecial calls within interface + // methods must be checked for every call. + InstanceKlass* sender = pool->pool_holder(); + sender = sender->is_unsafe_anonymous() ? sender->unsafe_anonymous_host() : sender; switch (info.call_kind()) { - case CallInfo::direct_call: { - // Get sender or sender's unsafe_anonymous_host, and only set cpCache entry to resolved if - // it is not an interface. The receiver for invokespecial calls within interface - // methods must be checked for every call. - InstanceKlass* pool_holder = pool->pool_holder(); - InstanceKlass* sender = pool_holder->is_unsafe_anonymous() ? - pool_holder->unsafe_anonymous_host() : pool_holder; - + case CallInfo::direct_call: cp_cache_entry->set_direct_call( bytecode, info.resolved_method(), - sender->is_interface(), - pool_holder); + sender->is_interface()); break; - } case CallInfo::vtable_call: cp_cache_entry->set_vtable_call( bytecode,