gh-132732: Clear errors in JIT optimizer on error (GH-136048)

This commit is contained in:
Ken Jin
2025-09-15 17:24:37 +01:00
committed by GitHub
parent 26cfb17942
commit 46f823bb81

View File

@@ -462,7 +462,7 @@ const uint16_t op_without_decref_inputs[MAX_UOP_ID + 1] = {
[_BINARY_OP_SUBTRACT_FLOAT] = _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS,
};
/* 1 for success, 0 for not ready, cannot error at the moment. */
/* >0 (length) for success, 0 for not ready, clears all possible errors. */
static int
optimize_uops(
PyCodeObject *co,
@@ -472,6 +472,7 @@ optimize_uops(
_PyBloomFilter *dependencies
)
{
assert(!PyErr_Occurred());
JitOptContext context;
JitOptContext *ctx = &context;
@@ -555,7 +556,11 @@ error:
OPT_ERROR_IN_OPCODE(opcode);
}
_Py_uop_abstractcontext_fini(ctx);
return -1;
assert(PyErr_Occurred());
PyErr_Clear();
return 0;
}
@@ -702,10 +707,12 @@ _Py_uop_analyze_and_optimize(
_PyFrame_GetCode(frame), buffer,
length, curr_stacklen, dependencies);
if (length <= 0) {
if (length == 0) {
return length;
}
assert(length > 0);
length = remove_unneeded_uops(buffer, length);
assert(length > 0);