mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
gh-133258: Fix crash in test_index (GH-133262)
This commit is contained in:
parent
d10bd81b45
commit
a4be3bc34f
5 changed files with 30 additions and 30 deletions
2
Include/internal/pycore_opcode_metadata.h
generated
2
Include/internal/pycore_opcode_metadata.h
generated
|
@ -1089,7 +1089,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = {
|
||||||
[BINARY_OP_SUBSCR_DICT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
[BINARY_OP_SUBSCR_DICT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[BINARY_OP_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG },
|
[BINARY_OP_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG },
|
||||||
[BINARY_OP_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
[BINARY_OP_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[BINARY_OP_SUBSCR_LIST_SLICE] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
[BINARY_OP_SUBSCR_LIST_SLICE] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[BINARY_OP_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
[BINARY_OP_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
|
||||||
[BINARY_OP_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
[BINARY_OP_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
|
||||||
[BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
|
[BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
|
||||||
|
|
2
Include/internal/pycore_uop_metadata.h
generated
2
Include/internal/pycore_uop_metadata.h
generated
|
@ -99,7 +99,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
||||||
[_BINARY_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_BINARY_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_STORE_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
[_STORE_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_BINARY_OP_SUBSCR_LIST_INT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
[_BINARY_OP_SUBSCR_LIST_INT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_BINARY_OP_SUBSCR_LIST_SLICE] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
[_BINARY_OP_SUBSCR_LIST_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_BINARY_OP_SUBSCR_STR_INT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
[_BINARY_OP_SUBSCR_STR_INT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||||
[_GUARD_NOS_TUPLE] = HAS_EXIT_FLAG,
|
[_GUARD_NOS_TUPLE] = HAS_EXIT_FLAG,
|
||||||
[_GUARD_TOS_TUPLE] = HAS_EXIT_FLAG,
|
[_GUARD_TOS_TUPLE] = HAS_EXIT_FLAG,
|
||||||
|
|
|
@ -916,11 +916,10 @@ dummy_func(
|
||||||
assert(PyList_CheckExact(list));
|
assert(PyList_CheckExact(list));
|
||||||
|
|
||||||
PyObject *res_o = _PyList_SliceSubscript(list, sub);
|
PyObject *res_o = _PyList_SliceSubscript(list, sub);
|
||||||
DEOPT_IF(res_o == NULL);
|
|
||||||
STAT_INC(BINARY_OP, hit);
|
|
||||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
|
||||||
STAT_INC(BINARY_OP, hit);
|
STAT_INC(BINARY_OP, hit);
|
||||||
DECREF_INPUTS();
|
DECREF_INPUTS();
|
||||||
|
ERROR_IF(res_o == NULL);
|
||||||
|
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||||
}
|
}
|
||||||
|
|
||||||
macro(BINARY_OP_SUBSCR_STR_INT) =
|
macro(BINARY_OP_SUBSCR_STR_INT) =
|
||||||
|
|
25
Python/executor_cases.c.h
generated
25
Python/executor_cases.c.h
generated
|
@ -1348,24 +1348,25 @@
|
||||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||||
PyObject *res_o = _PyList_SliceSubscript(list, sub);
|
PyObject *res_o = _PyList_SliceSubscript(list, sub);
|
||||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||||
if (res_o == NULL) {
|
|
||||||
UOP_STAT_INC(uopcode, miss);
|
|
||||||
JUMP_TO_JUMP_TARGET();
|
|
||||||
}
|
|
||||||
STAT_INC(BINARY_OP, hit);
|
|
||||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
|
||||||
STAT_INC(BINARY_OP, hit);
|
STAT_INC(BINARY_OP, hit);
|
||||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||||
_PyStackRef tmp = list_st;
|
_PyStackRef tmp = sub_st;
|
||||||
list_st = res;
|
|
||||||
stack_pointer[-2] = list_st;
|
|
||||||
PyStackRef_CLOSE(tmp);
|
|
||||||
tmp = sub_st;
|
|
||||||
sub_st = PyStackRef_NULL;
|
sub_st = PyStackRef_NULL;
|
||||||
stack_pointer[-1] = sub_st;
|
stack_pointer[-1] = sub_st;
|
||||||
PyStackRef_CLOSE(tmp);
|
PyStackRef_CLOSE(tmp);
|
||||||
|
tmp = list_st;
|
||||||
|
list_st = PyStackRef_NULL;
|
||||||
|
stack_pointer[-2] = list_st;
|
||||||
|
PyStackRef_CLOSE(tmp);
|
||||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||||
stack_pointer += -1;
|
stack_pointer += -2;
|
||||||
|
assert(WITHIN_STACK_BOUNDS());
|
||||||
|
if (res_o == NULL) {
|
||||||
|
JUMP_TO_ERROR();
|
||||||
|
}
|
||||||
|
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||||
|
stack_pointer[0] = res;
|
||||||
|
stack_pointer += 1;
|
||||||
assert(WITHIN_STACK_BOUNDS());
|
assert(WITHIN_STACK_BOUNDS());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
26
Python/generated_cases.c.h
generated
26
Python/generated_cases.c.h
generated
|
@ -811,27 +811,27 @@
|
||||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||||
PyObject *res_o = _PyList_SliceSubscript(list, sub);
|
PyObject *res_o = _PyList_SliceSubscript(list, sub);
|
||||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||||
if (res_o == NULL) {
|
|
||||||
UPDATE_MISS_STATS(BINARY_OP);
|
|
||||||
assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
|
|
||||||
JUMP_TO_PREDICTED(BINARY_OP);
|
|
||||||
}
|
|
||||||
STAT_INC(BINARY_OP, hit);
|
|
||||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
|
||||||
STAT_INC(BINARY_OP, hit);
|
STAT_INC(BINARY_OP, hit);
|
||||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||||
_PyStackRef tmp = list_st;
|
_PyStackRef tmp = sub_st;
|
||||||
list_st = res;
|
|
||||||
stack_pointer[-2] = list_st;
|
|
||||||
PyStackRef_CLOSE(tmp);
|
|
||||||
tmp = sub_st;
|
|
||||||
sub_st = PyStackRef_NULL;
|
sub_st = PyStackRef_NULL;
|
||||||
stack_pointer[-1] = sub_st;
|
stack_pointer[-1] = sub_st;
|
||||||
PyStackRef_CLOSE(tmp);
|
PyStackRef_CLOSE(tmp);
|
||||||
|
tmp = list_st;
|
||||||
|
list_st = PyStackRef_NULL;
|
||||||
|
stack_pointer[-2] = list_st;
|
||||||
|
PyStackRef_CLOSE(tmp);
|
||||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||||
stack_pointer += -1;
|
stack_pointer += -2;
|
||||||
assert(WITHIN_STACK_BOUNDS());
|
assert(WITHIN_STACK_BOUNDS());
|
||||||
|
if (res_o == NULL) {
|
||||||
|
JUMP_TO_LABEL(error);
|
||||||
|
}
|
||||||
|
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||||
}
|
}
|
||||||
|
stack_pointer[0] = res;
|
||||||
|
stack_pointer += 1;
|
||||||
|
assert(WITHIN_STACK_BOUNDS());
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue