Hi,
Is there a FPC command line parameter to enable warnings or errors for the following situation at compile time? All logic tells me that detecting this an runtime only is WAY to late in the game!
Irrespective of the value of d64, I really think it aught to give you a compiler warning to say that you might run into data loss.
I know Delphi can't do this (no surprise), but I really expected something better from FPC.
=======================================
program overflow;
{$mode objfpc}{$H+}
var
d32: integer;
d64: Int64;
begin
d64 := 9223372036854775806;
d32 := d64; // <---- No compiler warning here, yet clearly
// a programming mistake
writeln(d64);
writeln(d32);
end.
=======================================The compiler's default behaviour:
$ fpc overflow.pas
Hint: End of reading config file /home/graemeg/.fpc.cfg Free Pascal Compiler version 3.0.4+dfsg-18ubuntu2 [2018/08/29] for x86_64 Copyright (c) 1993-2017 by Florian Klaempfl and others Target OS: Linux for x86-64
Compiling overflow.pas
Linking overflow
/usr/bin/ld.bfd: warning: link.res contains output sections; did you forget -T?
14 lines compiled, 0.1 sec
1 hint(s) issued
$ ./overflow
9223372036854775806
-2
Now enable runtime range checking and overflow support:
$ fpc -Criot overflow.pas
Hint: End of reading config file /home/graemeg/.fpc.cfg Free Pascal Compiler version 3.0.4+dfsg-18ubuntu2 [2018/08/29] for x86_64 Copyright (c) 1993-2017 by Florian Klaempfl and others Target OS: Linux for x86-64
Compiling overflow.pas
Linking overflow
/usr/bin/ld.bfd: warning: link.res contains output sections; did you forget -T?
14 lines compiled, 0.1 sec
1 hint(s) issued
$ ./overflow
Runtime error 201 at $000000000040020B
$000000000040020B
$000000000040018C
A crash at runtime only is way to late.
Regards,
Graeme
