18.104.22.168 For a for-statement, it is an error if the value of the initial-value is not assignment-compatible with the type possessed by the control-variable, if the statement of the for-statement is executed.
In other words, it is an error if the following two conditions are met:
type num = 1..100; var n : num;
then the following are errors:
for n := 0 to 100 do writeln(n); for n := 101 downto 1 do writeln(n);
But the following are not errors since the for loops are never started (and therefore no assignments are made to n).
for n := 101 to 1 do writeln(n); for n := 0 downto 100 do writeln(n);
This error is reported if range checking is enabled.