Skip to content

Anonymous nested procedure in record bug

The following program prints an erroneous value for TMyRec.field. Related to #39809 but does not crash. Probably related to the calling convention for anonymous procedures not being "is nested".

{$mode objfpc}
{$modeswitch advancedrecords}
{$modeswitch anonymousfunctions}
{$modeswitch nestedprocvars}

program anonymous_record_error;

type
  TProc_Nested = procedure is nested;

type
  TMyRec = record
    field: integer;
    procedure Test;
  end;

procedure TMyRec.Test;
var
  f: TProc_Nested;
begin
  f := procedure
       begin
         writeln(field);
       end;
  f();
end;

var
  r: TMyRec;
begin
  r.field := 100;
  r.Test;
end.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information