Skip to content

Signed-enum bug

FPC 3.2.3

The resulting enum size and value ordinality can be wrong (unlike declared).

procedure test;
{$packenum 1}
type 
  tA = (an1 = -1, a255 = 255);
  tB = (bn1 = -1, b128 = 128);
  tC = (cn127 = -127, c128 = 128);
  tD = (dn1= -1, d65535 = 65535);
var 
  a: tA; b: tB; c: tC; d: tD;
  size, failures: integer;
begin
  failures := 0;
  size := sizeOf(tA);
  if size <> sizeof(smallint) then
    inc( failures); // size = 1
  a := a255;
  if ord(a) <> 255 then
    inc( failures); // (a = -1)

  size := sizeOf(tB);
  if size <> sizeof(smallint) then
    inc( failures); // size = 1
  b := b128;
  if ord(b) <> 128 then
    inc( failures); // (b = -128)

  size := sizeOf(tC);
  if size <> sizeof(smallint) then
    inc( failures); // size = 1
  c := c128;
  if ord(c) <> 128 then
    inc( failures); // (c = -128)

  size := sizeOf(tD);
  if size <> sizeof(longint) then
    inc( failures); // size = 2
  d := d65535;
  if ord(d) <> 65535 then
    inc( failures); // (d = -1)

  assert( failures = 0); // (failures = 8) 
end;
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information