User blog comment:Nayuta Ito/Brainfuck challenge/@comment-24725252-20160814153710/@comment-5529393-20160814224656

I'm not sure, since I don't know how you got there. If you look at the loop

[[->+<]<[->>>+<<<]>>>[-<<+<+>>>]<-]

let's say you start this loop with (x,>y). The first inner loop moves the contents of the current cell to the next cell to the right, so we get (x,>0,y) after the loop is done. You then move one to the left (>x,0,y) and move the contents three cells to the right to get (>0,0,y,x). You then move three cells to the right (0,0,y,>x). The next loop takes the contents of the current cell and moves it to the first two cells to get (x,x,y,<0). You then move one cell left and decrement to get (x,x,>y-1). The outer loop then repeats; clearly the next loop will get (x,x,x,>y-2), then (x,x,x,x,>y-3), and so on, until we reach (x,x,...,x,>0) with y+1 x's.

So we'll never get an infinite loop with this particular loop, so long as we start with the pointer pointing to a positive number, with the cell on the left being positive as well.