At the end of ClassFileParser::parseClassFile, we do:
instanceKlassHandle this_klass (THREAD, preserve_this_klass);
debug_only(this_klass->verify();)
Looking at the end of instanceKlass::verify_on (which is being called by Klass::verify):
const Klass* host = host_klass();
if (host != NULL) {
guarantee(host->is_klass(), "should be klass");
}
InstanceKlass::host_klass() has the following implementation:
Klass* host_klass() const {
Klass** hk = (Klass**)adr_host_klass();
if (hk == NULL) {
return NULL;
} else {
assert(*hk != NULL, "host klass should always be set if the address is not null");
return *hk;
}
}
When loading a JSR-292 anonymous klass, ard_host_klass() will return a non-NULL value. But, since the Klass is allocated in Metaspace and Metaspace initialises all memory to NULL,*hk will be NULL and the assert will fail.
To trigger this code path, the following if statement (which is at the beginning of InstanceKlass::verify_on) must fail (since otherwise we won't do any verification):
#ifndef PRODUCT
// Avoid redundant verifies, this really should be in product.
if (_verify_count == Universe::verify_count()) return;
#endif
Universe::verify_count is unfortunately zero by default and so is _verify_count. You must also load a JSR-292 anonymous class since they are the only classes with a host_klass.
One possible fix is to simple do:
this_klass->set_host_klass(host_klass)
before calling debug_only(this_klass->verify()).