Open
Description
Crash report
We like to pretend that _Py_Dealloc
(and, by extension, Py_DECREF
, Py_XDECREF
, Py_CLEAR
, PyStackRef_CLOSE
, PyStackRef_CLEAR
, etc...) isn't an escaping call in tier two. However, it's perfectly capable of invalidating the world. For example, the following code crashes when run under the JIT:
import sys
class Crashy:
def __del__(self):
ns = sys._getframe(1).f_locals
if ns["i"] == 999:
ns["i"] = None
def crashy():
for i in range(1000):
n = Crashy()
i + i # Remove guards for i.
n = None # Change i.
i + i # Crash!
crashy()
Longer term, we're hoping that removing refcounting operations in tier two will help us out here. Fortunately, the _SET_IP
and _CHECK_VALIDITY
instructions necessary to fix this issue aren't expensive enough to show up on benchmarks when added back (for now).