< prev index next >

src/share/vm/ci/ciTypeFlow.cpp

Print this page

        

*** 789,808 **** void ciTypeFlow::StateVector::do_vwithfield(ciBytecodeStream* str) { bool will_link; ciField* field = str->get_field(will_link); ciKlass* klass = field->holder(); assert(klass->is_valuetype(), "should be value type"); ! // TODO: add additional checks ciType* type = pop_value(); ciType* field_type = field->type(); if (field_type->is_two_word()) { ciType* type2 = pop_value(); assert(type2->is_two_word(), "must be 2nd half"); assert(type == half_type(type2), "must be 2nd half"); } pop_object(); push_object(klass); } // ------------------------------------------------------------------ // ciTypeFlow::StateVector::do_newarray void ciTypeFlow::StateVector::do_newarray(ciBytecodeStream* str) { --- 789,812 ---- void ciTypeFlow::StateVector::do_vwithfield(ciBytecodeStream* str) { bool will_link; ciField* field = str->get_field(will_link); ciKlass* klass = field->holder(); assert(klass->is_valuetype(), "should be value type"); ! if (!will_link) { ! trap(str, klass, str->get_field_holder_index()); ! } else { ciType* type = pop_value(); ciType* field_type = field->type(); + assert(field_type->is_loaded(), "field type must be loaded"); if (field_type->is_two_word()) { ciType* type2 = pop_value(); assert(type2->is_two_word(), "must be 2nd half"); assert(type == half_type(type2), "must be 2nd half"); } pop_object(); push_object(klass); + } } // ------------------------------------------------------------------ // ciTypeFlow::StateVector::do_newarray void ciTypeFlow::StateVector::do_newarray(ciBytecodeStream* str) {
< prev index next >