https://github.com/python/cpython/commit/6d5a8c2ec19f1c38b4558940d2444a7382bb0287
commit: 6d5a8c2ec19f1c38b4558940d2444a7382bb0287
branch: main
author: Nybblista <170842536+nybbli...@users.noreply.github.com>
committer: Fidget-Spinner <kenjin4...@gmail.com>
date: 2025-05-09T08:17:50+08:00
summary:

gh-133476: Assert with the `PyStackRef_IsTaggedInt` function (GH-133477)

files:
M Include/internal/pycore_stackref.h

diff --git a/Include/internal/pycore_stackref.h 
b/Include/internal/pycore_stackref.h
index a2acf311ff4c65..dc5e56102fa406 100644
--- a/Include/internal/pycore_stackref.h
+++ b/Include/internal/pycore_stackref.h
@@ -95,10 +95,16 @@ PyStackRef_IsNone(_PyStackRef ref)
     return _Py_stackref_get_object(ref) == Py_None;
 }
 
+static inline bool
+PyStackRef_IsTaggedInt(_PyStackRef ref)
+{
+    return (ref.index & 1) == 1;
+}
+
 static inline PyObject *
 _PyStackRef_AsPyObjectBorrow(_PyStackRef ref, const char *filename, int 
linenumber)
 {
-    assert((ref.index & 1) == 0);
+    assert(!PyStackRef_IsTaggedInt(ref));
     _Py_stackref_record_borrow(ref, filename, linenumber);
     return _Py_stackref_get_object(ref);
 }
@@ -135,12 +141,6 @@ _PyStackRef_FromPyObjectImmortal(PyObject *obj, const char 
*filename, int linenu
 }
 #define PyStackRef_FromPyObjectImmortal(obj) 
_PyStackRef_FromPyObjectImmortal(_PyObject_CAST(obj), __FILE__, __LINE__)
 
-static inline bool
-PyStackRef_IsTaggedInt(_PyStackRef ref)
-{
-    return (ref.index & 1) == 1;
-}
-
 static inline void
 _PyStackRef_CLOSE(_PyStackRef ref, const char *filename, int linenumber)
 {
@@ -256,7 +256,7 @@ PyStackRef_TagInt(intptr_t i)
 static inline intptr_t
 PyStackRef_UntagInt(_PyStackRef i)
 {
-    assert((i.bits & Py_INT_TAG) == Py_INT_TAG);
+    assert(PyStackRef_IsTaggedInt(i));
     intptr_t val = (intptr_t)i.bits;
     return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, val, 2);
 }
@@ -286,6 +286,7 @@ static const _PyStackRef PyStackRef_NULL = { .bits = 
Py_TAG_DEFERRED};
 static inline PyObject *
 PyStackRef_AsPyObjectBorrow(_PyStackRef stackref)
 {
+    assert(!PyStackRef_IsTaggedInt(stackref));
     PyObject *cleared = ((PyObject *)((stackref).bits & (~Py_TAG_BITS)));
     return cleared;
 }

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to