< prev index next >

src/share/vm/opto/castnode.cpp

Print this page
rev 12618 : undo checkcastpp
rev 12682 : nio exps
rev 12700 : 8176506: C2: loop unswitching and unsafe accesses cause crash
Reviewed-by:

*** 119,128 **** --- 119,131 ---- // in that case only the narrower CastII would be kept by the code // below which would be incorrect. if (is_CastII() && as_CastII()->has_range_check()) { return NULL; } + if (type()->isa_rawptr() && (phase->type_or_null(val) == NULL || phase->type(val)->isa_oopptr())) { + return NULL; + } for (DUIterator_Fast imax, i = val->fast_outs(imax); i < imax; i++) { Node* u = val->fast_out(i); if (u != this && u->outcnt() > 0 && u->Opcode() == opc &&
*** 303,317 **** --- 306,324 ---- if( in_type != NULL && my_type != NULL ) { TypePtr::PTR in_ptr = in_type->ptr(); if (in_ptr == TypePtr::Null) { result = in_type; } else if (in_ptr == TypePtr::Constant) { + if (my_type->isa_rawptr()) { + result = my_type; + } else { const TypeOopPtr *jptr = my_type->isa_oopptr(); assert(jptr, ""); result = !in_type->higher_equal(_type) ? my_type->cast_to_ptr_type(TypePtr::NotNull) : in_type; + } } else { result = my_type->cast_to_ptr_type( my_type->join_ptr(in_ptr) ); } }
< prev index next >