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
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

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 @@ optimize_uops(
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);