Near the end of TraceVar.3, we see:
Tcl doesn’t do any error checking to prevent
trace procedures from mis-using the interpreter
during traces with TCL_INTERP_DESTROYED set.
It would be a fairly simple matter for
TclCallVarTraces to pass in a value of
(interp == NULL) in exactly those cases
when it is setting the TCL_INTERP_DESTROYED
flag. A Tcl_TraceVarProc certainly can't
abuse an interp it never receives a pointer
I suppose there's too many existing
Tcl_TraceVarProcs that implicitly assume
they receive a non-NULL interp argument
to do anything like this before Tcl 9.
Oh well, at least it's recorded.