https://github.com/python/cpython/commit/8d50e0320bdcf88ccfdd57a54fa581a57c04e95c commit: 8d50e0320bdcf88ccfdd57a54fa581a57c04e95c branch: 3.13 author: Miss Islington (bot) <[email protected]> committer: colesbury <[email protected]> date: 2024-12-06T16:14:26Z summary:
[3.13] gh-125610: Fix `STORE_ATTR_INSTANCE_VALUE` specialization check (GH-125612) (GH-127698) 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. (cherry picked from commit a353455fca1b8f468ff3ffbb4b5e316510b4fd43) Co-authored-by: Sam Gross <[email protected]> files: M Python/specialize.c diff --git a/Python/specialize.c b/Python/specialize.c index 1a2043d0e8dc11..ad166ea091be9d 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -841,7 +841,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]
