At line 2608, !(-1) == 0 when PyObject_RichCompareBool returns -1 (error), so the error falls through instead of jumping to unequal. Exception left dangling on thread state → assertion failure.
Change if (!eq) to if (eq <= 0) at line 2609.
class BadStr(str):
_armed = False
def __eq__(self, other):
if BadStr._armed and isinstance(other, str) and str.__eq__(self, other):
raise RuntimeError("Poison!")
return str.__eq__(self, other)
def __hash__(self): return str.__hash__(self)
c1 = compile("pass", "test", "exec")
c2 = c1.replace(co_name=BadStr("poison"))
c3 = compile("pass", "poison", "exec")
BadStr._armed = True
c2 == c3 # assertion: !_PyErr_Occurred(tstate)