RFR: 8329997: Add MemorySegment::reinterpretate overloads for alignment constraints

Jorn Vernee jvernee at openjdk.org
Wed Apr 10 15:26:10 UTC 2024


On Wed, 10 Apr 2024 12:49:11 GMT, Per Minborg <pminborg at openjdk.org> wrote:

> This PR proposes to add two overloads `MemorySegment::reinterpretate` to allow aligned reinterpretation.

src/java.base/share/classes/jdk/internal/foreign/SegmentFactories.java line 72:

> 70:             sessionImpl.addCloseAction(action);
> 71:         }
> 72:         return new NativeMemorySegmentImpl(Utils.alignUp(min, byteAlignment), byteSize, false, sessionImpl);

This is not correct. The base address of the segment should not change after a call to reinterpret. The alignment constraint should just be used for checking that the base address is somewhat sane. Instead, I think `reinterpretInternal` or the overloads that take a memory layout should do the check of the alignment of `addres()` with the given alignment constraint.

test/jdk/java/foreign/TestSegments.java line 396:

> 394:         AtomicInteger counter = new AtomicInteger();
> 395:         try (Arena arena = Arena.ofConfined()){
> 396:             var segment = MemorySegment.ofAddress(41).reinterpret(JAVA_INT);

i.e. this call (and the one below) should throw an exception.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18717#discussion_r1559643107
PR Review Comment: https://git.openjdk.org/jdk/pull/18717#discussion_r1559649552


More information about the core-libs-dev mailing list