This is a bug in a code path that's seldom used, because in practice
(at least in the whole test suite), calls to del index[i:j] currently
just don't happen before the nodetree has been initialized.
However, in our current work to replace the nodetree by a Rust implementation,
this is of course systematic.
In index_slice_del(), if the slice start is smaller than self->length,
the whole of self->added has to be cleared.
Before this change, the clearing was done only by the call to
index_invalidate_added(self, 0), that happens only for initialized
nodetrees. Hence the removal was effective only from start to self->length.
The consequence is index corruption, with bogus results in subsequent calls,
and in particular errors such as ValueError("parent out of range"), due to
the fact that parents of entries in self->added are now just invalid.
This is detected by the rebase tests, under conditions that the nodetree
of revlog.c is never initialized. The provided specific test is more direct.