gh-114058: More robust method handling in redundancy eliminator (GH-115779)

This commit is contained in:
Ken Jin 2024-02-23 15:42:03 +08:00 committed by GitHub
parent a494a3dd8e
commit a33ffe4785
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 16 deletions

View file

@ -1300,12 +1300,13 @@
}
case _LOAD_ATTR_METHOD_WITH_VALUES: {
_Py_UOpsSymType *owner;
_Py_UOpsSymType *attr;
_Py_UOpsSymType *self = NULL;
attr = sym_new_unknown(ctx);
if (attr == NULL) goto out_of_space;
self = sym_new_unknown(ctx);
if (self == NULL) goto out_of_space;
owner = stack_pointer[-1];
PyObject *descr = (PyObject *)this_instr->operand;
OUT_OF_SPACE_IF_NULL(attr = sym_new_known_notnull(ctx));
OUT_OF_SPACE_IF_NULL(self = sym_new_known_notnull(ctx));
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
@ -1313,12 +1314,13 @@
}
case _LOAD_ATTR_METHOD_NO_DICT: {
_Py_UOpsSymType *owner;
_Py_UOpsSymType *attr;
_Py_UOpsSymType *self = NULL;
attr = sym_new_unknown(ctx);
if (attr == NULL) goto out_of_space;
self = sym_new_unknown(ctx);
if (self == NULL) goto out_of_space;
owner = stack_pointer[-1];
PyObject *descr = (PyObject *)this_instr->operand;
OUT_OF_SPACE_IF_NULL(attr = sym_new_known_notnull(ctx));
OUT_OF_SPACE_IF_NULL(self = sym_new_known_notnull(ctx));
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
@ -1346,12 +1348,13 @@
}
case _LOAD_ATTR_METHOD_LAZY_DICT: {
_Py_UOpsSymType *owner;
_Py_UOpsSymType *attr;
_Py_UOpsSymType *self = NULL;
attr = sym_new_unknown(ctx);
if (attr == NULL) goto out_of_space;
self = sym_new_unknown(ctx);
if (self == NULL) goto out_of_space;
owner = stack_pointer[-1];
PyObject *descr = (PyObject *)this_instr->operand;
OUT_OF_SPACE_IF_NULL(attr = sym_new_known_notnull(ctx));
OUT_OF_SPACE_IF_NULL(self = sym_new_known_notnull(ctx));
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
@ -1373,12 +1376,12 @@
}
case _INIT_CALL_BOUND_METHOD_EXACT_ARGS: {
_Py_UOpsSymType *callable;
_Py_UOpsSymType *func;
_Py_UOpsSymType *self;
func = sym_new_unknown(ctx);
if (func == NULL) goto out_of_space;
self = sym_new_unknown(ctx);
if (self == NULL) goto out_of_space;
callable = stack_pointer[-2 - oparg];
OUT_OF_SPACE_IF_NULL(func = sym_new_known_notnull(ctx));
OUT_OF_SPACE_IF_NULL(self = sym_new_known_notnull(ctx));
stack_pointer[-2 - oparg] = func;
stack_pointer[-1 - oparg] = self;
break;