I noticed that if you cloned an iterator that you had already
"shifted", the clone started at the beginning, rather than at the
original's current location.
Applied in r17691 with one change: C89 specifies that all variable declarations have to be at the
beginning of a block, so I had to move one of the lines so that this was the case. Please watch
for this in the future.