[fpc-devel] Do type-helpers block "regvar" opt?

Martin Frb lazarus at mfriebe.de
Mon Sep 29 11:42:33 CEST 2025


Tested with 3.3.1  d3ac07ad27
-O4
Win 64 bit

In the code below, compiled with -alr
    .section .text.n_p$project1_$$_foo,"ax"
    ....
    # Var a located in register rbx
(and it stays in rbx, until the call to write is prepared)



But if I comment out the "write", and uncomment the "a.w"
    # Var a located at rsp+32, size=OS_64

Even the initial 2 lines will then NOT use a register for "a"?



program project1;
{$mode objfpc}{$Inline on}
{$StackFrames off}{$ImplicitExceptions off}

{$ModeSwitch typehelpers}

type
   P = ^integer;

   PH = type helper for P
     procedure w;
   end;

procedure PH.w;
begin
   write(self^)
end;

var g:p;

procedure Foo;
var a: p;
begin
   a:= g;
   a^:=1;
   //a.w;
   write(a^); //
end;

begin
   foo;
end.




More information about the fpc-devel mailing list