< prev index next >

src/share/vm/opto/cfgnode.cpp

Print this page

        

*** 942,959 **** // convert the one to the other. const TypePtr* ttp = _type->make_ptr(); const TypeInstPtr* ttip = (ttp != NULL) ? ttp->isa_instptr() : NULL; const TypeKlassPtr* ttkp = (ttp != NULL) ? ttp->isa_klassptr() : NULL; bool is_intf = false; ! if (ttip != NULL) { ! ciKlass* k = ttip->klass(); ! if (k->is_loaded() && k->is_interface()) is_intf = true; ! } ! if (ttkp != NULL) { ! ciKlass* k = ttkp->klass(); ! if (k->is_loaded() && k->is_interface()) is_intf = true; } // Default case: merge all inputs const Type *t = Type::TOP; // Merged type starting value --- 942,954 ---- // convert the one to the other. const TypePtr* ttp = _type->make_ptr(); const TypeInstPtr* ttip = (ttp != NULL) ? ttp->isa_instptr() : NULL; const TypeKlassPtr* ttkp = (ttp != NULL) ? ttp->isa_klassptr() : NULL; bool is_intf = false; ! if (ttip != NULL && ttip->is_loaded() && ttip->klass()->is_interface()) { is_intf = true; ! } else if (ttkp != NULL && ttkp->is_loaded() && ttkp->klass()->is_interface()) { is_intf = true; } // Default case: merge all inputs const Type *t = Type::TOP; // Merged type starting value
*** 1007,1019 **** // both implement interface I, but their meet is at 'j/l/O' which // doesn't implement I, we have no way to tell if the result should // be 'I' or 'j/l/O'. Thus we'll pick 'j/l/O'. If this then flows // into a Phi which "knows" it's an Interface type we'll have to // uplift the type. ! if (!t->empty() && ttip && ttip->is_loaded() && ttip->klass()->is_interface()) { assert(ft == _type, ""); // Uplift to interface ! } else if (!t->empty() && ttkp && ttkp->is_loaded() && ttkp->klass()->is_interface()) { assert(ft == _type, ""); // Uplift to interface } else { // We also have to handle 'evil cases' of interface- vs. class-arrays Type::get_arrays_base_elements(jt, _type, NULL, &ttip); if (!t->empty() && ttip != NULL && ttip->is_loaded() && ttip->klass()->is_interface()) { --- 1002,1014 ---- // both implement interface I, but their meet is at 'j/l/O' which // doesn't implement I, we have no way to tell if the result should // be 'I' or 'j/l/O'. Thus we'll pick 'j/l/O'. If this then flows // into a Phi which "knows" it's an Interface type we'll have to // uplift the type. ! if (!t->empty() && ttip != NULL && ttip->is_loaded() && ttip->klass()->is_interface()) { assert(ft == _type, ""); // Uplift to interface ! } else if (!t->empty() && ttkp != NULL && ttkp->is_loaded() && ttkp->klass()->is_interface()) { assert(ft == _type, ""); // Uplift to interface } else { // We also have to handle 'evil cases' of interface- vs. class-arrays Type::get_arrays_base_elements(jt, _type, NULL, &ttip); if (!t->empty() && ttip != NULL && ttip->is_loaded() && ttip->klass()->is_interface()) {
< prev index next >