Wahrscheinlich steht der Code in einer Prozedur/Funktion.
Da am ende exit kommt, ist die Zuweisung
frei := I;
total irrelevant und wird wegoptimiert. Das Exit ist sowiso ein Sprung zum Prozedurende.
Zum Debuggen also einfach mal die Optimierung abschalten oder Code schreiben, der was bewirkt (wird dann auch nicht wegoptimiert

)