6700102: c2 assertion "counter_changed,"failed dependencies, but counter didn't change")" with AggressiveOpts

Bytecode Escape Analyzer does not have the check for the case described in 6389127.

Reviewed-by: never
This commit is contained in:
Vladimir Kozlov 2008-05-15 22:40:43 -07:00
parent 3a4ea9a986
commit 9bcba384cb

View File

@ -218,6 +218,13 @@ void BCEscapeAnalyzer::invoke(StateInfo &state, Bytecodes::Code code, ciMethod*
ciInstanceKlass* callee_holder = ciEnv::get_instance_klass_for_declared_method_holder(holder);
ciInstanceKlass* actual_recv = callee_holder;
// some methods are obviously bindable without any type checks so
// convert them directly to an invokespecial.
if (target->is_loaded() && !target->is_abstract() &&
target->can_be_statically_bound() && code == Bytecodes::_invokevirtual) {
code = Bytecodes::_invokespecial;
}
// compute size of arguments
int arg_size = target->arg_size();
if (!target->is_loaded() && code == Bytecodes::_invokestatic) {