[fpc-devel] Just to confirm, "with" behaviour expected
lazarus at mfriebe.de
Mon Aug 14 13:38:24 CEST 2023
In the below code, the array is resized (and more important relocated in
mem) inside the function "bar".
The commented line (without "with") works as expected.
The "with" line has a different behaviour. I guess it is by design. Just
wanted to confirm.
The version with "with" prints 12345 for " writeln(a[i,j].x);"
For all I can tell the return value of "bar" was written to the old
address of that array-entry.
Does "with" take the "address" of the value, and operate on that
address, even if the address of that value could change within the
- test was performed with
fpc 3.2.3 -O1
fpc 3.3.1 -O4
a: array of array of record x:Integer; end;
i, j: integer;
function bar(x: integer): integer;
Result := random(99) + 2 * x;
SetLength(a, 3000, 200);
i := random(99);
j := random(99);
with a[i,j] do x:= bar(x);
//a[i,j].x := bar(a[i,j].x);
SetLength(a, 100, 100);
for i := 0 to 99 do
for j := 0 to 99 do
a[i,j].x := 12345;
More information about the fpc-devel