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