On 08 Jan 2013, at 09:46, Martin wrote:
I know it's a hint. And I know that implies it may mean noting, and
yet is still present....
Just trying to understand.
if I did "int-longword" (same for addition and reverse order) then I
need a int64 to hold the result.
--- 1)
Yet on my 32 bit Win vista (testing with 2.7.1 [2012/12/09] for
i386 )
fpc.exe -MObjFPC -Scghi -O1 -g -gl -vewnhi -l project1.lpr
This gives no hint or warning (ignoring the "uninitialized" ones).
It still gives none, even if I add " -Cro "
program Project1;
var
a: LongWord;
b: Integer;
begin
b := a - b; // (+$ffffffff) - ( -$7fffffff ) => can not be hold in
"b" integer
b := b - a;
end.
Given that this may actually truncate data (or give a run-error),
IMHO a warning would be ok.
No hint is given because those operations are not evaluated using 64
bit arithmetic. They are no more dangerous than subtracting two
longwords or integers from each other, because the result of those
operations may not be representable either as a longword/integer.
--- 2)
But then, if I compare the 2 values, resulting in a boolean value
(no risk of data truncation), then I get the hint
project1.lpr(7,10) Hint: Mixing signed expressions and longwords
gives a 64bit result
program Project1;
var
a: LongWord;
b: Integer;
c: Boolean;
begin
c := a < b;
end.
In this case, I don't even see why a hint is needed? (I might
overlook something).
The hint is because the compiler in this case converts the comparison
to a 64 bit operation (otherwise it's impossible to evaluate that
expression correctly), and 64 bit arithmetic is slower on 32 bit
platforms than 32 bit arithmetic. The hint is only about the potential
performance impact.
Jonas
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel