changeset 17998:ae92351815b6

8039150: host_klass invariant fails when verifying newly loaded JSR-292 anonymous classes Summary: Initialize host_klass while parsing the class with the other initializations. Reviewed-by: sspitsyn, stefank
author coleenp
date Fri, 20 Jun 2014 10:48:36 -0400
parents b334bc7ff73e
children e4a6e7f1b90b
files src/share/vm/classfile/classFileParser.cpp src/share/vm/classfile/systemDictionary.cpp
diffstat 2 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/classfile/classFileParser.cpp	Fri Jun 20 12:39:56 2014 -0700
+++ b/src/share/vm/classfile/classFileParser.cpp	Fri Jun 20 10:48:36 2014 -0400
@@ -4022,6 +4022,11 @@
     this_klass->set_major_version(major_version);
     this_klass->set_has_default_methods(has_default_methods);
 
+    if (!host_klass.is_null()) {
+      assert (this_klass->is_anonymous(), "should be the same");
+      this_klass->set_host_klass(host_klass());
+    }
+
     // Set up Method*::intrinsic_id as soon as we know the names of methods.
     // (We used to do this lazily, but now we query it in Rewriter,
     // which is eagerly done for every method, so we might as well do it now,
--- a/src/share/vm/classfile/systemDictionary.cpp	Fri Jun 20 12:39:56 2014 -0700
+++ b/src/share/vm/classfile/systemDictionary.cpp	Fri Jun 20 10:48:36 2014 -0400
@@ -997,7 +997,6 @@
 
   if (host_klass.not_null() && k.not_null()) {
     assert(EnableInvokeDynamic, "");
-    k->set_host_klass(host_klass());
     // If it's anonymous, initialize it now, since nobody else will.
 
     {