fpc/tests/webtbs/tw6769.pp
2008-05-09 21:08:30 +00:00

29 lines
633 B
ObjectPascal

{$q+}
{$r+}
Var A, B, C : Byte;
D : SmallInt;
Begin
A := 6;
B := 8;
C := 20;
D := -C+A+B;
if (d<>-6) then
halt(1);
Writeln(D);
{$ifndef cpu64}
{ On 32 bit systems, A+B becomes cardinal and the -C turns the expression
into int64 -> calculated ok.
On 64 bit systems, A+B becomes qword and the -C keeps it qword ->
overflow error. This can only be properly supported in 64 bit with the
introduction of a 128 bit signed type, except if we'd use a different
rule set in 64 bit (such as byte+byte -> cardinal and cardinal+cardinal
-> qword, or so)
}
D := A+B-C;
if (d<>-6) then
halt(1);
Writeln(D)
{$endif cpu64}
End.