From 9c4ed16be2fdb20f2917a6e8efacfbb30d3118b1 Mon Sep 17 00:00:00 2001 From: Maurizio Cimadamore Date: Thu, 5 Jan 2023 09:44:16 +0000 Subject: [PATCH] 8299561: VaList.empty() doesn't return a list associated with the global scope Reviewed-by: jvernee --- .../foreign/abi/aarch64/linux/LinuxAArch64VaList.java | 2 +- .../classes/jdk/internal/foreign/abi/x64/sysv/SysVVaList.java | 2 +- test/jdk/java/foreign/valist/VaListTest.java | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList.java b/src/java.base/share/classes/jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList.java index ef471294768..e165016a27b 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList.java +++ b/src/java.base/share/classes/jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList.java @@ -129,7 +129,7 @@ public non-sealed class LinuxAArch64VaList implements VaList { } private static MemorySegment emptyListAddress() { - MemorySegment ms = MemorySegment.allocateNative(LAYOUT, SegmentScope.auto()); + MemorySegment ms = MemorySegment.allocateNative(LAYOUT, SegmentScope.global()); VH_stack.set(ms, MemorySegment.NULL); VH_gr_top.set(ms, MemorySegment.NULL); VH_vr_top.set(ms, MemorySegment.NULL); diff --git a/src/java.base/share/classes/jdk/internal/foreign/abi/x64/sysv/SysVVaList.java b/src/java.base/share/classes/jdk/internal/foreign/abi/x64/sysv/SysVVaList.java index 36b6bf7ba63..1a1fd03dc1f 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/abi/x64/sysv/SysVVaList.java +++ b/src/java.base/share/classes/jdk/internal/foreign/abi/x64/sysv/SysVVaList.java @@ -138,7 +138,7 @@ public non-sealed class SysVVaList implements VaList { } private static MemorySegment emptyListAddress() { - MemorySegment base = MemorySegment.allocateNative(LAYOUT, SegmentScope.auto()); + MemorySegment base = MemorySegment.allocateNative(LAYOUT, SegmentScope.global()); VH_gp_offset.set(base, MAX_GP_OFFSET); VH_fp_offset.set(base, MAX_FP_OFFSET); VH_overflow_arg_area.set(base, MemorySegment.NULL); diff --git a/test/jdk/java/foreign/valist/VaListTest.java b/test/jdk/java/foreign/valist/VaListTest.java index 9c8ce23b5ee..1972a89e657 100644 --- a/test/jdk/java/foreign/valist/VaListTest.java +++ b/test/jdk/java/foreign/valist/VaListTest.java @@ -907,4 +907,8 @@ public class VaListTest extends NativeTestHelper { assertThrows(NoSuchElementException.class, () -> nextVarg(vaList, next)); } + @Test(dataProvider = "emptyVaLists") + public void testEmptyVaListScope(VaList vaList) { + assertEquals(vaList.segment().scope(), SegmentScope.global()); + } }