Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2000-11

BUG 1222: CASE/OF Bug

2 messages · 1 person · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Michael Knapp

I have found a Bug in FPC (1.0.2 [2000/10/12])
I have submitted it as Bug 1222:

this code displays "case failed, but it should not", but it shouldn't

CONST
    c1=$80000000;
    c2=$80000001;
    c3=$80000002;
    c4=$80000003;
VAR v:dword;
BEGIN
  v:=c2;
  CASE v OF
    c1,c2:writeln('case c1,c2');
    c3,c4:writeln('case c3,c4');
    ELSE writeln('case failed, but it should not');
  END;
END.

-----

Michael

+--------------------------------------------------------------------+ | Michael Knapp - Mauerbach - Niederösterreich - Austria - Europe | | E-Mail: ICQ: 36542787 | +--------------------------------------------------------------------+ | G r a p h i X http://programmierer.freepage.de/graphix/ | | Graphics Library for Freepascal, Virtual Pascal and Borland Pascal | | http://graphix4pascal.cjb.net/ http://www.graphix4pascal.de.vu/ | +--------------------------------------------------------------------+

Reply by email

Michael Knapp
to Michael Knapp
Michael Knapp wrote 22 lines
I have found a Bug in FPC (1.0.2 [2000/10/12]) I have submitted it as Bug 1222: this code displays "case failed, but it should not", but it shouldn't CONST c1=$80000000; c2=$80000001; c3=$80000002; c4=$80000003; VAR v:dword; BEGIN v:=c2; CASE v OF c1,c2:writeln('case c1,c2'); c3,c4:writeln('case c3,c4'); ELSE writeln('case failed, but it should not'); END; END.

the problem/solution:

# [13] v:=c2;
movl $-2147483647,_V
# [14] CASE v OF
movl _V,%eax EAX=80000001h
subl $1,%eax EAX=80000000h, SF=1, ZF=0, CF=0
jbe .L3 Jump if (ZF=1) OR (CF=1) - NO JUMP
subl $1,%eax EAX=7FFFFFFFh, SF=0, ZF=0, CF=0
jb .L12 Jump if (CF=1) - NO JUMP
subl $1,%eax EAX=7FFFFFFEh, SF=0, ZF=0, CF=0
jbe .L6 jump if (ZF=1) OR (CF=1) - NO JUMP
jmp .L12 JUMP to .L12
.L6:
.L13:
# [16] c3,c4:writeln('case c3,c4');
[...code snipped...]
.L3:
.L17:
# [15] c1,c2:writeln('case c1,c2');
[...code snipped...]
.L12:
.L21:
# [17] ELSE writeln('case failed, but it should not'); [...code snipped...]
.L11:
# [19] END.

Michael

+--------------------------------------------------------------------+ | Michael Knapp - Mauerbach - Niederösterreich - Austria - Europe | | E-Mail: ICQ: 36542787 | +--------------------------------------------------------------------+ | G r a p h i X http://programmierer.freepage.de/graphix/ | | Graphics Library for Freepascal, Virtual Pascal and Borland Pascal | | http://graphix4pascal.cjb.net/ http://www.graphix4pascal.de.vu/ | +--------------------------------------------------------------------+

Reply by email