mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
6875577: CTW fails with /hotspot/src/share/vm/opto/memnode.cpp
Fix do_null_check to check for unloaded klass for all oop pointers. Reviewed-by: never, cfang
This commit is contained in:
parent
b357ca3ad1
commit
343b5b0bef
2 changed files with 5 additions and 1 deletions
|
@ -622,11 +622,13 @@ BuildCutout::~BuildCutout() {
|
||||||
|
|
||||||
//---------------------------PreserveReexecuteState----------------------------
|
//---------------------------PreserveReexecuteState----------------------------
|
||||||
PreserveReexecuteState::PreserveReexecuteState(GraphKit* kit) {
|
PreserveReexecuteState::PreserveReexecuteState(GraphKit* kit) {
|
||||||
|
assert(!kit->stopped(), "must call stopped() before");
|
||||||
_kit = kit;
|
_kit = kit;
|
||||||
_sp = kit->sp();
|
_sp = kit->sp();
|
||||||
_reexecute = kit->jvms()->_reexecute;
|
_reexecute = kit->jvms()->_reexecute;
|
||||||
}
|
}
|
||||||
PreserveReexecuteState::~PreserveReexecuteState() {
|
PreserveReexecuteState::~PreserveReexecuteState() {
|
||||||
|
if (_kit->stopped()) return;
|
||||||
_kit->jvms()->_reexecute = _reexecute;
|
_kit->jvms()->_reexecute = _reexecute;
|
||||||
_kit->set_sp(_sp);
|
_kit->set_sp(_sp);
|
||||||
}
|
}
|
||||||
|
@ -1123,7 +1125,7 @@ Node* GraphKit::null_check_common(Node* value, BasicType type,
|
||||||
case T_OBJECT : {
|
case T_OBJECT : {
|
||||||
const Type *t = _gvn.type( value );
|
const Type *t = _gvn.type( value );
|
||||||
|
|
||||||
const TypeInstPtr* tp = t->isa_instptr();
|
const TypeOopPtr* tp = t->isa_oopptr();
|
||||||
if (tp != NULL && !tp->klass()->is_loaded()
|
if (tp != NULL && !tp->klass()->is_loaded()
|
||||||
// Only for do_null_check, not any of its siblings:
|
// Only for do_null_check, not any of its siblings:
|
||||||
&& !assert_null && null_control == NULL) {
|
&& !assert_null && null_control == NULL) {
|
||||||
|
|
|
@ -3894,6 +3894,7 @@ void LibraryCallKit::copy_to_clone(Node* obj, Node* alloc_obj, Node* obj_size, b
|
||||||
assert(obj_size != NULL, "");
|
assert(obj_size != NULL, "");
|
||||||
Node* raw_obj = alloc_obj->in(1);
|
Node* raw_obj = alloc_obj->in(1);
|
||||||
assert(alloc_obj->is_CheckCastPP() && raw_obj->is_Proj() && raw_obj->in(0)->is_Allocate(), "");
|
assert(alloc_obj->is_CheckCastPP() && raw_obj->is_Proj() && raw_obj->in(0)->is_Allocate(), "");
|
||||||
|
assert(alloc_obj->as_CheckCastPP()->type() != TypeInstPtr::NOTNULL, "should be more precise than Object");
|
||||||
|
|
||||||
if (ReduceBulkZeroing) {
|
if (ReduceBulkZeroing) {
|
||||||
// We will be completely responsible for initializing this object -
|
// We will be completely responsible for initializing this object -
|
||||||
|
@ -4447,6 +4448,7 @@ LibraryCallKit::generate_arraycopy(const TypePtr* adr_type,
|
||||||
InitializeNode* init = alloc->initialization();
|
InitializeNode* init = alloc->initialization();
|
||||||
assert(init->is_complete(), "we just did this");
|
assert(init->is_complete(), "we just did this");
|
||||||
assert(dest->is_CheckCastPP(), "sanity");
|
assert(dest->is_CheckCastPP(), "sanity");
|
||||||
|
assert(dest->as_CheckCastPP()->type() != TypeInstPtr::NOTNULL, "type should be more precise than Object");
|
||||||
assert(dest->in(0)->in(0) == init, "dest pinned");
|
assert(dest->in(0)->in(0) == init, "dest pinned");
|
||||||
|
|
||||||
// Cast to Object for arraycopy.
|
// Cast to Object for arraycopy.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue