I had the idea to think about path checking as compile-time tracing GC. You have GC roots know by the compiler, and at any point in the code, you can perform liveness analysis, with roots on the stack, and every time a root goes out of scope, you do 'liveness analyisis' and deallocate everything that went out of scope.