6875577: CTW fails with /hotspot/src/share/vm/opto/memnode.cpp
authorkvn
Fri, 28 Aug 2009 11:19:33 -0700
changeset 3797 3f6a7898f912
parent 3796 7082ef16e6e2
child 3798 a8d3bacb68d7
6875577: CTW fails with /hotspot/src/share/vm/opto/memnode.cpp Summary: Fix do_null_check to check for unloaded klass for all oop pointers. Reviewed-by: never, cfang
hotspot/src/share/vm/opto/graphKit.cpp
hotspot/src/share/vm/opto/library_call.cpp
--- a/hotspot/src/share/vm/opto/graphKit.cpp	Thu Aug 27 06:17:23 2009 -0700
+++ b/hotspot/src/share/vm/opto/graphKit.cpp	Fri Aug 28 11:19:33 2009 -0700
@@ -622,11 +622,13 @@
 
 //---------------------------PreserveReexecuteState----------------------------
 PreserveReexecuteState::PreserveReexecuteState(GraphKit* kit) {
+  assert(!kit->stopped(), "must call stopped() before");
   _kit    =    kit;
   _sp     =    kit->sp();
   _reexecute = kit->jvms()->_reexecute;
 }
 PreserveReexecuteState::~PreserveReexecuteState() {
+  if (_kit->stopped()) return;
   _kit->jvms()->_reexecute = _reexecute;
   _kit->set_sp(_sp);
 }
@@ -1123,7 +1125,7 @@
     case T_OBJECT : {
       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()
           // Only for do_null_check, not any of its siblings:
           && !assert_null && null_control == NULL) {
--- a/hotspot/src/share/vm/opto/library_call.cpp	Thu Aug 27 06:17:23 2009 -0700
+++ b/hotspot/src/share/vm/opto/library_call.cpp	Fri Aug 28 11:19:33 2009 -0700
@@ -3894,6 +3894,7 @@
   assert(obj_size != NULL, "");
   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->as_CheckCastPP()->type() != TypeInstPtr::NOTNULL, "should be more precise than Object");
 
   if (ReduceBulkZeroing) {
     // We will be completely responsible for initializing this object -
@@ -4447,6 +4448,7 @@
     InitializeNode* init = alloc->initialization();
     assert(init->is_complete(), "we just did this");
     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");
 
     // Cast to Object for arraycopy.