On 2019-07-03 08:58, Ondrej Pokorny wrote:
Hi,
If you want to extend -CR to perform "integer as enum" on enum(integer), please do it consequently and perform "integer as ShortInt" also on ShortInt(integer) - do range checking on explicit typecasts for all simple types, not only enums. People will love you for this: var S: ShortInt; I: Integer; begin I := 130; S := ShortInt(I); end; shall now raise a range check error with -CR. You can even optimize the compiler to verify constants on compile-time: var S: ShortInt; begin S := ShortInt($FF); end; should not compile any more with -CR. Good idea.
Well, I'm not sure to which extent the comment was meant seriously (no smiles around), but I'm not convinced that explicit typecasts should ever result in errors (even a warning would be very questionable, IMHO), because explicit typecasts belong to the category "strong tools in responsibility of the user" (similarly to working with pointers, embedded assembler, etc.).
. .
/If, at run-time, an index or enumeration type is specified that is out of the declared range of the compiler, then a run-time error is generated, and the program exits with exit code 201. This can happen when doing a typecast (implicit or explicit) on an enumeration type or subrange type./
Obviously, this doesn't happen with explicit typecasts and I believe that it's correct.
Tomas _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel