[fpc-devel] mising ansi string ref increase
Martin
fpc at mfriebe.de
Thu Jul 22 05:06:19 CEST 2010
Ok I reproduced it. (compiled with -gh -gt -O1 => but I am not sure it
matters
Question: Is it some wrong doing of me? or shall i report it as bug?
In Foo, "s" is supposed to be a copy of "x" => the string should have a
ref count of 2, and the modification of x, should make a copy of the
string.
afaik the output should be "a" => but it is "X"
You can also set x:='' => which will be random in output
program Project1;
{$mode objfpc}{$H+}
var
x: String;
procedure Foo(const s: String);
begin
x[1]:='X'; // x:='';
writeln(s);
end;
procedure Bar;
begin
SetLength(x,1);
x[1]:= 'a';
end;
{$R *.res}
begin
Bar;
Foo(x);
readln;
end.
On 22/07/2010 03:10, Martin wrote:
> I have an odd case (bug ?)
> But I am unable to reproduce on a simple example.
>
> Debugger output, and assembler both suggests it's in the compilation.
> fpc from trunk a few weeks ago. using -OpPENTIUMM -O1
>
> one procedure is declared as
> procedure SetFoldState(const AValue: String);
>
> another one calls this as follows
> if FPendingFoldState <> '' then
> SetFoldState(FPendingFoldState);
>
> FPendingFoldState is a variable (String) of the object (both methods
> belong to the same object too)
>
> Now in SetFoldstate is a line:
> FPendingFoldState:='';
>
> and after this AValue becomes corrupt
>
> The assembler of the calling code (from -al)
> # [6541] if FPendingFoldState <> '' then
> movl -4(%ebp),%eax
> movl 1352(%eax),%eax
> testl %eax,%eax
> je .Lj12594
> .Ll3371:
> # [6542] SetFoldState(FPendingFoldState);
> movl -4(%ebp),%eax
> movl 1352(%eax),%edx
> movl -4(%ebp),%eax
> call SYNEDIT_TCUSTOMSYNEDIT_$__SETFOLDSTATE$ANSISTRING
> .Lj12594:
>
> There is no ansistring inc ref (both methods are in the same file, and
> yes {$H+}
>
> Trying to reproduce in a smaller example did not bring results....
>
> Anyone any idea, if there s any code that could cause such an
> "optimization" ?
>
> Martin
>
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
More information about the fpc-devel
mailing list