From 49b917fb9f64f765322c8c345167423b746fdf2e Mon Sep 17 00:00:00 2001 From: Florian Angerer Date: Tue, 30 Jun 2026 14:54:35 +0200 Subject: [PATCH 1/2] Make generated code JDK21 compatible --- .../graal/python/processor/CApiBuiltinsProcessor.java | 3 ++- .../python/processor/GenerateNativeDowncallsProcessor.java | 6 +----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/CApiBuiltinsProcessor.java b/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/CApiBuiltinsProcessor.java index 9ab98a9bd6..aea1ec8276 100644 --- a/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/CApiBuiltinsProcessor.java +++ b/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/CApiBuiltinsProcessor.java @@ -1613,6 +1613,7 @@ private void generateNativeAccessSupport(Element[] origins) throws IOException { lines.add(""); lines.add("public final class " + NATIVE_ACCESS_SUPPORT_IMPL_CLASS_NAME + " extends " + NATIVE_ACCESS_SUPPORT_CLASS_NAME + " {"); lines.add(" private static final MethodHandle OF_ADDRESS;"); + lines.add(" private static final Class NATIVE_MEMORY_SEGMENT_CLASS = MemorySegment.NULL.getClass();"); lines.add(" private static final boolean WINDOWS = PythonLanguage.getPythonOS() == PythonOS.PLATFORM_WIN32;"); lines.add(" private static final MemoryLayout CAPTURE_STATE_LAYOUT = Linker.Option.captureStateLayout();"); lines.add(" private static final VarHandle ERRNO = captureStateVarHandle(\"errno\");"); @@ -1633,7 +1634,7 @@ private void generateNativeAccessSupport(Element[] origins) throws IOException { lines.add(""); lines.add(" private static MethodType createMethodType(boolean captureCallState, FunctionDescriptor functionDescriptor) {"); lines.add(" MethodType methodType = functionDescriptor.toMethodType().insertParameterTypes(0, long.class);"); - lines.add(" return captureCallState ? methodType.insertParameterTypes(1, MemorySegment.class) : methodType;"); + lines.add(" return captureCallState ? methodType.insertParameterTypes(1, Object.class) : methodType;"); lines.add(" }"); lines.add(""); lines.add(" @Override"); diff --git a/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/GenerateNativeDowncallsProcessor.java b/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/GenerateNativeDowncallsProcessor.java index eb5b9b9c21..9356a2b42e 100644 --- a/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/GenerateNativeDowncallsProcessor.java +++ b/graalpython/com.oracle.graal.python.processor/src/com/oracle/graal/python/processor/GenerateNativeDowncallsProcessor.java @@ -67,7 +67,6 @@ private record NativeDowncallDesc(String name, NativeSimpleType returnType, List } private static final String CAPTURE_CALL_STATE_FIELD = "callState"; - private static final String NATIVE_MEMORY_SEGMENT_CLASS_FIELD = "NATIVE_MEMORY_SEGMENT_CLASS"; @Override public Set getSupportedAnnotationTypes() { @@ -141,7 +140,6 @@ private void generateInvoker(TypeElement invokerElement) throws IOException, Pro lines.add("// Generated by annotation processor: " + getClass().getName()); lines.add("package " + packageName + ";"); lines.add(""); - lines.add("import java.lang.foreign.MemorySegment;"); lines.add("import java.lang.invoke.MethodHandle;"); lines.add("import java.util.concurrent.atomic.AtomicLongArray;"); lines.add("import java.util.List;"); @@ -153,7 +151,6 @@ private void generateInvoker(TypeElement invokerElement) throws IOException, Pro lines.add("import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;"); lines.add(""); lines.add("final class " + className + " extends " + invokerTypeRef + " {"); - lines.add(" private static final Class " + NATIVE_MEMORY_SEGMENT_CLASS_FIELD + " = MemorySegment.NULL.getClass();"); lines.add(" private final PythonContext context;"); lines.add(" private final AtomicLongArray cachedFunctions = new AtomicLongArray(" + downcalls.size() + ");"); lines.add(" private volatile NativeLibrary nativeLibrary;"); @@ -334,8 +331,7 @@ private static String invokeArgs(NativeDowncallDesc downcall) { List allArgs = new ArrayList<>(); allArgs.add("functionPointer"); if (downcall.captureCallState) { - String capturedCallState = String.format("%s.cast(%s.get())", NATIVE_MEMORY_SEGMENT_CLASS_FIELD, CAPTURE_CALL_STATE_FIELD); - allArgs.add(capturedCallState); + allArgs.add(CAPTURE_CALL_STATE_FIELD + ".get()"); } allArgs.addAll(downcall.argumentNames); return String.join(", ", allArgs); From 5efc40e7d0eef5fae07933e1e376495e294d6692 Mon Sep 17 00:00:00 2001 From: Florian Angerer Date: Tue, 30 Jun 2026 15:01:54 +0200 Subject: [PATCH 2/2] Gate sandboxed JDK 21 (linux-amd64) tests --- ci.jsonnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci.jsonnet b/ci.jsonnet index 2790e9e5d0..e40b99b93d 100644 --- a/ci.jsonnet +++ b/ci.jsonnet @@ -303,7 +303,7 @@ }), // tests with sandboxed backends for various modules (posix, sha3, compression, pyexpat, ...) "python-unittest-sandboxed": gpgate_ee + platform_spec(no_jobs) + platform_spec({ - "linux:amd64:jdk21" : daily + t("01:00:00") + provide(GPY_JVM21_STANDALONE), + "linux:amd64:jdk21" : tier2 + provide(GPY_JVM21_STANDALONE), "linux:aarch64:jdk21" : daily + t("02:00:00") + provide(GPY_JVM21_STANDALONE), "darwin:aarch64:jdk21" : daily + t("01:00:00") + provide(GPY_JVM21_STANDALONE), "windows:amd64:jdk21" : daily + t("01:30:00") + provide(GPY_JVM21_STANDALONE),