8366020: Assert that user code is not executed during the AOT assembly phase.

This commit is contained in:
Matias Saavedra Silva 2026-03-13 11:22:48 -04:00
parent 8444fdae4a
commit 2873f726e3

View File

@ -59,6 +59,21 @@ bool AOTClassInitializer::can_archive_initialized_mirror(InstanceKlass* ik) {
return false;
}
#ifndef PRODUCT
if (AOTInitTestClass == nullptr && ArchiveHeapTestClass == nullptr) {
// The above flags (in debug builds only) allow user code to be executed in assembly phase,
// strictly for testing purposes. If these flags are not set, no user code will be executed
// in assembly phase.
if (ik->class_loader() != nullptr && !ik->is_hidden()) {
if (ik->is_interface() && !ik->interface_needs_clinit_execution_as_super()) {
// TODO: why are these interfaces marked as initialized??
} else {
assert(false, "cannot execute user code");
}
}
}
#endif // PRODUCT
// About "static field that may hold a different value" errors:
//
// Automatic selection for aot-inited classes