diff --git a/Include/internal/pycore_cell.h b/Include/internal/pycore_cell.h index a9a8b48c41f5356..4056a0543e5d575 100644 --- a/Include/internal/pycore_cell.h +++ b/Include/internal/pycore_cell.h @@ -48,15 +48,12 @@ _PyCell_GetStackRef(PyCellObject *cell, _PyStackRef *value_addr) { PyObject *value; #ifdef Py_GIL_DISABLED - for(;;) { - value = _Py_atomic_load_ptr(&cell->ob_ref); - if (value != NULL) { - if (_Py_TryIncrefCompare(&cell->ob_ref, value)) { - *value_addr = _PyStackRef_FromPyObjectSteal(value); - return; - } + value = _Py_atomic_load_ptr(&cell->ob_ref); + if (value != NULL) { + if (_Py_TryIncrefCompare(&cell->ob_ref, value)) { + *value_addr = _PyStackRef_FromPyObjectSteal(value); + return; } - break; } #endif value = PyCell_GetRef(cell); diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 2487e2277f408f0..7a1bfb2e8f577aa 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1647,10 +1647,10 @@ dummy_func( value = PyStackRef_FromPyObjectSteal(value_o); } - inst(LOAD_DEREF, ( -- value[1])) { + inst(LOAD_DEREF, ( -- value)) { PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); - _PyCell_GetStackRef(cell, value); - if (PyStackRef_IsNull(*value)) { + _PyCell_GetStackRef(cell, &value); + if (PyStackRef_IsNull(value)) { _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); ERROR_IF(true, error); } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 1a15012dbdc1f50..3ccac5a16cbf6cd 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -1821,15 +1821,15 @@ } case _LOAD_DEREF: { - _PyStackRef *value; + _PyStackRef value; oparg = CURRENT_OPARG(); - value = &stack_pointer[0]; PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); - _PyCell_GetStackRef(cell, value); - if (PyStackRef_IsNull(*value)) { + _PyCell_GetStackRef(cell, &value); + if (PyStackRef_IsNull(value)) { _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); if (true) JUMP_TO_ERROR(); } + stack_pointer[0] = value; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); break; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index d03fcb8bc071a6c..eac658b97423ebd 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -5500,14 +5500,14 @@ frame->instr_ptr = next_instr; next_instr += 1; INSTRUCTION_STATS(LOAD_DEREF); - _PyStackRef *value; - value = &stack_pointer[0]; + _PyStackRef value; PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); - _PyCell_GetStackRef(cell, value); - if (PyStackRef_IsNull(*value)) { + _PyCell_GetStackRef(cell, &value); + if (PyStackRef_IsNull(value)) { _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); if (true) goto error; } + stack_pointer[0] = value; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); DISPATCH(); diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index 5caa38822f1f553..a6cfa271ae6758c 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -894,11 +894,9 @@ } case _LOAD_DEREF: { - _Py_UopsSymbol **value; - value = &stack_pointer[0]; - for (int _i = 1; --_i >= 0;) { - value[_i] = sym_new_not_null(ctx); - } + _Py_UopsSymbol *value; + value = sym_new_not_null(ctx); + stack_pointer[0] = value; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); break;