[fpc-pascal] Bitpacked bug?
Victor Campillo
victor.campillo at gmail.com
Sun May 12 17:58:57 CEST 2019
Hi,
I think I found a bug with bitpackeds records.
I have the next record.
TBitpacked = packed record
Case Integer Of
0 : (Word : Word);
1 : (Byte : array [0..1] of Byte);
2 : (Boolean: bitpacked Array [0..15] of boolean);
3 : (Bit : bitpacked Record
case integer of
0: (bit0: Boolean);
1: (bit1: Boolean);
2: (bit2: Boolean);
3: (bit3: Boolean);
4: (bit4: Boolean);
5: (bit5: Boolean);
6: (bit6: Boolean);
7: (bit7: Boolean);
8: (bit8: Boolean);
9: (bit9: Boolean);
10: (bit10: Boolean);
11: (bit11: Boolean);
12: (bit12: Boolean);
13: (bit13: Boolean);
14: (bit14: Boolean);
15: (bit15: Boolean);
end);
end;
See the program below.
var
pp:TBitpacked;
begin
pp.Word:=0;
pp.Boolean[1]:=true;
writeln(pp.Byte[0]); // This prints 2 -- OK
writeln(pp.Boolean[0]); // This prints False -- OK
writeln(pp.Boolean[1]); // This prints True -- OK
pp.Word:=0;
pp.Bit.bit1:=true;
writeln(pp.Byte[0]); // This prints 1 -- WRONG
writeln(pp.Boolean[0]); // This prints True -- WRONG
writeln(pp.Boolean[1]); // This prints False -- WRONG
pp.Word:=0;
pp.Boolean[8]:=true;
writeln(pp.Byte[0]); // This prints 0 -- OK
writeln(pp.Byte[1]); // This prints 1 -- OK
writeln(pp.Boolean[0]); // This prints False -- OK
writeln(pp.Boolean[8]); // This prints True -- OK
pp.Word:=0;
pp.Bit.bit8:=true;
writeln(pp.Byte[0]); // This prints 1 -- WRONG
writeln(pp.Byte[1]); // This prints 0 -- WRONG
writeln(pp.Boolean[0]); // This prints True -- WRONG
writeln(pp.Boolean[8]); // This prints False -- WRONG
end.
Is this a known issue or there is something wrong with my code?
I tested this with FPC 3.0.4 and trunk, same result.
Best Regards.
--
Victor Campillo
More information about the fpc-pascal
mailing list