Merge
authorvlivanov
Fri, 27 May 2016 14:49:05 +0000
changeset 38718 b42f325b8f7b
parent 38709 835ea8e8b295 (diff)
parent 38717 aa8919c796e4 (current diff)
child 38721 7da36c5eb9da
Merge
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp	Fri May 27 16:56:23 2016 +0300
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp	Fri May 27 14:49:05 2016 +0000
@@ -1336,9 +1336,12 @@
       return nh;
     }
 
-    // Found the class, now load the superclass and interfaces.  If they
-    // are shared, add them to the main system dictionary and reset
-    // their hierarchy references (supers, subs, and interfaces).
+    // Resolve the superclass and interfaces. They must be the same
+    // as in dump time, because the layout of <ik> depends on
+    // the specific layout of ik->super() and ik->local_interfaces().
+    //
+    // If unexpected superclass or interfaces are found, we cannot
+    // load <ik> from the shared archive.
 
     if (ik->super() != NULL) {
       Symbol*  cn = ik->super()->name();
@@ -1348,6 +1351,8 @@
         // The dynamically resolved super class is not the same as the one we used during dump time,
         // so we cannot use ik.
         return nh;
+      } else {
+        assert(s->is_shared(), "must be");
       }
     }
 
@@ -1366,6 +1371,8 @@
         // The dynamically resolved interface class is not the same as the one we used during dump time,
         // so we cannot use ik.
         return nh;
+      } else {
+        assert(i->is_shared(), "must be");
       }
     }