mirror of
https://github.com/python/cpython.git
synced 2025-07-18 16:55:20 +00:00
[3.11] GH-94822: Don't specialize when metaclasses are involved (GH-94892) (GH-94980)
(cherry picked from commit daf68ba92f
)
Co-authored-by: Brandt Bucher <brandtbucher@microsoft.com>
This commit is contained in:
parent
a5c8cecf29
commit
eda2f90094
3 changed files with 351 additions and 6 deletions
|
@ -871,6 +871,10 @@ specialize_class_load_method(PyObject *owner, _Py_CODEUNIT *instr,
|
|||
PyObject *name)
|
||||
{
|
||||
_PyLoadMethodCache *cache = (_PyLoadMethodCache *)(instr + 1);
|
||||
if (!PyType_CheckExact(owner) || _PyType_Lookup(Py_TYPE(owner), name)) {
|
||||
SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_LOAD_METHOD_METACLASS_ATTRIBUTE);
|
||||
return -1;
|
||||
}
|
||||
PyObject *descr = NULL;
|
||||
DescriptorClassification kind = 0;
|
||||
kind = analyze_descriptor((PyTypeObject *)owner, name, &descr, 0);
|
||||
|
@ -883,12 +887,7 @@ specialize_class_load_method(PyObject *owner, _Py_CODEUNIT *instr,
|
|||
return 0;
|
||||
#ifdef Py_STATS
|
||||
case ABSENT:
|
||||
if (_PyType_Lookup(Py_TYPE(owner), name) != NULL) {
|
||||
SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_LOAD_METHOD_METACLASS_ATTRIBUTE);
|
||||
}
|
||||
else {
|
||||
SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_EXPECTED_ERROR);
|
||||
}
|
||||
SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_EXPECTED_ERROR);
|
||||
return -1;
|
||||
#endif
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue