mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
gh-116088: Insert bottom checks after all sym_set_...() calls (#116089)
This changes the `sym_set_...()` functions to return a `bool` which is `false` when the symbol is `bottom` after the operation. All calls to such functions now check this result and go to `hit_bottom`, a special error label that prints a different message and then reports that it wasn't able to optimize the trace. No executor will be produced in this case.
This commit is contained in:
parent
3b6f4cadf1
commit
0656509033
7 changed files with 106 additions and 47 deletions
36
Python/optimizer_cases.c.h
generated
36
Python/optimizer_cases.c.h
generated
|
@ -172,8 +172,12 @@
|
|||
sym_matches_type(right, &PyLong_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0, 0);
|
||||
}
|
||||
sym_set_type(left, &PyLong_Type);
|
||||
sym_set_type(right, &PyLong_Type);
|
||||
if (!sym_set_type(left, &PyLong_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
if (!sym_set_type(right, &PyLong_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -276,8 +280,12 @@
|
|||
sym_matches_type(right, &PyFloat_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0 ,0);
|
||||
}
|
||||
sym_set_type(left, &PyFloat_Type);
|
||||
sym_set_type(right, &PyFloat_Type);
|
||||
if (!sym_set_type(left, &PyFloat_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
if (!sym_set_type(right, &PyFloat_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -383,8 +391,12 @@
|
|||
sym_matches_type(right, &PyUnicode_Type)) {
|
||||
REPLACE_OP(this_instr, _NOP, 0 ,0);
|
||||
}
|
||||
sym_set_type(left, &PyUnicode_Type);
|
||||
sym_set_type(right, &PyUnicode_Type);
|
||||
if (!sym_set_type(left, &PyUnicode_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
if (!sym_set_type(right, &PyUnicode_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1397,8 +1409,12 @@
|
|||
_Py_UopsSymbol *callable;
|
||||
null = stack_pointer[-1 - oparg];
|
||||
callable = stack_pointer[-2 - oparg];
|
||||
sym_set_null(null);
|
||||
sym_set_type(callable, &PyMethod_Type);
|
||||
if (!sym_set_null(null)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
if (!sym_set_type(callable, &PyMethod_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1425,7 +1441,9 @@
|
|||
self_or_null = stack_pointer[-1 - oparg];
|
||||
callable = stack_pointer[-2 - oparg];
|
||||
uint32_t func_version = (uint32_t)this_instr->operand;
|
||||
sym_set_type(callable, &PyFunction_Type);
|
||||
if (!sym_set_type(callable, &PyFunction_Type)) {
|
||||
goto hit_bottom;
|
||||
}
|
||||
(void)self_or_null;
|
||||
(void)func_version;
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue