Re: Class var in record breaks pointer cast

Martin Frb via fpc-pascal <[email protected]> Thu, 5 Feb 2026 15:45:07 +0100
Newsgroups gmane.comp.compilers.free-pascal.general
Message-ID <[email protected]>
On 05/02/2026 14:42, Martin Frb via fpc-pascal wrote:
> 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.

Sorry, strike above / messed up the field names while reading. You 
aren't accessing "z".


My bad.

>
>>
>> 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

_______________________________________________
fpc-pascal maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal