< 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 >