< prev index next >
src/share/vm/c1/c1_LIRGenerator.cpp
Print this page
rev 12270 : 8160543: C1: Crash in java.lang.String.indexOf in some java.sql tests
Summary: C1 must use unverified entry point for unloaded methods.
Reviewed-by:
*** 2974,2984 ****
args->at(0)->load_item_force(LIR_Assembler::receiverOpr());
receiver = args->at(0)->result();
}
// emit invoke code
- bool optimized = x->target_is_loaded() && x->target_is_final();
assert(receiver->is_illegal() || receiver->is_equal(LIR_Assembler::receiverOpr()), "must match");
// JSR 292
// Preserve the SP over MethodHandle call sites, if needed.
ciMethod* target = x->target();
--- 2974,2983 ----
*** 2999,3011 ****
arg_list, info);
break;
case Bytecodes::_invokespecial:
case Bytecodes::_invokevirtual:
case Bytecodes::_invokeinterface:
! // for final target we still produce an inline cache, in order
! // to be able to call mixed mode
! if (x->code() == Bytecodes::_invokespecial || optimized) {
__ call_opt_virtual(target, receiver, result_register,
SharedRuntime::get_resolve_opt_virtual_call_stub(),
arg_list, info);
} else if (x->vtable_index() < 0) {
__ call_icvirtual(target, receiver, result_register,
--- 2998,3010 ----
arg_list, info);
break;
case Bytecodes::_invokespecial:
case Bytecodes::_invokevirtual:
case Bytecodes::_invokeinterface:
! // for loaded and final (method or class) target we still produce an inline cache,
! // in order to be able to call mixed mode
! if (x->code() == Bytecodes::_invokespecial || x->target_is_final()) {
__ call_opt_virtual(target, receiver, result_register,
SharedRuntime::get_resolve_opt_virtual_call_stub(),
arg_list, info);
} else if (x->vtable_index() < 0) {
__ call_icvirtual(target, receiver, result_register,
< prev index next >