summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-09-02-16-47-52.gh-issue-93911.vF-GWe.rst2
-rw-r--r--Python/specialize.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-09-02-16-47-52.gh-issue-93911.vF-GWe.rst b/Misc/NEWS.d/next/Core and Builtins/2022-09-02-16-47-52.gh-issue-93911.vF-GWe.rst
new file mode 100644
index 0000000..b8dc043
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-09-02-16-47-52.gh-issue-93911.vF-GWe.rst
@@ -0,0 +1,2 @@
+Fix an issue that could prevent :opcode:`LOAD_ATTR` from specializing
+properly when accessing properties.
diff --git a/Python/specialize.c b/Python/specialize.c
index e8c3f46..299adf3 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -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);
goto fail;
}
- uint32_t version = function_check_args(fget, 1, LOAD_ATTR) &&
- function_get_version(fget, LOAD_ATTR);
+ if (!function_check_args(fget, 1, LOAD_ATTR)) {
+ goto fail;
+ }
+ uint32_t version = function_get_version(fget, LOAD_ATTR);
if (version == 0) {
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(Py_IS_TYPE(descr, &PyFunction_Type));
_PyLoadMethodCache *lm_cache = (_PyLoadMethodCache *)(instr + 1);
- uint32_t func_version = function_check_args(descr, 2, LOAD_ATTR) &&
- function_get_version(descr, LOAD_ATTR);
- if (func_version == 0) {
+ if (!function_check_args(descr, 2, LOAD_ATTR)) {
goto fail;
}
/* borrowed */