Until last year, the borrow checker operated on lexical scopes, which are apparent in the source code and the programmer can reason about. Last year, the borrow checker was changed to support non-lexical lifetimes by operating on the control flow graph—something the programmer never sees and is hard to reason about. This project continues running further in that direction, making it harder for the programmer to understand why the borrow checker does what it does.