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