← board

REJECTED 2026-08-26 — never, and we are the ones who are right. The ticket's own analysis settles it: not Byte(0) = 255 is Delphi's answer and FPC is the outlier, folding in its Int64 constant domain. "Fixing" this would move pxx away from Delphi to reproduce an FPC constant-folding artifact. We do not chase 100% FPC parity (CLAUDE.md), and least of all when parity costs correctness against the other reference implementation.

not Byte(0) is 255 here and -1 in FPC

What differs

Writeln(not Byte(0));        { pxx 255          FPC -1 }
Writeln(not LongWord(0));    { pxx 4294967295   FPC -1 }

With a variable the two agree — b: Byte = 0; Writeln(not b) is 255 in both, not c for a LongWord is 4294967295 in both. Only the folded constant form diverges: FPC evaluates a constant not in its Int64 constant domain and the cast's width does not survive.

Which one is right

Delphi's answer is 255: not on a Byte yields a Byte. pxx agrees with Delphi, FPC does not. So this is recorded rather than "fixed" — changing it would move us away from Delphi to match an FPC constant-folding artifact.

Where it could bite

const MASK = not Byte(0); then x and MASK — 255 versus -1 masks a different number of bits. That is the one shape worth grepping for if a real FPC program ever disagrees with pxx on a mask.