<div dir="ltr"><div>Hi, I have some code (very important for next version of Generics.Collections):</div><div><br></div><div>------ code ------</div><div>{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}</div><div>{$APPTYPE CONSOLE}</div>
<div><br></div><div>uses</div><div>  Types;</div><div><br></div><div>{$IFDEF FPC}</div><div>function DynArraySize(p : pointer): tdynarrayindex; external name 'FPC_DYNARRAY_LENGTH';</div><div>{$ENDIF}</div><div><br>
</div><div>procedure Foo(A: Pointer);</div><div>begin</div><div>  WriteLn(DynArraySize(A));</div><div>end;</div><div><br></div><div>type</div><div>  TFoo = procedure(const A: TIntegerDynArray);</div><div><br></div><div>var</div>
<div>  Test: TFoo;</div><div>begin</div><div>  Test := @Foo;</div><div>  Test(TIntegerDynArray.Create(1, 2, 3, 4));</div><div>  ReadLn;</div><div>end.    </div><div>------ code ------</div><div><br></div><div>In Delphi all is ok (DynArraySize in Foo returns 4). In FPC DynArraySize return 1 (and program crash at the end). Is dynamic array with const modifier in FPC passed by value? With small modifications especially for FPC (by adding constref) all works fine:</div>
<div><br></div><div>------ code ------</div><div><div>procedure Foo(constref A: Pointer);</div><div>begin</div><div>  WriteLn(DynArraySize(A));</div><div>end;</div><div><br></div><div>type</div><div>  TFoo = procedure(constref A: TIntegerDynArray);</div>
</div><div>------ code ------</div><div><br></div><div>I can live with constref, but I'm much worried by this behavior (in version without constref). Why my code don't work in both compilers same? I would like to understand...<br>
</div><div><br></div>Regards,<div>HNB</div></div>