https://github.com/python/cpython/commit/adf2c47911b35134cf108c24a3cc7794b7755aac
commit: adf2c47911b35134cf108c24a3cc7794b7755aac
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2026-03-30T12:48:18Z
summary:
gh-126835: Fix _PY_IS_SMALL_INT() macro (#146631)
files:
M Include/internal/pycore_long.h
M Objects/longobject.c
M Python/flowgraph.c
diff --git a/Include/internal/pycore_long.h b/Include/internal/pycore_long.h
index d545ba0c3abb52..4386e8bcad8841 100644
--- a/Include/internal/pycore_long.h
+++ b/Include/internal/pycore_long.h
@@ -64,7 +64,8 @@ PyAPI_FUNC(void) _PyLong_ExactDealloc(PyObject *self);
# error "_PY_NSMALLPOSINTS must be greater than or equal to 257"
#endif
-#define _PY_IS_SMALL_INT(val) ((val) >= 0 && (val) < 256 && (val) <
_PY_NSMALLPOSINTS)
+#define _PY_IS_SMALL_INT(val) \
+ (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
// Return a reference to the immortal zero singleton.
// The function cannot return NULL.
diff --git a/Objects/longobject.c b/Objects/longobject.c
index f1971f0fca993c..0d3ea9bc46c321 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -26,7 +26,7 @@ class int "PyObject *" "&PyLong_Type"
#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
-#define IS_SMALL_INT(ival) (-_PY_NSMALLNEGINTS <= (ival) && (ival) <
_PY_NSMALLPOSINTS)
+#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
#define IS_SMALL_UINT(ival) ((ival) < _PY_NSMALLPOSINTS)
#define _MAX_STR_DIGITS_ERROR_FMT_TO_INT "Exceeds the limit (%d digits) for
integer string conversion: value has %zd digits; use
sys.set_int_max_str_digits() to increase the limit"
diff --git a/Python/flowgraph.c b/Python/flowgraph.c
index f446a87ee69432..e988f4451007fb 100644
--- a/Python/flowgraph.c
+++ b/Python/flowgraph.c
@@ -1411,7 +1411,7 @@ maybe_instr_make_load_smallint(cfg_instr *instr, PyObject
*newconst,
if (val == -1 && PyErr_Occurred()) {
return -1;
}
- if (!overflow && _PY_IS_SMALL_INT(val)) {
+ if (!overflow && _PY_IS_SMALL_INT(val) && 0 <= val && val <= 255) {
assert(_Py_IsImmortal(newconst));
INSTR_SET_OP1(instr, LOAD_SMALL_INT, (int)val);
return 1;
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]