This is by design and has nothing to do with do_all. The same occurs with: from list.start until list.after loop io.put_integer (list.item) io.put_new_line list.forth end However using `across` instead which is more efficient does not suffer from this. I personally agree with you that traditional iteration should not infinitely iterate through the circular list. We will have a look at why this was done in the first place.