An idea for TCP closures and rust's effect system

What if a function 1 passes a closure (that does a non-local return) to a function 2, which in turn passes it to a function 3. Now the moment the function is run and the return is triggered it needs to run the destructors of function 3's local variables, then function 2's local variables and the function 1's local variables. How can it know it?

I'm not entirely sure that would work (it probably does? not considering the destructors), but anyway this looks a bit too overhead for the average case where callee and closure can just be inlined.