On Mon, 23 Sep 2024 10:51:10 GMT, Per Minborg <[email protected]> wrote:
>> src/java.base/share/classes/jdk/internal/foreign/abi/AbstractLinker.java
>> line 225:
>>
>>> 223: // check elements are not all padding layouts and for trailing
>>> padding
>>> 224: private void checkGroup(GroupLayout gl, long maxUnpaddedOffset) {
>>> 225: if (gl.memberLayouts().stream().allMatch(e -> e instanceof
>>> PaddingLayout)) {
>>
>> I'm not 100% sure that this check (which I agree with) can be desumed from
>> the current `Linker` javadoc. E.g. if I have:
>>
>> `groupLayout(paddingLayout(1))`
>>
>> The Linker says:
>> * there cannot be any intermediate padding more than necessary to align
>> non-padding elements. But there's no non-padding elements here, so <shrug>
>> :-)
>> * there cannot be more padding at the end, more than necessary to make the
>> group size a multiple of its alignment - but again, since there's no
>> non-padding layout, it is not clear what this means here. We have a padding
>> of 1, which makes the group have size 1, which is a multiple of the
>> alignment of the struct. So, ok?
>
> Previously, the check threw an `IllegalArgumentException` when presented with
> the above (or other) group layout with only padding layouts, but the actual
> message differed. So, this change only changes the exception message and does
> not change the current behavior. However, the question remains: Should we
> update the docs to reflect this behavior?
Note: I know the behavior in this particular case is not affected by the PR.
That said, since you already need CSR for the "sequence with padding"
behavioral change, I think it could make sense to piggy back on this PR, and
clarify the javadoc for the other case as well.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21041#discussion_r1771216722