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

Reply via email to