src/share/vm/opto/parse1.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/opto/parse1.cpp
src/share/vm/opto/parse1.cpp
Print this page
rev 7602 : 8055530: assert(_exits.control()->is_top() || !_gvn.type(ret_phi)->empty()) failed: return value must be well defined
Summary: concurrent class loading causes return phi to become top
Reviewed-by:
*** 984,994 ****
}
if (tf()->range()->cnt() > TypeFunc::Parms) {
const Type* ret_type = tf()->range()->field_at(TypeFunc::Parms);
Node* ret_phi = _gvn.transform( _exits.argument(0) );
! assert(_exits.control()->is_top() || !_gvn.type(ret_phi)->empty(), "return value must be well defined");
_exits.push_node(ret_type->basic_type(), ret_phi);
}
// Note: Logic for creating and optimizing the ReturnNode is in Compile.
--- 984,1003 ----
}
if (tf()->range()->cnt() > TypeFunc::Parms) {
const Type* ret_type = tf()->range()->field_at(TypeFunc::Parms);
Node* ret_phi = _gvn.transform( _exits.argument(0) );
! #ifdef ASSERT
! {
! // In case of concurrent class loading, the type we set for the
! // ret_phi in build_exits() may have been too optimistic and the
! // ret_phi may be top now.
! MutexLockerEx ml(Compile_lock, Mutex::_no_safepoint_check_flag);
! assert(_exits.control()->is_top() || !_gvn.type(ret_phi)->empty() ||
! (ret_type->isa_ptr() && C->env()->system_dictionary_modification_counter_changed()), "return value must be well defined");
! }
! #endif
_exits.push_node(ret_type->basic_type(), ret_phi);
}
// Note: Logic for creating and optimizing the ReturnNode is in Compile.
src/share/vm/opto/parse1.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File