< prev index next >

src/share/vm/ci/ciTypeFlow.cpp

Print this page

        

*** 545,560 **** } } } // ------------------------------------------------------------------ ! // ciTypeFlow::StateVector::do_aaload ! void ciTypeFlow::StateVector::do_aaload(ciBytecodeStream* str) { pop_int(); ! ciObjArrayKlass* array_klass = pop_objArray(); if (array_klass == NULL) { ! // Did aaload on a null reference; push a null and ignore the exception. // This instruction will never continue normally. All we have to do // is report a value that will meet correctly with any downstream // reference types on paths that will truly be executed. This null type // meets with any reference type to yield that same reference type. // (The compiler will generate an unconditional exception here.) --- 545,560 ---- } } } // ------------------------------------------------------------------ ! // ciTypeFlow::StateVector::do_aload ! void ciTypeFlow::StateVector::do_aload(ciBytecodeStream* str) { pop_int(); ! ciArrayKlass* array_klass = pop_objOrValueArray(); if (array_klass == NULL) { ! // Did aload on a null reference; push a null and ignore the exception. // This instruction will never continue normally. All we have to do // is report a value that will meet correctly with any downstream // reference types on paths that will truly be executed. This null type // meets with any reference type to yield that same reference type. // (The compiler will generate an unconditional exception here.)
*** 904,920 **** tty->print_cr(">> Interpreting bytecode %d:%s", str->cur_bci(), Bytecodes::name(str->cur_bc())); } switch(str->cur_bc()) { ! case Bytecodes::_aaload: do_aaload(str); break; case Bytecodes::_aastore: { pop_object(); pop_int(); ! pop_objArray(); break; } case Bytecodes::_aconst_null: { push_null(); --- 904,922 ---- tty->print_cr(">> Interpreting bytecode %d:%s", str->cur_bci(), Bytecodes::name(str->cur_bc())); } switch(str->cur_bc()) { ! case Bytecodes::_vaload: ! case Bytecodes::_aaload: do_aload(str); break; + case Bytecodes::_vastore: case Bytecodes::_aastore: { pop_object(); pop_int(); ! pop_objOrValueArray(); break; } case Bytecodes::_aconst_null: { push_null();
*** 933,943 **** bool will_link; ciKlass* element_klass = str->get_klass(will_link); if (!will_link) { trap(str, element_klass, str->get_klass_index()); } else { ! push_object(ciObjArrayKlass::make(element_klass)); } break; } case Bytecodes::_areturn: case Bytecodes::_vreturn: --- 935,945 ---- bool will_link; ciKlass* element_klass = str->get_klass(will_link); if (!will_link) { trap(str, element_klass, str->get_klass_index()); } else { ! push_object(ciArrayKlass::make(element_klass)); } break; } case Bytecodes::_areturn: case Bytecodes::_vreturn:
< prev index next >