[fpc-pascal] Arguments gets corrupted with anonymous nested function
    Hairy Pixels 
    genericptr at gmail.com
       
    Sun Sep  4 18:07:26 CEST 2022
    
    
  
The following program uses an anonymous nested function which captures a local variable. It seems the arguments get corrupted (likely because of the hidden first param for the nested function signature) and prints garbled data. I reduced this snippet down from another project but I’m not sure if this is the best way to reproduce the real issue.
Is this a compiler bug or am I doing something wrong?
===========================
{$mode objfpc}
{$modeswitch anonymousfunctions}
{$modeswitch nestedprocvars}
program test;
type
  generic TMyClass<T> = class
    type
      TCallback = procedure (data: T) is nested;
    procedure Call(callback: TCallback);
    procedure Test;
  end;
procedure TMyClass.Call(callback: TCallback);
begin
  callback(default(T));
end;
procedure TMyClass.Test;
var
  i: integer;
begin
  Call(procedure(data: T)
  begin
    Inc(i);
    writeln(data);  // prints garbled data like 73251232
  end);
end;
begin
  specialize TMyClass<Integer>.Create.Test;
end.
Regards,
	Ryan Joseph
    
    
More information about the fpc-pascal
mailing list