I found what appears to a subtle difference between the Delphi & Kylix3
handling of dynamic array assignment and FPC in Delphi mode. If an
assignment is made along the lines:

type
    TArray : array of Integer;

var
    A, B : TArray;
    I : Integer;

type
    function F ( C : TArray ) : TArray;
    begin
       { does nothing }
    end

begin
    SetLength(B,4);
    for I := 0 to 3 do
       B[I] := I;

    A := Copy(B);
    A := F(B); { what is the correct answer here? }
end;

a question arises as to the value of A. Should it be nil or should it be
a copy of B?

Delphi and Kylix assume that because the function F does not assign a
value to Result (ie, does not assign a return value) that the Lvalue
assigned from F remains unchanged.

FPC assigns nil to A which IMHO is correct, but not when run in "bug for
bug" Delphi compatibility mode.

Obviously F not assigning Result is a programming error, but
unfortunately it can be a common one in legacy code.

What do others think about this compatibility difference?

Should it be fixed or should (possibly large) legacy codebases be debugged?

Cheers, Bruce.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to