I think this should be UB. You shouldn’t have a live reference to deallocated memory, and &mut self
is passed in as an argument and hence live for the entire duration of the fn call. We would prefer this not to depend on whether self
is used again after calling do_dirty_work
to make optimizations simpler and to enable more of them.
But thanks for the example! This reminded me I need to think about deallocation in Stacked Borrows. I think deallocation should be UB if there are any FnBarrier
left on the stack. That would make this program UB.