GH-93911: Fix LOAD_ATTR_PROPERTY caches (GH-96519)

This commit is contained in:
Brandt Bucher 2022-09-06 04:11:38 -07:00 committed by GitHub
parent f177f6f29b
commit cd0ff9bd14
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 5 deletions

View file

@ -0,0 +1,2 @@
Fix an issue that could prevent :opcode:`LOAD_ATTR` from specializing
properly when accessing properties.

View file

@ -775,8 +775,10 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_PROPERTY_NOT_PY_FUNCTION); SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_PROPERTY_NOT_PY_FUNCTION);
goto fail; goto fail;
} }
uint32_t version = function_check_args(fget, 1, LOAD_ATTR) && if (!function_check_args(fget, 1, LOAD_ATTR)) {
function_get_version(fget, LOAD_ATTR); goto fail;
}
uint32_t version = function_get_version(fget, LOAD_ATTR);
if (version == 0) { if (version == 0) {
goto fail; goto fail;
} }
@ -831,9 +833,7 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
assert(type->tp_getattro == _Py_slot_tp_getattro); assert(type->tp_getattro == _Py_slot_tp_getattro);
assert(Py_IS_TYPE(descr, &PyFunction_Type)); assert(Py_IS_TYPE(descr, &PyFunction_Type));
_PyLoadMethodCache *lm_cache = (_PyLoadMethodCache *)(instr + 1); _PyLoadMethodCache *lm_cache = (_PyLoadMethodCache *)(instr + 1);
uint32_t func_version = function_check_args(descr, 2, LOAD_ATTR) && if (!function_check_args(descr, 2, LOAD_ATTR)) {
function_get_version(descr, LOAD_ATTR);
if (func_version == 0) {
goto fail; goto fail;
} }
/* borrowed */ /* borrowed */