in debugging the SpurPlanningCompactor for the CoInterpreter I'm seeing a fair few stack depth check fails for non-local returns in Squeak trunk methods such as  in SystemProgressMorph>nextSlotFor:,  in HTTPSocket class>httpGet:args:user:passed: and  in PackageInfo>changeRecordsForMethod:do:.
Since these assert-fails happen in methods that are fully linked I know that the problem is /not/ the non-local return. For example, here's the code for a non-local return that fails the assert check at the end of the  in SystemProgressMorph>nextSlotFor:
Since the stack depth is checked when a send is linked we know that the stack depth was correct at 000db63b. And hence it's likely that the stack depth was correct when the non-local return trampoline was called soon afterwards. [I need to confirm this].
So this would imply that the stack depth is incorrect due to something else, and I suspect event checks on backward branches. This non-local return is in a loop. So its conceivable that the stack gets set incorrectly on some path through event checking. [The stack in this context is incorrect in having an extra copy of the loop index on the stack between the temp vars and the arguments to the thisContext aboutToReturn: result through: unwind.
For now, this is just an observation, but it could be a serious bug and it would be nice to fix it I guess we should add some assert checks on stack depth for reentering loops, e.g. in a CoInterpreter override for externalSetStackPageAndPointersForSuspendedContextOfProcess: