On 24/12/2021 18:07, Bart via fpc-devel wrote:
On Fri, Dec 24, 2021 at 12:00 PM Adriaan van Os via fpc-devel
<fpc-devel@lists.freepascal.org> wrote:
Neither would the compiler allow (I hope) the const parameter to be passed as a
var parameter.
It does not:
{$mode objfpc}
{$h+}
procedure foo(var x: integer);
begin
end;
procedure bar(const y: integer);
begin
foo(y); //line 10
end;
The first quote was probably a ref to the (current) case from the forum,
that triggered this.
procedure Foo(const A: String; var B: string);
begin ... end;
var s: string;
Foo(s,s);
It is most likely (but not certain) that B will be modified. And with
that A would be modified.
The tricky bits are:
- If A would no longer be accessed after B was modified, then that code
will *currently* work. Yet new optimizations could be added, that
affect this (though really unlikely)
- could be a virtual method, and each version only accesses either A or B.
- it can not always be caught "Foo(s1,s2)" could have s1 and s2 have the
same var (and with a ref count of 1, if both were "var param" to the
caller).
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel