Hi everyone, One of the `FlatFieldPayload` constructors uses `container->klass()` when calling `inline_layout_info_adr`, even though the layout should be resolved from `field_holder()`. When JNI `GetObjectField` or `SetObjectField` accesses an inherited flat field on a derived class it ends up looking up inline layout info from the that class instead of the class that actually declares the field. In debug builds this triggers an assert, and in general it is the wrong class to use for the lookup.
This path is only reached through JNI field access. The original fix is from @stefank. I added a regression test that tests JNI reads and writes of inherited flat fields and checks that the inherited base field is resolved correctly. The new test hits the assert before the fix and passes with the patch applied. Testing: - Tier 1 - New test testing modifying inherited flat fields through JNI --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - JNI inherited field test - Fix from stefank Changes: https://git.openjdk.org/valhalla/pull/2355/files Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=2355&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8382639 Stats: 203 lines in 4 files changed: 168 ins; 25 del; 10 mod Patch: https://git.openjdk.org/valhalla/pull/2355.diff Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2355/head:pull/2355 PR: https://git.openjdk.org/valhalla/pull/2355
