https://github.com/python/cpython/commit/a353455fca1b8f468ff3ffbb4b5e316510b4fd43
commit: a353455fca1b8f468ff3ffbb4b5e316510b4fd43
branch: main
author: Sam Gross <[email protected]>
committer: colesbury <[email protected]>
date: 2024-12-06T10:48:24-05:00
summary:

gh-125610: Fix `STORE_ATTR_INSTANCE_VALUE` specialization check (GH-125612)

The `STORE_ATTR_INSTANCE_VALUE` opcode doesn't support objects with
non-NULL managed dictionaries, so don't specialize to that op in that case.

files:
M Python/specialize.c

diff --git a/Python/specialize.c b/Python/specialize.c
index ec2cd7025e5054..d3fea717243847 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -947,7 +947,10 @@ specialize_dict_access(
         return 0;
     }
     _PyAttrCache *cache = (_PyAttrCache *)(instr + 1);
-    if (type->tp_flags & Py_TPFLAGS_INLINE_VALUES && 
_PyObject_InlineValues(owner)->valid) {
+    if (type->tp_flags & Py_TPFLAGS_INLINE_VALUES &&
+        _PyObject_InlineValues(owner)->valid &&
+        !(base_op == STORE_ATTR && _PyObject_GetManagedDict(owner) != NULL))
+    {
         PyDictKeysObject *keys = ((PyHeapTypeObject *)type)->ht_cached_keys;
         assert(PyUnicode_CheckExact(name));
         Py_ssize_t index = _PyDictKeys_StringLookup(keys, name);

_______________________________________________
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]

Reply via email to