From: Ken Jin Date: Mon, 15 Sep 2025 16:24:37 +0000 (+0100) Subject: gh-132732: Clear errors in JIT optimizer on error (GH-136048) X-Git-Tag: v3.15.0a1~355 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=46f823bb818b0e8f40b51c8fa9ef33f743915770;p=thirdparty%2FPython%2Fcpython.git gh-132732: Clear errors in JIT optimizer on error (GH-136048) --- diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c index fd395d3c6c25..9d43f2de41df 100644 --- a/Python/optimizer_analysis.c +++ b/Python/optimizer_analysis.c @@ -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);