[foreign-memaccess+abi] RFR: 8305087: MemoryLayout API checks should be more eager

Jorn Vernee jvernee at openjdk.org
Tue Mar 28 16:33:25 UTC 2023


On Tue, 28 Mar 2023 14:04:35 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

> This patch adds eager check on construction of sequence and group layouts. More specifically:
> 
> * sequenceLayout(L) is well-formed iff L.bitAlignment() <= L.bitSize()
> * groupLayout(L1, … Ln) is well-formed iff for-each 1..n, offset(Li) % Li.bitAlignment() == 0
> 
> Moreover, this patch also validates the alignment parameter to calls of `MemoryLayout::withBitAlignment` on sequence and group layouts:
> 
> * sequenceLayout(L).withBitAlignment(a) is well-formed iff L.bitAlignment() <= a
> * groupLayout(L1, ..., Ln).withBitAlignment(a) is well-formed iff max(L1.bitAlignment(), ...,  Ln.bitAlignment()) <= a
> 
> These checks prevent bad layouts from being constructed (either with factories, or with bad calls to `withBitAlignment`), w/o restricting the expressiveness of the memory layout API.
> Moreover, since all layouts are now well-formed by construction, we no longer need lazy checks when creating a deferefence var handle.

src/java.base/share/classes/java/lang/foreign/GroupLayout.java line 71:

> 69:      * {@inheritDoc}
> 70:      * @throws IllegalArgumentException {@inheritDoc}
> 71:      * @throws IllegalArgumentException if {@code bitAlignment} is {@code M}, where {@code M} is the maximum alignment

Typo?
Suggestion:

     * @throws IllegalArgumentException if {@code bitAlignment} is less than {@code M}, where {@code M} is the maximum alignment

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

PR Review Comment: https://git.openjdk.org/panama-foreign/pull/824#discussion_r1150866292


More information about the panama-dev mailing list