8022283: Assertion failed: assert(is_loaded() && field->holder()->is_loaded() && klass()->is_subclass_of (field->holder())) failed: invalid access
authorrbackman
Tue, 20 Aug 2013 09:37:01 +0200
changeset 19715 a3f8b34430ef
parent 19711 95cc0162a92d
child 19716 2f8937c12d14
8022283: Assertion failed: assert(is_loaded() && field->holder()->is_loaded() && klass()->is_subclass_of (field->holder())) failed: invalid access Reviewed-by: roland, twisti
hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
hotspot/src/share/vm/ci/ciInstance.cpp
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp	Mon Aug 26 16:12:20 2013 +0200
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp	Tue Aug 20 09:37:01 2013 +0200
@@ -1583,7 +1583,7 @@
       ObjectType* obj_type = obj->type()->as_ObjectType();
       if (obj_type->is_constant() && !PatchALot) {
         ciObject* const_oop = obj_type->constant_value();
-        if (!const_oop->is_null_object()) {
+        if (!const_oop->is_null_object() && const_oop->is_loaded()) {
           if (field->is_constant()) {
             ciConstant field_val = field->constant_value_of(const_oop);
             BasicType field_type = field_val.basic_type();
--- a/hotspot/src/share/vm/ci/ciInstance.cpp	Mon Aug 26 16:12:20 2013 +0200
+++ b/hotspot/src/share/vm/ci/ciInstance.cpp	Tue Aug 20 09:37:01 2013 +0200
@@ -60,10 +60,10 @@
 //
 // Constant value of a field.
 ciConstant ciInstance::field_value(ciField* field) {
-  assert(is_loaded() &&
-         field->holder()->is_loaded() &&
-         klass()->is_subclass_of(field->holder()),
-         "invalid access");
+  assert(is_loaded(), "invalid access - must be loaded");
+  assert(field->holder()->is_loaded(), "invalid access - holder must be loaded");
+  assert(klass()->is_subclass_of(field->holder()), "invalid access - must be subclass");
+
   VM_ENTRY_MARK;
   ciConstant result;
   Handle obj = get_oop();