GH-119866: Don't clear frame->stackpointer on release builds (GH-131750)

This commit is contained in:
Brandt Bucher 2025-03-26 12:00:16 -07:00 committed by GitHub
parent 2c686a9ac2
commit 4b3d5b6042
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -163,15 +163,17 @@ _PyFrame_GetLocalsArray(_PyInterpreterFrame *frame)
return frame->localsplus;
}
/* Fetches the stack pointer, and sets stackpointer to NULL.
Having stackpointer == NULL ensures that invalid
values are not visible to the cycle GC. */
// Fetches the stack pointer, and (on debug builds) sets stackpointer to NULL.
// Having stackpointer == NULL makes it easier to catch missing stack pointer
// spills/restores (which could expose invalid values to the GC) using asserts.
static inline _PyStackRef*
_PyFrame_GetStackPointer(_PyInterpreterFrame *frame)
{
assert(frame->stackpointer != NULL);
_PyStackRef *sp = frame->stackpointer;
#ifndef NDEBUG
frame->stackpointer = NULL;
#endif
return sp;
}