< prev index next >

src/share/vm/opto/callGenerator.cpp

Print this page

        

*** 894,907 **** const Type* arg_type = arg->bottom_type(); const Type* sig_type = TypeOopPtr::make_from_klass(t->as_klass()); if (t->is_valuetype()) { assert(!(arg_type->isa_valuetype() && t == kit.C->env()->___Value_klass()), "need a pointer to the value type"); if (arg_type->isa_valuetypeptr() && t != kit.C->env()->___Value_klass()) { - const Type* sig_type = TypeOopPtr::make_from_klass(t->as_klass()); Node* cast = gvn.transform(new CheckCastPPNode(kit.control(), arg, sig_type)); Node* vt = ValueTypeNode::make(gvn, kit.merged_memory(), cast); kit.set_argument(arg_nb, vt); } } else { if (arg_type->isa_oopptr() && !arg_type->higher_equal(sig_type)) { Node* cast_obj = gvn.transform(new CheckCastPPNode(kit.control(), arg, sig_type)); kit.set_argument(arg_nb, cast_obj); --- 894,908 ---- const Type* arg_type = arg->bottom_type(); const Type* sig_type = TypeOopPtr::make_from_klass(t->as_klass()); if (t->is_valuetype()) { assert(!(arg_type->isa_valuetype() && t == kit.C->env()->___Value_klass()), "need a pointer to the value type"); if (arg_type->isa_valuetypeptr() && t != kit.C->env()->___Value_klass()) { Node* cast = gvn.transform(new CheckCastPPNode(kit.control(), arg, sig_type)); Node* vt = ValueTypeNode::make(gvn, kit.merged_memory(), cast); kit.set_argument(arg_nb, vt); + } else { + assert(t == kit.C->env()->___Value_klass() || arg->is_ValueType(), "inconsistent argument"); } } else { if (arg_type->isa_oopptr() && !arg_type->higher_equal(sig_type)) { Node* cast_obj = gvn.transform(new CheckCastPPNode(kit.control(), arg, sig_type)); kit.set_argument(arg_nb, cast_obj);
< prev index next >