delphi incompatibility: in operator for sets broken if left operand > byte
Original Reporter info from Mantis: Thorsten Engler
-
Reporter name: Thorsten Engler
Original Reporter info from Mantis: Thorsten Engler
- Reporter name: Thorsten Engler
Description:
program SetsBroken;
{$mode delphi}
var
x: Integer;
begin
x := 256;
WriteLn(x in [0, 1]); // produces true in FPC, false in Delphi
end.
Additional information:
Code generated by delphi:
SqlTests.dpr.11: x := 256;
004040B0 C705E88740000001 mov [$004087e8],$00000100
SqlTests.dpr.12: WriteLn(x in [0, 1]);
004040BA A1E8874000 mov eax,[$004087e8]
004040BF 83E802 sub eax,$02
004040C2 0F92C2 setb dl
004040C5 A194594000 mov eax,[$00405994]
004040CA E8F1F0FFFF call @Write0Bool
004040CF E818F1FFFF call @writeln
code generated by FPC:
# [12] WriteLn(x in [0, 1]);
call fpc_get_output
movl %eax,%ebx
movzbl U_P$SQLTESTS_X,%eax
cmpl $2,%eax
jb .Lj9
.Lj9:
setcb %cl
movl %ebx,%edx
movl $0,%eax
call fpc_write_text_boolean
movl %ebx,%eax
call fpc_writeln_end
.stabn 68,0,13,.Ll4 - _main
.Ll4:
Mantis conversion info:
- Mantis ID: 8258
- Version: 2.2.0
- Fixed in version: 2.2.0
- Fixed in revision: 6363 (#f38d29cf)