diff --git a/src/main/java/org/openjdk/jextract/impl/StructBuilder.java b/src/main/java/org/openjdk/jextract/impl/StructBuilder.java index 4081e433..c42e791b 100644 --- a/src/main/java/org/openjdk/jextract/impl/StructBuilder.java +++ b/src/main/java/org/openjdk/jextract/impl/StructBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -359,18 +359,18 @@ private void emitReinterpret() { /** * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any). - * The returned segment has size {@code layout().byteSize()} + * The returned segment has size {@code elementCount * layout().byteSize()} */ - public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) { - return reinterpret(addr, 1, arena, cleanup); + public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) { + return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup); } /** - * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any). + * Reinterprets {@code addr} using the existing scope. * The returned segment has size {@code elementCount * layout().byteSize()} */ - public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) { - return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup); + public static MemorySegment reinterpret(MemorySegment addr, long elementCount) { + return addr.reinterpret(layout().byteSize() * elementCount); } """); } diff --git a/test/jtreg/generator/reinterpret/TestReinterpret.java b/test/jtreg/generator/reinterpret/TestReinterpret.java index 125886d6..f18f5a93 100644 --- a/test/jtreg/generator/reinterpret/TestReinterpret.java +++ b/test/jtreg/generator/reinterpret/TestReinterpret.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,7 +45,7 @@ public class TestReinterpret { public void testSingleStruct() { try (Arena arena = Arena.ofConfined()) { MemorySegment addr = make(14, 99); - MemorySegment seg = Point.reinterpret(addr, arena, reinterpret_h::freePoint); + MemorySegment seg = Point.reinterpret(addr, 1, arena, reinterpret_h::freePoint); assertEquals(Point.x(seg), 14); assertEquals(Point.y(seg), 99); } @@ -64,4 +64,17 @@ public void testStructArray() { } } } + + @Test + public void testReinterpretScope() { + try (Arena arena = Arena.ofConfined()) { + MemorySegment addr = make(14, 99); + MemorySegment seg = Point.reinterpret(addr, 1); + assertEquals(Point.x(seg), 14); + assertEquals(Point.y(seg), 99); + + MemorySegment array = Point.reinterpret(addr, 2); + assertEquals(array.byteSize(), Point.layout().byteSize() * 2); + } + } } diff --git a/test/jtreg/generator/test8257892/LibUnsupportedTest.java b/test/jtreg/generator/test8257892/LibUnsupportedTest.java index 283a6bdd..02696cf6 100644 --- a/test/jtreg/generator/test8257892/LibUnsupportedTest.java +++ b/test/jtreg/generator/test8257892/LibUnsupportedTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,7 +62,7 @@ public void testAllocateFoo() { @Test public void testGetFoo() { try (Arena arena = Arena.ofConfined()) { - var seg = Foo.reinterpret(getFoo(), arena, null); + var seg = Foo.reinterpret(getFoo(), 1, arena, null); Foo.i(seg, 42); Foo.c(seg, (byte)'j'); assertEquals(Foo.i(seg), 42);