[foreign-memaccess+abi] RFR: 8300294: Add tests for by-value unions and structs with nested fixed-length arrays

Jorn Vernee jvernee at openjdk.org
Wed Feb 8 23:02:10 UTC 2023


I've added some tests for by-value unions, structs/unions nested into other structs, and aggregates with nested inline arrays.

These test cases are taken from a fuzzer I wrote a while ago. So, they are a bit random, but should serve as a basic test for the cases that we miss with TestDowncall/TestUpcall today. This mostly helps give some coverage of the linker's classification code for these cases.

I've also pulled in some test value generation code, which can generate random test values when given a MemoryLayout, allocator and random generator. (if it seems useful, I can re-write the existing tests to use this generation code as well, but I'd like to save that for a followup PR).

Unfortunately, the fallback linker doesn't seem to be able to reliably handle by-value unions. It's a know issue with libffi. I've filed: https://bugs.openjdk.org/browse/JDK-8301800 for now. I've changed the implementation to throw an IAE, which was already specified for `Linker::downcallHandle/upcallStub`: 

https://github.com/openjdk/panama-foreign/blob/f61f3a31af4976d0e64d3bfa72cda95b501e2a7d/src/java.base/share/classes/java/lang/foreign/Linker.java#L232-L235

There was also a bug in the classification of HFAs on AArch64 which I've fixed. The issue was that structs with float/double fields that are nested into arrays or other structs/unions should also be counted as HFAs. But, the correct classification logic only accounted for the 'flat' case, where a struct only contains ValueLayouts.

-------------

Commit messages:
 - change to IAE
 - fix TesNested failures
 - polish tests + disable test on zero
 - rename saver MH
 - simplify slicer
 - Add nested test

Changes: https://git.openjdk.org/panama-foreign/pull/780/files
 Webrev: https://webrevs.openjdk.org/?repo=panama-foreign&pr=780&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8300294
  Stats: 590 lines in 7 files changed: 584 ins; 0 del; 6 mod
  Patch: https://git.openjdk.org/panama-foreign/pull/780.diff
  Fetch: git fetch https://git.openjdk.org/panama-foreign pull/780/head:pull/780

PR: https://git.openjdk.org/panama-foreign/pull/780


More information about the panama-dev mailing list