W1023 Comparing signed and unsigned types - widened both operands (Object Pascal)
To compare signed and unsigned types correctly the compiler must promote both operands to the next larger size data type.
To see why this is necessary, consider two operands, a Shortint with the value -128 and a Byte with the value 130. The Byte type has one more digit of precision than the Shortint type, and thus comparing the two values cannot accurately be performed in only 8 bits. The proper solution for the compiler is to promote both these types to a larger, common, size and then to perform the comparison.
program Produce; var s : shortint; b : byte; begin s := -128; b := 130; assert(b < s); end.