diff --git a/Python/bytecodes.c b/Python/bytecodes.c index d0f2d04dfead0f..2bb42c2ad449e9 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -318,12 +318,14 @@ dummy_func( char is_successor = PyFloat_CheckExact(left) && (Py_TYPE(left) == Py_TYPE(right)); bb_test = BB_TEST(is_successor, 0); - left_unboxed = (is_successor - ? *((PyObject **)(&(((PyFloatObject *)left)->ob_fval))) - : left); - right_unboxed = (is_successor - ? *((PyObject **)(&(((PyFloatObject *)right)->ob_fval))) - : right); + if (is_successor) { + left_unboxed = *((PyObject **)(&(((PyFloatObject *)left)->ob_fval))); + right_unboxed = *((PyObject **)(&(((PyFloatObject *)right)->ob_fval))); + DECREF_INPUTS(); + } else { + left_unboxed = left; + right_unboxed = right; + } } inst(BINARY_OP_ADD_FLOAT_UNBOXED, (left, right -- sum : PyRawFloat_Type)) { diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index d0dde435a97081..9ae72b8d258798 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -501,12 +501,15 @@ char is_successor = PyFloat_CheckExact(left) && (Py_TYPE(left) == Py_TYPE(right)); bb_test = BB_TEST(is_successor, 0); - left_unboxed = (is_successor - ? *((PyObject **)(&(((PyFloatObject *)left)->ob_fval))) - : left); - right_unboxed = (is_successor - ? *((PyObject **)(&(((PyFloatObject *)right)->ob_fval))) - : right); + if (is_successor) { + left_unboxed = *((PyObject **)(&(((PyFloatObject *)left)->ob_fval))); + right_unboxed = *((PyObject **)(&(((PyFloatObject *)right)->ob_fval))); + Py_DECREF(left); + Py_DECREF(right); + } else { + left_unboxed = left; + right_unboxed = right; + } stack_pointer[-1] = right_unboxed; stack_pointer[-2] = left_unboxed; DISPATCH();