From: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Date: Sun, 28 Sep 2025 17:30:44 +0000 (+0200) Subject: gh-139393: fix `_CALL_LEN` JIT tests for tuples (#139394) X-Git-Tag: v3.15.0a1~190 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3779f2b95ebf68e2d5f8ea27c7a7baa0879f5496;p=thirdparty%2FPython%2Fcpython.git gh-139393: fix `_CALL_LEN` JIT tests for tuples (#139394) Fix a regression introduced in 7ce25edb8f41e527ed479bf61ef36dc9841b4ac5 where `_PY_NSMALLPOSINTS` was changed from 257 to 1025. --- diff --git a/Lib/test/test_capi/test_opt.py b/Lib/test/test_capi/test_opt.py index c3fed50cee97..f121f2717487 100644 --- a/Lib/test/test_capi/test_opt.py +++ b/Lib/test/test_capi/test_opt.py @@ -15,7 +15,7 @@ from test.support import (script_helper, requires_specialization, _testinternalcapi = import_helper.import_module("_testinternalcapi") -from _testinternalcapi import TIER2_THRESHOLD +from _testinternalcapi import _PY_NSMALLPOSINTS, TIER2_THRESHOLD #For test of issue 136154 GLOBAL_136154 = 42 @@ -2093,6 +2093,10 @@ class TestUopsOptimization(unittest.TestCase): self.assertNotIn("_GUARD_TOS_INT", uops) def test_call_len_known_length_small_int(self): + # Make sure that len(t) is optimized for a tuple of length 5. + # See https://github.com/python/cpython/issues/139393. + self.assertGreater(_PY_NSMALLPOSINTS, 5) + def testfunc(n): x = 0 for _ in range(n): @@ -2113,13 +2117,17 @@ class TestUopsOptimization(unittest.TestCase): self.assertNotIn("_POP_TOP_LOAD_CONST_INLINE_BORROW", uops) def test_call_len_known_length(self): + # Make sure that len(t) is not optimized for a tuple of length 2048. + # See https://github.com/python/cpython/issues/139393. + self.assertLess(_PY_NSMALLPOSINTS, 2048) + def testfunc(n): class C: - t = tuple(range(300)) + t = tuple(range(2048)) x = 0 for _ in range(n): - if len(C.t) == 300: # comparison + guard removed + if len(C.t) == 2048: # comparison + guard removed x += 1 return x diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index d680711e5d82..a4348e7e1497 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -34,6 +34,7 @@ #include "pycore_pyerrors.h" // _PyErr_ChainExceptions1() #include "pycore_pylifecycle.h" // _PyInterpreterConfig_InitFromDict() #include "pycore_pystate.h" // _PyThreadState_GET() +#include "pycore_runtime_structs.h" // _PY_NSMALLPOSINTS #include "pycore_unicodeobject.h" // _PyUnicode_TransformDecimalAndSpaceToASCII() #include "clinic/_testinternalcapi.c.h" @@ -2576,6 +2577,10 @@ module_exec(PyObject *module) return 1; } + if (PyModule_AddIntMacro(module, _PY_NSMALLPOSINTS) < 0) { + return 1; + } + return 0; }