[fpc-devel] Debugging Loop Unroll Optimization
Mattias Gaertner
nc-gaertnma at netcologne.de
Thu May 17 23:51:44 CEST 2018
On Thu, 17 May 2018 18:34:04 +0200
Florian Klämpfl <florian at freepascal.org> wrote:
>[...]
Apparently this mail thread confuses some users:
report https://bugs.freepascal.org/view.php?id=33753:
> ISO7185: "After a for-statement is executed, other than being left by a goto-statement, the
> control-variable shall be undefined"
>
> http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Declarations_and_Statements_(Delphi)#For_Statements:
> "After the for statement terminates (provided this was not forced by a Break or an Exit procedure),
> the value of counter is undefined."
>
> So this shall not be unrolled, but is still error prone, if Result is not set after the regular end of the for loop.
To avoid misunderstandings:
The above clearly says, that using break/goto/exit is safe:
for Result:=low to high do
if Something(Result) then exit;
for Result:=low to high do
if Something(Result) then break;
Something(Result);
OTOH this is not safe:
> > function tfun: integer;
> > begin
> > for Result:=1 to 10 do
> > s:=s+1;
> > end;
Mattias
More information about the fpc-devel
mailing list