A for-do statement doesn't have to make use of its index variable inside the block being controlled, hence there's no requirement that the index variable be visible.
You're right, it doesn't.
Therefore ISTM that the correct behaviour would be for the newly-declared i to be distinct from the index variable: it doesn't take the same value, and changing it doesn't (of course) affect the iteration.
After I thought a little bit about it, I came to that conclusion too but, as other forum members reported, Rio declares it a duplicate identifier.
My biggest problem with the Delphi implementation of inline variables is that it isn't always obvious what the visibility scope of a variable is. An example is that "for" loop, strictly speaking, the compiler should not be issuing a "duplicate identifier" error but, reportedly it does. The other thing I dislike a great deal about it is, the ability to declare variables anywhere. It's totally counter to what programming should be, which is: organized code and data. The compiler allowing variable declarations to occur just about anywhere is a data declaration "goto" because when reading the code and seeing a variable name, the programmer cannot go to a single location where all variables (within the scope) are declared, instead the programmer has to inspect every line of code because each one of them may be a variable declaration that masks a previous declaration. I can't help thinking ... who is designing this cr*p ?. Of course, the answer is, a company who is a lot more interested in making money than designing a good programming language.
I don't see much wrong with inline variables, they're reverting to the well-considered ALGOL-60 form.
They encourage messy and poorly organized code.
I like and support the ability to define scopes as necessary but, where they start, where they end and their internal structure has to be crystal clear, otherwise it's just another way of making a mess.
I can only guess but, I have a feeling Wirth made Pascal strict about where variables could be declared because he probably saw a lot of hard to understand code due to casual use of inline variable declarations.