8039150: host_klass invariant fails when verifying newly loaded JSR-292 anonymous classes
Initialize host_klass while parsing the class with the other initializations.
Reviewed-by: sspitsyn, stefank
diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp
index 87eca8e..3eee41d 100644
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp
@@ -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,
diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp
index b2754ed..3b0cf3c 100644
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp
@@ -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.
{