From 492594212974127d8f3d38e4d3b1d834d77acd1f Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Mon, 4 May 2026 18:08:16 +0200 Subject: [PATCH 1/9] Update unittest tags --- .../src/tests/unittest_tags/test_coroutines.txt | 2 +- .../src/tests/unittest_tags/test_signal.txt | 6 +++--- .../src/tests/unittest_tags/test_socket.txt | 4 ++-- .../src/tests/unittest_tags/test_ssl.txt | 2 +- .../src/tests/unittest_tags/test_time.txt | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt index 606eef8869..4b71a00fbf 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt @@ -36,7 +36,7 @@ test.test_coroutines.CoroutineTest.test_cr_await @ darwin-arm64,linux-aarch64,li test.test_coroutines.CoroutineTest.test_cr_frame_after_close @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_coroutines.CoroutineTest.test_for_1 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_coroutines.CoroutineTest.test_for_11 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_coroutines.CoroutineTest.test_for_2 @ linux-aarch64-github,linux-x86_64-github,win32-AMD64-github +test.test_coroutines.CoroutineTest.test_for_2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_coroutines.CoroutineTest.test_for_3 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_coroutines.CoroutineTest.test_for_4 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_coroutines.CoroutineTest.test_for_6 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_signal.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_signal.txt index d6d9719b6a..72c9030c50 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_signal.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_signal.txt @@ -1,8 +1,8 @@ test.test_signal.GenericTests.test_enums @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_signal.GenericTests.test_functions_module_attr @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_signal.ItimerTest.test_itimer_exc @ linux-aarch64-github,linux-x86_64-github -test.test_signal.ItimerTest.test_itimer_prof @ linux-aarch64-github,linux-x86_64-github -test.test_signal.ItimerTest.test_itimer_virtual @ linux-aarch64-github,linux-x86_64-github +test.test_signal.ItimerTest.test_itimer_exc @ linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github +test.test_signal.ItimerTest.test_itimer_prof @ linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github +test.test_signal.ItimerTest.test_itimer_virtual @ linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_signal.ItimerTest.test_setitimer_tiny @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_signal.PosixTests.test_getsignal @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_signal.PosixTests.test_no_repr_is_called_on_signal_handler @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt index bc2f5affc2..2a93a17d0b 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt @@ -57,7 +57,7 @@ test.test_socket.GeneralModuleTests.testCrucialIpProtoConstants @ darwin-arm64,l test.test_socket.GeneralModuleTests.testDefaultTimeout @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.GeneralModuleTests.testGetServBy @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_socket.GeneralModuleTests.testGetSockOpt @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github -test.test_socket.GeneralModuleTests.testHostnameRes @ linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_socket.GeneralModuleTests.testHostnameRes @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.GeneralModuleTests.testIPv4_inet_aton_fourbytes @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.GeneralModuleTests.testIPv4toString @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_socket.GeneralModuleTests.testIPv6toString @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github @@ -68,7 +68,7 @@ test.test_socket.GeneralModuleTests.testRefCountGetNameInfo @ darwin-arm64,linux test.test_socket.GeneralModuleTests.testSendAfterClose @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.GeneralModuleTests.testSendtoErrors @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.GeneralModuleTests.testSetSockOpt @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github -test.test_socket.GeneralModuleTests.testSockName @ linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github +test.test_socket.GeneralModuleTests.testSockName @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_socket.GeneralModuleTests.testSocketError @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.GeneralModuleTests.testStringToIPv4 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.GeneralModuleTests.testStringToIPv6 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt index bb0a0d43f3..1c0ede2faf 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt @@ -1,6 +1,6 @@ test.test_ssl.BasicSocketTests.test_DER_to_PEM @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_ssl.BasicSocketTests.test_cert_time_to_seconds @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_ssl.BasicSocketTests.test_cert_time_to_seconds_timezone @ win32-AMD64 +test.test_ssl.BasicSocketTests.test_cert_time_to_seconds_timezone @ darwin-arm64,win32-AMD64 test.test_ssl.BasicSocketTests.test_connect_ex_error @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_ssl.BasicSocketTests.test_empty_cert @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_ssl.BasicSocketTests.test_get_default_verify_paths @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_time.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_time.txt index abd68c22cc..aeeb1debcd 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_time.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_time.txt @@ -2,7 +2,7 @@ test.test_time.TestAsctime4dyear.test_large_year @ darwin-arm64,linux-aarch64,li test.test_time.TestAsctime4dyear.test_negative @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_time.TestAsctime4dyear.test_year @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_time.TestLocale.test_bug_3061 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_time.TestPytime.test_localtime_timezone @ linux-aarch64-github,linux-x86_64-github,win32-AMD64-github +test.test_time.TestPytime.test_localtime_timezone @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github # Can fail in specific timezones in CI !test.test_time.TestPytime.test_localtime_timezone, at line 757 with AssertionError: 3600 != 0 test.test_time.TestPytime.test_short_times @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github From 80ce89df8db6ddc710df03ff6614884e5a6dd4cd Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Mon, 4 May 2026 20:23:27 +0200 Subject: [PATCH 2/9] Get rid of all CE benchmarks - that is just not a supported configuration anymore --- ci.jsonnet | 27 +----------------- ci/constants.libsonnet | 47 ++------------------------------ docs/contributor/CONTRIBUTING.md | 5 ++-- 3 files changed, 5 insertions(+), 74 deletions(-) diff --git a/ci.jsonnet b/ci.jsonnet index 06eb954972..e98412f632 100644 --- a/ci.jsonnet +++ b/ci.jsonnet @@ -303,9 +303,7 @@ // not specified as the first arg to `bench_task`. local bench_task_dict = { [bench]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ - "vm_name:graalvm_ce_default" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : post_merge + t("08:00:00") + need_pgo}, - "vm_name:graalpython_core" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalpython_enterprise" : {"linux:amd64:jdk-latest" : daily + t("08:00:00"), "job_type:checkup" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")} }, @@ -316,10 +314,7 @@ for bench in ["micro", "meso", "macro"] } + { [bench]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ - "vm_name:graalvm_ce_default" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : post_merge + t("08:00:00") + need_pgo}, - "vm_name:graalpython_core" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, - "vm_name:graalpython_core_panama" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalpython_enterprise" : {"linux:amd64:jdk-latest" : daily + t("08:00:00"), "job_type:checkup" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")} }, @@ -333,40 +328,27 @@ // "small" benchmarks have their argument set such that they run in a resonable // time in the interpreter and they are used for interpreter benchmarking [bench]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ - "vm_name:graalvm_ce_default_interpreter" : {"linux:amd64:jdk-latest" : on_demand + t("02:00:00")}, "vm_name:graalvm_ee_default_interpreter" : {"linux:amd64:jdk-latest" : daily + t("02:00:00") + need_pgo}, "vm_name:graalvm_ee_default_interpreter_uncached" : {"linux:amd64:jdk-latest" : daily + t("02:00:00") + need_pgo}, - "vm_name:graalpython_core_interpreter" : {"linux:amd64:jdk-latest" : on_demand + t("02:00:00")}, - "vm_name:graalpython_core_native_interpreter" : {"linux:amd64:jdk-latest" : on_demand + t("02:00:00")}, "vm_name:graalpython_enterprise_interpreter" : {"linux:amd64:jdk-latest" : weekly + t("02:00:00")}, - "vm_name:graalpython_core_interpreter_multi" : {"linux:amd64:jdk-latest" : on_demand + t("02:00:00")}, - "vm_name:graalpython_core_native_interpreter_multi" : {"linux:amd64:jdk-latest" : on_demand + t("02:00:00")}, "vm_name:cpython" : {"linux:amd64:jdk-latest" : weekly + t("02:00:00")}, }), for bench in ["micro_small", "meso_small"] } + { // benchmarks executed via Java embedding driver [bench]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ - "vm_name:java_embedding_core_interpreter_multi_shared" : {"linux:amd64:jdk-latest" : weekly + t("02:00:00")}, + "vm_name:java_embedding_enterprise_interpreter_multi_shared" : {"linux:amd64:jdk-latest" : weekly + t("02:00:00")}, }), for bench in ["java_embedding_meso"] } + { [bench]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ - "vm_name:graalpython_core" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalpython_enterprise" : {"linux:amd64:jdk-latest" : daily + t("05:00:00") + forks_warmup}, - "vm_name:graalvm_ce_default" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : daily + t("05:00:00") + forks_warmup + need_pgo}, - "vm_name:graalpython_core_multi_tier" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalpython_enterprise_multi_tier" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup}, - "vm_name:graalvm_ce_default_multi_tier" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalvm_ee_default_multi_tier" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup + need_pgo}, - "vm_name:graalpython_core_3threads" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalpython_enterprise_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup}, - "vm_name:graalvm_ce_default_3threads" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalvm_ee_default_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup + need_pgo}, - "vm_name:graalpython_core_multi_tier_3threads" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalpython_enterprise_multi_tier_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup}, - "vm_name:graalvm_ce_default_multi_tier_3threads" : {"linux:amd64:jdk-latest" : on_demand + t("05:00:00") + forks_warmup}, "vm_name:graalvm_ee_default_multi_tier_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup + need_pgo}, "vm_name:pypy" : {"linux:amd64:jdk-latest" : on_demand + t("01:00:00")}, }), @@ -381,23 +363,19 @@ } + { // interop benchmarks only for graalpython, weekly is enough [bench]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ - "vm_name:java_jmh_core" : {"linux:amd64:jdk-latest" : daily + t("04:00:00")}, "vm_name:java_jmh_enterprise" : {"linux:amd64:jdk-latest" : daily + t("04:00:00")}, }), for bench in ["jmh"] } + { // benchmarks with many forks for weekly performance reports [bench + "-forks"]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ - "vm_name:graalvm_ce_default" : {"linux:amd64:jdk-latest" : on_demand + t("10:00:00") + forks_meso}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : weekly + t("10:00:00") + forks_meso + need_pgo}, }), for bench in ["meso"] } + { // benchmarks with community benchmark suites for external numbers [bench]: bench_task(bench, PY_BENCHMARKS) + platform_spec(no_jobs) + raw_results + bench_variants({ - "vm_name:graalpython_core" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalpython_enterprise" : {"linux:amd64:jdk-latest" : weekly + t("08:00:00")}, - "vm_name:graalvm_ce_default" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : weekly + t("08:00:00") + need_pgo}, "vm_name:cpython_launcher" : {"linux:amd64:jdk-latest" : monthly + t("08:00:00")}, "vm_name:pypy_launcher" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, @@ -406,11 +384,8 @@ } + { // benchmarks with community benchmark suites for external numbers [bench]: bench_task(bench, PY_BENCHMARKS) + platform_spec(no_jobs) + raw_results + bench_variants({ - "vm_name:graalpython_core" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, - "vm_name:graalpython_core_panama" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalpython_enterprise" : {"linux:amd64:jdk-latest" : weekly + t("08:00:00")}, "vm_name:graalpython_enterprise_panama" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, - "vm_name:graalvm_ce_default" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : weekly + t("08:00:00") + need_pgo}, "vm_name:cpython_launcher" : {"linux:amd64:jdk-latest" : monthly + t("08:00:00")}, "vm_name:pypy_launcher" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, diff --git a/ci/constants.libsonnet b/ci/constants.libsonnet index dc4d6a414b..eceb59bff3 100644 --- a/ci/constants.libsonnet +++ b/ci/constants.libsonnet @@ -35,16 +35,12 @@ NOTIFY_GROUPS:: ["tim.felgentreff@oracle.com"], local ENV = { - graalpy_svm_ce: ["--env", "native-ce"], graalpy_svm_ee: ["--env", "native-ee"], - graalpy_jvm_ce: ["--env", "jvm-ce-libgraal"], graalpy_jvm_ee: ["--env", "jvm-ee-libgraal"], - libgraal_ce: ["--env", "../../graal/vm/mx.vm/libgraal"], libgraal_ee: ["--env", "../../graal-enterprise/vm-enterprise/mx.vm-enterprise/libgraal-enterprise"], }, local DY = { - ce: "/vm", ee: "/vm-enterprise,/graalpython-enterprise", }, @@ -81,33 +77,16 @@ // the host VMs local JVM_VM = { - graaljdk_ce: { - dy: ["--dynamicimports", DY.ce], - env: ENV.graalpy_jvm_ce, - edition: 'ce', - }, graaljdk_ee: { dy: ["--dynamicimports", DY.ee], env: ENV.graalpy_jvm_ee, edition: 'ee', }, - graal_native_image_ce: { - dy: ["--dynamicimports", DY.ce], - env: ENV.graalpy_svm_ce, - edition: 'ce', - }, graal_native_image_ee: { dy: ["--dynamicimports", DY.ee], env: ENV.graalpy_svm_ee, edition: 'ee', }, - server_libgraal_ce: { - jvm: 'server', - jvm_config: 'graal-core-libgraal', - dy: ["--dynamicimports", DY.ce], - env: ENV.libgraal_ce, - edition: 'ce', - }, server_libgraal_ee: { jvm: 'server', jvm_config: 'graal-enterprise-libgraal', @@ -213,56 +192,34 @@ local VM = { // graalpy jvm standalones - graalpython_core: PYTHON_VM.graalpython + JVM_VM.graaljdk_ce, - graalpython_core_manual: PYTHON_VM.graalpython_manual + JVM_VM.graaljdk_ce, - graalpython_core_interpreter: PYTHON_VM.graalpython_interpreter + JVM_VM.graaljdk_ce, - graalpython_core_interpreter_manual: PYTHON_VM.graalpython_interpreter_manual + JVM_VM.graaljdk_ce, - graalpython_core_multi: PYTHON_VM.graalpython_multi + JVM_VM.graaljdk_ce, - graalpython_core_interpreter_multi: PYTHON_VM.graalpython_interpreter_multi + JVM_VM.graaljdk_ce, - graalpython_core_multi_tier: PYTHON_VM.graalpython_multi_tier + JVM_VM.graaljdk_ce, graalpython_enterprise: PYTHON_VM.graalpython + JVM_VM.graaljdk_ee, graalpython_enterprise_manual: PYTHON_VM.graalpython_manual + JVM_VM.graaljdk_ee, graalpython_enterprise_multi: PYTHON_VM.graalpython_multi + JVM_VM.graaljdk_ee, graalpython_enterprise_multi_tier: PYTHON_VM.graalpython_multi_tier + JVM_VM.graaljdk_ee, graalpython_enterprise_interpreter: PYTHON_VM.graalpython_interpreter + JVM_VM.graaljdk_ee, graalpython_enterprise_interpreter_manual: PYTHON_VM.graalpython_interpreter_manual + JVM_VM.graaljdk_ee, - graalpython_core_native: PYTHON_VM.graalpython_native + JVM_VM.graaljdk_ce, - graalpython_core_native_manual: PYTHON_VM.graalpython_native_manual + JVM_VM.graaljdk_ce, - graalpython_core_native_interpreter: PYTHON_VM.graalpython_native_interpreter + JVM_VM.graaljdk_ce, - graalpython_core_native_interpreter_manual: PYTHON_VM.graalpython_native_interpreter_manual + JVM_VM.graaljdk_ce, - graalpython_core_native_multi: PYTHON_VM.graalpython_native_multi + JVM_VM.graaljdk_ce, - graalpython_core_native_interpreter_multi: PYTHON_VM.graalpython_native_interpreter_multi + JVM_VM.graaljdk_ce, graalpython_enterprise_native: PYTHON_VM.graalpython_native + JVM_VM.graaljdk_ee, graalpython_enterprise_native_manual: PYTHON_VM.graalpython_native_manual + JVM_VM.graaljdk_ee, graalpython_enterprise_native_multi: PYTHON_VM.graalpython_native_multi + JVM_VM.graaljdk_ee, - graalpython_core_panama: PYTHON_VM.graalpython_panama + JVM_VM.graaljdk_ce, graalpython_enterprise_panama: PYTHON_VM.graalpython_panama + JVM_VM.graaljdk_ee, // graalpy native standalones - graalvm_ce_default: PYTHON_VM.graalpython + JVM_VM.graal_native_image_ce, - graalvm_ce_default_interpreter: PYTHON_VM.graalpython_interpreter + JVM_VM.graal_native_image_ce, graalvm_ee_default: PYTHON_VM.graalpython + JVM_VM.graal_native_image_ee, graalvm_ee_default_manual: PYTHON_VM.graalpython_manual + JVM_VM.graal_native_image_ee, graalvm_ee_default_interpreter: PYTHON_VM.graalpython_interpreter + JVM_VM.graal_native_image_ee, graalvm_ee_default_interpreter_uncached: PYTHON_VM.graalpython_interpreter_uncached + JVM_VM.graal_native_image_ee, graalvm_ee_default_interpreter_manual: PYTHON_VM.graalpython_interpreter_manual + JVM_VM.graal_native_image_ee, - graalvm_ce_default_multi_tier: PYTHON_VM.graalpython_multi_tier + JVM_VM.graal_native_image_ce, graalvm_ee_default_multi_tier: PYTHON_VM.graalpython_multi_tier + JVM_VM.graal_native_image_ee, // only 3 compiler threads - graalpython_core_3threads: PYTHON_VM.graalpython + JVM_VM.graaljdk_ce + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, graalpython_enterprise_3threads: PYTHON_VM.graalpython + JVM_VM.graaljdk_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, - graalvm_ce_default_3threads: PYTHON_VM.graalpython + JVM_VM.graal_native_image_ce + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, graalvm_ee_default_3threads: PYTHON_VM.graalpython + JVM_VM.graal_native_image_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, - graalpython_core_multi_tier_3threads: PYTHON_VM.graalpython_multi_tier + JVM_VM.graaljdk_ce + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, graalpython_enterprise_multi_tier_3threads: PYTHON_VM.graalpython_multi_tier + JVM_VM.graaljdk_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, - graalvm_ce_default_multi_tier_3threads: PYTHON_VM.graalpython_multi_tier + JVM_VM.graal_native_image_ce + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, graalvm_ee_default_multi_tier_3threads: PYTHON_VM.graalpython_multi_tier + JVM_VM.graal_native_image_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, // Java embedding - java_embedding_core_multi_shared: PYTHON_VM.java_embedding_multi_shared + JVM_VM.server_libgraal_ce, - java_embedding_core_interpreter_multi_shared: PYTHON_VM.java_embedding_interpreter_multi_shared + JVM_VM.server_libgraal_ce, - java_jmh_core: JVM_VM.server_libgraal_ce, + java_embedding_enterprise_multi_shared: PYTHON_VM.java_embedding_multi_shared + JVM_VM.server_libgraal_ee, + java_embedding_enterprise_interpreter_multi_shared: PYTHON_VM.java_embedding_interpreter_multi_shared + JVM_VM.server_libgraal_ee, java_jmh_enterprise: JVM_VM.server_libgraal_ee, // basline vms diff --git a/docs/contributor/CONTRIBUTING.md b/docs/contributor/CONTRIBUTING.md index 84aba00220..1e016de4f7 100644 --- a/docs/contributor/CONTRIBUTING.md +++ b/docs/contributor/CONTRIBUTING.md @@ -294,10 +294,9 @@ This is intended for focused reproducer runs on a branch. Note that there may be a little confusion about the configuration names of benchmarks. -#### GraalVM Community Edition and Oracle GraalVM configurations +#### Oracle GraalVM configurations -We have benchmarks for GraalVM Community Edition and Oracle GraalVM. -For historical reasons, these are sometimes referred to in some config files as *CE* and *EE*; *core* and *enterprise*; *graalvm_ce* and *graalvm_ee*; or *graalpython_core* and *graalpython_enterprise*, respectively. +Benchmark CI jobs use Oracle GraalVM configurations. For historical reasons, these are sometimes referred to in config files as *EE*, *enterprise*, *graalvm_ee*, or *graalpython_enterprise*. ### Different GraalVM Python configurations From 246b2c084a24084af8bfc8fef6f5c29729eaca8e Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Mon, 4 May 2026 20:30:00 +0200 Subject: [PATCH 3/9] Get rid of multi-tier, 3-compiler-threads, and panama benchmarks --- ci.jsonnet | 8 -------- ci/constants.libsonnet | 19 ------------------- mx.graalpython/mx_graalpython_benchmark.py | 10 +--------- 3 files changed, 1 insertion(+), 36 deletions(-) diff --git a/ci.jsonnet b/ci.jsonnet index e98412f632..faf77b6b62 100644 --- a/ci.jsonnet +++ b/ci.jsonnet @@ -319,7 +319,6 @@ "job_type:checkup" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")} }, "vm_name:graalpython_enterprise_multi" : {"linux:amd64:jdk-latest" : weekly + t("08:00:00")}, - "vm_name:graalpython_enterprise_panama" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:cpython" : {"linux:amd64:jdk-latest" : monthly + t("04:00:00")}, "vm_name:pypy" : {"linux:amd64:jdk-latest" : on_demand + t("04:00:00")}, }), @@ -344,12 +343,6 @@ [bench]: bench_task(bench) + platform_spec(no_jobs) + bench_variants({ "vm_name:graalpython_enterprise" : {"linux:amd64:jdk-latest" : daily + t("05:00:00") + forks_warmup}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : daily + t("05:00:00") + forks_warmup + need_pgo}, - "vm_name:graalpython_enterprise_multi_tier" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup}, - "vm_name:graalvm_ee_default_multi_tier" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup + need_pgo}, - "vm_name:graalpython_enterprise_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup}, - "vm_name:graalvm_ee_default_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup + need_pgo}, - "vm_name:graalpython_enterprise_multi_tier_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup}, - "vm_name:graalvm_ee_default_multi_tier_3threads" : {"linux:amd64:jdk-latest" : weekly + t("05:00:00") + forks_warmup + need_pgo}, "vm_name:pypy" : {"linux:amd64:jdk-latest" : on_demand + t("01:00:00")}, }), for bench in ["warmup"] @@ -385,7 +378,6 @@ // benchmarks with community benchmark suites for external numbers [bench]: bench_task(bench, PY_BENCHMARKS) + platform_spec(no_jobs) + raw_results + bench_variants({ "vm_name:graalpython_enterprise" : {"linux:amd64:jdk-latest" : weekly + t("08:00:00")}, - "vm_name:graalpython_enterprise_panama" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, "vm_name:graalvm_ee_default" : {"linux:amd64:jdk-latest" : weekly + t("08:00:00") + need_pgo}, "vm_name:cpython_launcher" : {"linux:amd64:jdk-latest" : monthly + t("08:00:00")}, "vm_name:pypy_launcher" : {"linux:amd64:jdk-latest" : on_demand + t("08:00:00")}, diff --git a/ci/constants.libsonnet b/ci/constants.libsonnet index eceb59bff3..53809d09e7 100644 --- a/ci/constants.libsonnet +++ b/ci/constants.libsonnet @@ -62,12 +62,10 @@ native_interpreter_manual: "native-interpreter-manual", interpreter_multi: "interpreter-multi", native_interpreter_multi: "native-interpreter-multi", - default_multi_tier: "default-multi-tier", native: "native", native_manual: "native-manual", native_multi: "native-multi", launcher: "launcher", - panama: "panama", }, local JAVA_EMBEDDING_VM_CONFIG = { @@ -144,10 +142,6 @@ python_vm: PYVM.graalpython, python_vm_config: PYVM_CONFIG.native_interpreter_multi, }, - graalpython_multi_tier: { - python_vm: PYVM.graalpython, - python_vm_config: PYVM_CONFIG.default_multi_tier, - }, graalpython_native: { python_vm: PYVM.graalpython, python_vm_config: PYVM_CONFIG.native, @@ -160,10 +154,6 @@ python_vm: PYVM.graalpython, python_vm_config: PYVM_CONFIG.native_multi, }, - graalpython_panama: { - python_vm: PYVM.graalpython, - python_vm_config: PYVM_CONFIG.panama, - }, java_embedding_multi_shared: { python_vm: PYVM.graalpython, python_vm_config: JAVA_EMBEDDING_VM_CONFIG.java_embedding_multi_shared, @@ -195,13 +185,11 @@ graalpython_enterprise: PYTHON_VM.graalpython + JVM_VM.graaljdk_ee, graalpython_enterprise_manual: PYTHON_VM.graalpython_manual + JVM_VM.graaljdk_ee, graalpython_enterprise_multi: PYTHON_VM.graalpython_multi + JVM_VM.graaljdk_ee, - graalpython_enterprise_multi_tier: PYTHON_VM.graalpython_multi_tier + JVM_VM.graaljdk_ee, graalpython_enterprise_interpreter: PYTHON_VM.graalpython_interpreter + JVM_VM.graaljdk_ee, graalpython_enterprise_interpreter_manual: PYTHON_VM.graalpython_interpreter_manual + JVM_VM.graaljdk_ee, graalpython_enterprise_native: PYTHON_VM.graalpython_native + JVM_VM.graaljdk_ee, graalpython_enterprise_native_manual: PYTHON_VM.graalpython_native_manual + JVM_VM.graaljdk_ee, graalpython_enterprise_native_multi: PYTHON_VM.graalpython_native_multi + JVM_VM.graaljdk_ee, - graalpython_enterprise_panama: PYTHON_VM.graalpython_panama + JVM_VM.graaljdk_ee, // graalpy native standalones graalvm_ee_default: PYTHON_VM.graalpython + JVM_VM.graal_native_image_ee, @@ -209,13 +197,6 @@ graalvm_ee_default_interpreter: PYTHON_VM.graalpython_interpreter + JVM_VM.graal_native_image_ee, graalvm_ee_default_interpreter_uncached: PYTHON_VM.graalpython_interpreter_uncached + JVM_VM.graal_native_image_ee, graalvm_ee_default_interpreter_manual: PYTHON_VM.graalpython_interpreter_manual + JVM_VM.graal_native_image_ee, - graalvm_ee_default_multi_tier: PYTHON_VM.graalpython_multi_tier + JVM_VM.graal_native_image_ee, - - // only 3 compiler threads - graalpython_enterprise_3threads: PYTHON_VM.graalpython + JVM_VM.graaljdk_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, - graalvm_ee_default_3threads: PYTHON_VM.graalpython + JVM_VM.graal_native_image_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, - graalpython_enterprise_multi_tier_3threads: PYTHON_VM.graalpython_multi_tier + JVM_VM.graaljdk_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, - graalvm_ee_default_multi_tier_3threads: PYTHON_VM.graalpython_multi_tier + JVM_VM.graal_native_image_ee + {python_vm_config: super.python_vm_config + "-3-compiler-threads"}, // Java embedding java_embedding_enterprise_multi_shared: PYTHON_VM.java_embedding_multi_shared + JVM_VM.server_libgraal_ee, diff --git a/mx.graalpython/mx_graalpython_benchmark.py b/mx.graalpython/mx_graalpython_benchmark.py index edda5bf1f6..58a59c4934 100644 --- a/mx.graalpython/mx_graalpython_benchmark.py +++ b/mx.graalpython/mx_graalpython_benchmark.py @@ -69,11 +69,9 @@ CONFIGURATION_DEFAULT_MULTI = "default-multi" CONFIGURATION_INTERPRETER_MULTI = "interpreter-multi" CONFIGURATION_NATIVE_INTERPRETER_MULTI = "native-interpreter-multi" -CONFIGURATION_DEFAULT_MULTI_TIER = "default-multi-tier" CONFIGURATION_NATIVE = "native" CONFIGURATION_UNCACHED = "interpreter-uncached" CONFIGURATION_NATIVE_MULTI = "native-multi" -CONFIGURATION_NATIVE_MULTI_TIER = "native-multi-tier" CONFIGURATION_SANDBOXED = "sandboxed" CONFIGURATION_SANDBOXED_MULTI = "sandboxed-multi" @@ -328,9 +326,6 @@ def extract_vm_info(self, args=None): "platform.graalvm-version": graalvm_version_match[2], "platform.graalvm-version-string": graalvm_version_match[1], } - if dims['guest-vm-config'].endswith('-3-compiler-threads'): - dims['guest-vm-config'] = dims['guest-vm-config'].replace('-3-compiler-threads', '') - dims['host-vm-config'] += '-3-compiler-threads' self._dims = dims def run(self, *args, **kwargs): @@ -1085,7 +1080,6 @@ def add_graalpy_vm(name, *extra_polyglot_args): add_graalpy_vm(CONFIGURATION_INTERPRETER, '--experimental-options', '--engine.Compilation=false') add_graalpy_vm(CONFIGURATION_DEFAULT_MULTI, '--experimental-options', '-multi-context') add_graalpy_vm(CONFIGURATION_INTERPRETER_MULTI, '--experimental-options', '-multi-context', '--engine.Compilation=false') - add_graalpy_vm(CONFIGURATION_DEFAULT_MULTI_TIER, '--experimental-options', '--engine.MultiTier=true') add_graalpy_vm(CONFIGURATION_SANDBOXED, *sandboxed_options) add_graalpy_vm(CONFIGURATION_NATIVE) add_graalpy_vm(CONFIGURATION_UNCACHED, '--experimental-options', '--engine.Compilation=false', '--python.ForceUncachedInterpreter=true') @@ -1093,12 +1087,10 @@ def add_graalpy_vm(name, *extra_polyglot_args): add_graalpy_vm(CONFIGURATION_SANDBOXED_MULTI, '--experimental-options', '-multi-context', *sandboxed_options) add_graalpy_vm(CONFIGURATION_NATIVE_MULTI, '--experimental-options', '-multi-context') add_graalpy_vm(CONFIGURATION_NATIVE_INTERPRETER_MULTI, '--experimental-options', '-multi-context', '--engine.Compilation=false') - add_graalpy_vm(CONFIGURATION_NATIVE_MULTI_TIER, '--experimental-options', '--engine.MultiTier=true') - # all of the graalpy vms, but with different numbers of compiler threads + # all of the graalpy vms, but with one compiler thread for name, extra_polyglot_args in graalpy_vms[:]: add_graalpy_vm(f'{name}-1-compiler-threads', *['--engine.CompilerThreads=1', *extra_polyglot_args]) - add_graalpy_vm(f'{name}-3-compiler-threads', *['--engine.CompilerThreads=3', *extra_polyglot_args]) # java embedding driver python_java_embedding_vm_registry.add_vm( From 50d8eaf53977540a841e5d0acc99d5eeb967dcc1 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Tue, 5 May 2026 10:38:19 +0200 Subject: [PATCH 4/9] Minor convenience for rota-bench-regression-analysis skill --- .agents/skills/rota-bench-regression-analysis/SKILL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.agents/skills/rota-bench-regression-analysis/SKILL.md b/.agents/skills/rota-bench-regression-analysis/SKILL.md index 4f84da770d..ee5449ace3 100644 --- a/.agents/skills/rota-bench-regression-analysis/SKILL.md +++ b/.agents/skills/rota-bench-regression-analysis/SKILL.md @@ -86,4 +86,5 @@ git diff --stat GOOD..BAD ## Guardrails - If the script or you can't find `bench-cli`, ask the user to provide it from the `bench-server` repo. + - You may offer to clone the repo and create the cli for the user. The repo is on the same bitbucket as graalpython, the project is `INFRA` and the repo is called `bench-server` - Don't submit more than 5 bisect jobs. If there are more in the "to bisect" list, pick 5 that look the most serious and leave the rest as "to bisect". From d5f6655807d66483e67c4dccb18c09fe90ee45d3 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Wed, 6 May 2026 10:29:50 +0200 Subject: [PATCH 5/9] Skip test involving native arrays in sandboxed mode --- graalpython/com.oracle.graal.python.test/src/tests/test_array.py | 1 + 1 file changed, 1 insertion(+) diff --git a/graalpython/com.oracle.graal.python.test/src/tests/test_array.py b/graalpython/com.oracle.graal.python.test/src/tests/test_array.py index 362a1e2a45..c7ff052f1a 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/test_array.py +++ b/graalpython/com.oracle.graal.python.test/src/tests/test_array.py @@ -130,6 +130,7 @@ def test_copy(): assert c == array('l', [1, 2, 3]) +@skip_if_sandboxed("Needs native storage support in sandboxed runs") def test_copy_native_storage(): a = array('l', [1, 2, 3]) storage_to_native(a) From 8d8e6ae222536ebb9107a6167e64d300cd80ec98 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Wed, 6 May 2026 10:46:30 +0200 Subject: [PATCH 6/9] Fix expected recursion limit in tests for GraalPy --- graalpython/lib-python/3/test/support/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/graalpython/lib-python/3/test/support/__init__.py b/graalpython/lib-python/3/test/support/__init__.py index 740b9b2bab..4dc7095adb 100644 --- a/graalpython/lib-python/3/test/support/__init__.py +++ b/graalpython/lib-python/3/test/support/__init__.py @@ -2480,6 +2480,10 @@ def adjust_int_max_str_digits(max_digits): C_RECURSION_LIMIT = 4000 else: C_RECURSION_LIMIT = 10000 +# GraalPy change: our Java-side recursion checks use sys.getrecursionlimit(), +# not CPython's separate platform-specific C stack limit. +if sys.implementation.name == 'graalpy': + C_RECURSION_LIMIT = sys.getrecursionlimit() # Windows doesn't have os.uname() but it doesn't support s390x. is_s390x = hasattr(os, 'uname') and os.uname().machine == 's390x' From b5ba78cd88eb17aea6f4ed763a14fe7bb955efd9 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Wed, 6 May 2026 11:37:47 +0200 Subject: [PATCH 7/9] Fix PolyBench cext package venv path --- .../src/tests/__init__.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/graalpython/com.oracle.graal.python.test/src/tests/__init__.py b/graalpython/com.oracle.graal.python.test/src/tests/__init__.py index 40cd1e0e9f..2730d0e839 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/__init__.py +++ b/graalpython/com.oracle.graal.python.test/src/tests/__init__.py @@ -52,7 +52,10 @@ def find_rootdir(): cur_dir = Path(__file__).parent while cur_dir.name != 'graalpython': cur_dir = cur_dir.parent - rootdir = cur_dir.parent / "mxbuild" / "cpyexts" + if (cur_dir / "mx.graalpython").exists(): + rootdir = cur_dir / "mxbuild" / "cpyexts" + else: + rootdir = cur_dir.parent / "mxbuild" / "cpyexts" rootdir.mkdir(parents=True, exist_ok=True) return rootdir @@ -60,7 +63,16 @@ def find_rootdir(): DIR = find_rootdir() +def _venv_python(venv_dir: Path) -> Path: + if sys.platform.startswith('win32'): + return venv_dir / 'Scripts' / 'python.exe' + return venv_dir / 'bin' / 'python3' + + def _venv_site_packages(venv_dir: Path) -> Path: + existing_site_packages = list(venv_dir.glob("lib/python*/site-packages")) + if len(existing_site_packages) == 1: + return existing_site_packages[0] if sys.platform.startswith('win32'): return venv_dir / 'Lib' / 'site-packages' return venv_dir / 'lib' / f'python{sys.version_info.major}.{sys.version_info.minor}' / 'site-packages' @@ -77,16 +89,14 @@ def ensure_packages(**package_specs): import site package_names = "-".join(package_specs.keys()) venv_dir = find_rootdir() / f'{sys.implementation.name}-{package_names}-venv' + py_executable = _venv_python(venv_dir) site_packages_dir = _venv_site_packages(venv_dir) if any(not _package_present(site_packages_dir, p, v) for p, v in package_specs.items()): import subprocess package_specs = [f'{p}=={v}' for p, v in package_specs.items()] print(f'installing {package_specs} in {venv_dir}') system_python = install_venv(venv_dir) - if sys.platform.startswith('win32'): - py_executable = venv_dir / 'Scripts' / 'python.exe' - else: - py_executable = venv_dir / 'bin' / 'python3' + site_packages_dir = _venv_site_packages(venv_dir) extra_args = [] if system_python or sys.implementation.name != "graalpy": pass From 841a3004c1b3ce925d54df4cbedbcde05dd51005 Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Wed, 6 May 2026 12:56:38 +0200 Subject: [PATCH 8/9] Handle singleton C API decrefs Failure before was exposed with pandas: `python -c 'import pandas as pd; pd.Series([1], index=["b"]).sort_index()'` Explanation: The Panama C API refactoring changed XDecRefPointerNode to operate on raw pointer values. When the old list item is an immortal special singleton handle such as None, converting the pointer back to Python returns the managed singleton, but the decref path only recognized normal PythonObject wrappers before falling through to the native-object refcount path. That attempted to decrement a native refcount at a special singleton handle address. Treat special singleton handles as immortal in this path, matching the existing int and float handle cases. --- .../graal/python/builtins/objects/cext/capi/CExtNodes.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java index 70bce259a9..8f96081b8b 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java @@ -847,6 +847,7 @@ public static void executeUncached(long pointer) { static void doDecref(Node inliningTarget, long pointer, @Cached CApiTransitions.NativeToPythonInternalNode toPythonNode, @Cached InlinedBranchProfile isWrapperProfile, + @Cached InlinedBranchProfile isSpecialSingletonProfile, @Cached UpdateStrongRefNode updateRefNode) { if (pointer == NULLPTR) { return; @@ -858,6 +859,8 @@ static void doDecref(Node inliningTarget, long pointer, if (object instanceof PythonObject pythonObject) { isWrapperProfile.enter(inliningTarget); updateRefNode.execute(inliningTarget, pythonObject, pythonObject.decRef()); + } else if (CApiContext.isSpecialSingleton(object)) { + isSpecialSingletonProfile.enter(inliningTarget); } else { assert object instanceof PythonAbstractNativeObject; if (CApiTransitions.subNativeRefCount(pointer, 1) == 0) { From fe52218f49b54cc309e265f39681b1f88f93894a Mon Sep 17 00:00:00 2001 From: Tim Felgentreff Date: Wed, 6 May 2026 15:55:55 +0200 Subject: [PATCH 9/9] untag recursive test on windows --- .../src/tests/unittest_tags/test_runpy.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_runpy.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_runpy.txt index 9570bc0f2c..6b0e30d95f 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_runpy.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_runpy.txt @@ -24,7 +24,7 @@ test.test_runpy.RunPathTestCase.test_directory @ darwin-arm64,linux-aarch64,linu test.test_runpy.RunPathTestCase.test_directory_compiled @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_runpy.RunPathTestCase.test_directory_error @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_runpy.RunPathTestCase.test_encoding @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_runpy.RunPathTestCase.test_main_recursion_error @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_runpy.RunPathTestCase.test_main_recursion_error @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_runpy.RunPathTestCase.test_script_compiled @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_runpy.RunPathTestCase.test_zipfile @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_runpy.RunPathTestCase.test_zipfile_compiled @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github