[fpc-devel]bugs on 64-bits integers?
Wirawan Purwanto
wirawan at camelot.physics.wm.edu
Sat Jun 2 03:52:08 CEST 2001
I've just started using FPC 1.0.4 for win32 and DOS right now. But I found a
nasty bug in the compiler. Could you spot it? Here is the sample code I used
(compile under Win32 or DOS/GO32V2):
program FPCtst;
//{$mode objfpc}
{$apptype console}
var x: qword;
y: int64;
L: longint;
begin
Writeln('Testing ', qword(maxlongint)*2);
x := 1;
writeln('max x = ', low(x), '...', high(x));
writeln('max y = ', low(y), '...', high(y));
L := low(l);
writeln('l min = ', l);
l := high(l);
writeln('l max = ', l);
x := high(qword);
writeln('x min = ', x);
x := high(x);
writeln('x max = ', x);
end.
The output is as follows:
Testing 4294967294
max x = 17179869184...17179869184
max y = 17179869184...17179869184
l min = -2147483648
l max = 2147483647
x min = 0
x max = 0
See that the maximum and minimum values of the 64-bit integers are off. Do
you know why? And the low and high function returns differently if it is
inside a Writeln statement or outside it.
I have double-checked these funny effects using my own
integer-to-hexadecimal-string function (I can send it to you if you want
it), and verified that they are all *correctly* wrong. And when I examine
the assembler outputs, the error is also there in the assembler. Hence it
must have been the compiler's error.
When replying, please include my address, since I am not currently
subscribed to FPC developer mailing list.
Thanks,
Wirawan
More information about the fpc-devel
mailing list