src/share/vm/opto/bytecodeInfo.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6829187 Cdiff src/share/vm/opto/bytecodeInfo.cpp

src/share/vm/opto/bytecodeInfo.cpp

Print this page
rev 1082 : [mq]: indy.compiler.patch

*** 320,339 **** if( !UseInterpreter || CompileTheWorld /* running Xcomp or CTW */ ) { // Checks that constant pool's call site has been visited // stricter than callee_holder->is_initialized() ciBytecodeStream iter(caller_method); iter.force_bci(caller_bci); int index = iter.get_index_int(); ! if( !caller_method->is_klass_loaded(index, true) ) { return false; } // Try to do constant pool resolution if running Xcomp - Bytecodes::Code call_bc = iter.cur_bc(); if( !caller_method->check_call(index, call_bc == Bytecodes::_invokestatic) ) { return false; } } // We will attempt to see if a class/field/etc got properly loaded. If it // did not, it may attempt to throw an exception during our probing. Catch // and ignore such exceptions and do not attempt to compile the method. if( callee_method->should_exclude() ) return false; --- 320,342 ---- if( !UseInterpreter || CompileTheWorld /* running Xcomp or CTW */ ) { // Checks that constant pool's call site has been visited // stricter than callee_holder->is_initialized() ciBytecodeStream iter(caller_method); iter.force_bci(caller_bci); + Bytecodes::Code call_bc = iter.cur_bc(); + // An invokedynamic instruction does not have a klass. + if (call_bc != Bytecodes::_invokedynamic) { int index = iter.get_index_int(); ! if (!caller_method->is_klass_loaded(index, true)) { return false; } // Try to do constant pool resolution if running Xcomp if( !caller_method->check_call(index, call_bc == Bytecodes::_invokestatic) ) { return false; } } + } // We will attempt to see if a class/field/etc got properly loaded. If it // did not, it may attempt to throw an exception during our probing. Catch // and ignore such exceptions and do not attempt to compile the method. if( callee_method->should_exclude() ) return false;
src/share/vm/opto/bytecodeInfo.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File