Re: Class var in record breaks pointer cast

Martin Frb via fpc-pascal <[email protected]> Thu, 5 Feb 2026 14:42:42 +0100
Newsgroups gmane.comp.compilers.free-pascal.general
Message-ID <[email protected]>
On 05/02/2026 14:34, Hairy Pixels via fpc-pascal wrote:
> Is this a bug? Adding the class var field changes prints 0 and without 
> it prints 100 as expected. The class var is just a static field that 
> isn't actually part of the record so how could it affect the memory 
> layout?

A class var is (as the name suggest "not instance") not part of the 
instance. (instead a scoped global var).

So a pointer to the instance can not be to the memory that holds the 
class var data.

>
> type
>   TMyRec = record
>     class var z: UInt32;
>     x, y: UInt32;
>   end;
>
> var
>   r: TMyRec;
>   p: pointer;
> begin
>   r.x := 100;
>   p := @r;
>
>   writeln(PUInt32(p)^);
> end.
>
_______________________________________________
fpc-pascal maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal