Clang's error correction can invent extra tokens, including at the "eof"
position of various FileIDs.
(I thought this only happened at the AST level - I was mistaken).
Currently this can lead to Selection looping forever unable to make progress
because the location is not in range.
Unfortunately after fixing this the selection we get may be garbage: it can
also invent tokens whose locations coincide with real ones. Nevertheless
this is better than asserting/hanging.
It reminds me of this fix, the symptom is the same (triggers the Batch.empty() assertion).
With the current fix, it is no longer needed I think (maybe we should keep it, it seems an interesting special case.)