[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