[fpc-devel] Debugging Loop Unroll Optimization

Ondrej Pokorny lazarus at kluug.net
Mon May 21 20:58:41 CEST 2018

On 21.05.2018 20:43, Florian Klämpfl wrote:
> What do you expect?

That it writes a sequence from 1 to 10 to console. Instead, it writes 10 
times "-1431655766".

> That it just works?

Please define what you understand with "it just works". (If you agree 
with me on the sequence from 1 to 10, my answer is yes.)

> If yes, what about
> program LoopUnrollTest;
> procedure Test;
> var
>    I: Integer;
>    procedure Test2;
>    begin
>      Writeln(I);
>      I:=1;
>    end;
> begin
>    for I := 1 to 10 do
>      Test2;
> end;
> begin
>    Test;
> end.

In this (your) case I don't expect anything - it is one of FPC's 
favorites "undefined behaviour" because as documented, it is not allowed 
to change the loop variable value within a for loop.

In my case (without the I:=1 assignment) I don't change the loop 
variable value - it is absolutely valid to read from it.


More information about the fpc-devel mailing list