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

Reply via email to