[lworld] RFR: 8377791: [lworld] Assert in java_lang_Class::restore_archived_mirror
Paul Hübner
phubner at openjdk.org
Fri Feb 13 08:57:03 UTC 2026
On Thu, 12 Feb 2026 19:49:48 GMT, Matias Saavedra Silva <matsaave at openjdk.org> wrote:
> Different array layouts result in distinct array klass metadata which are stored in a linked list with the base ObjArrayKlass acting as the head. Multiple layouts are currently uncommon, so this assert was sufficient:
>
> `assert(objarray_k == k || objarray_k->next_refined_array_klass() == k) failed: must be`
>
> This assert is not correct since `k` could refer to another refined array klass further down the linked list. This patch corrects this assert by adding a find method to iterate through the linked list in case there are multiple layouts for the same type. A new test was added to catch this failure. Verified with tier 1-5 tests.
The changes look good, just a small sanity question from my end. Thanks for fixing this!
src/hotspot/share/oops/objArrayKlass.cpp line 448:
> 446: return true;
> 447: }
> 448: curr = curr->next_refined_array_klass();
I suppose that we can't get into a situation where somebody is trying to create an array of this klass since we're still restoring, right? I'm bringing this up because we usually have to take a lock before iterating through the linked list, cf. `ObjArrayKlass::klass_with_properties`.
-------------
PR Review: https://git.openjdk.org/valhalla/pull/2095#pullrequestreview-3795839670
PR Review Comment: https://git.openjdk.org/valhalla/pull/2095#discussion_r2803014982
More information about the valhalla-dev
mailing list