Article View: gnu.gcc.bug
Article #2319bug in switch (constant)
From: Piet van Oostrum
Date: Thu, 16 Feb 1989 16:53
Date: Thu, 16 Feb 1989 16:53
86 lines
3292 bytes
3292 bytes
GCC version 1.32 generates wrong code for a switch with a constant
expression.
I have tested it on the Sun3 OS3 and on HCX/UX, so it may be
machine-independent. The behaviour is that it takes the default action
rather than the correct case. This happens independent of -O.
------------------------------------------------------------------------
main()
{ switch(5)
{ case 5 : printf("five\n") ;
break ;
default : printf("default\n") ;
break ;
}
}
------------------------------------------------------------------------
>4> gcc -v test2.c
gcc version 1.32
/usr/staff/lib/gcc-cpp -v -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 test2.c /tmp/cca26671.cpp
GNU CPP version 1.32
/usr/staff/lib/gcc-cc1 /tmp/cca26671.cpp -quiet -dumpbase test2.c -version -o /tmp/cca26671.s
GNU C version 1.32 (68k, MIT syntax) compiled by GNU C version 1.32.
as -mc68020 /tmp/cca26671.s -o test2.o
ld /lib/crt0.o /lib/Mcrt1.o test2.o /usr/staff/lib/gcc-gnulib -lc
>5> a.out
default
>6> gcc -O test2.c
>7> a.out
default
>8> gcc -S -g test2.c
>9> cat test2.s
#NO_APP
gcc_compiled.:
.stabs "test2.c",100,0,0,Ltext
Ltext:
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
.stabs "char:t2=r2;0;127;",128,0,0,0
.stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
.stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
.stabs "short int:t6=r1;-32768;32767;",128,0,0,0
.stabs "long long int:t7=r1;0;-1;",128,0,0,0
.stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
.stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
.stabs "signed char:t10=r1;-128;127;",128,0,0,0
.stabs "unsigned char:t11=r1;0;255;",128,0,0,0
.stabs "float:t12=r1;4;0;",128,0,0,0
.stabs "double:t13=r1;8;0;",128,0,0,0
.stabs "long double:t14=r1;8;0;",128,0,0,0
.stabs "void:t15=15",128,0,0,0
.text
LC0:
.ascii "five\12\0"
LC1:
.ascii "default\12\0"
.even
.globl _main
_main:
.stabd 68,0,3
link a6,#0
jra L4 <<<<<<<< should be jra L3
L3:
.stabd 68,0,4
pea LC0
jbsr _printf
.stabd 68,0,5
addqw #4,sp
jra L2
L4:
.stabd 68,0,6
pea LC1
jbsr _printf
.stabd 68,0,7
addqw #4,sp
jra L2
L2:
.stabd 68,0,9
L1:
unlk a6
rts
.stabs "main:F1",36,0,0,_main
>10>
------------------------------------------------------------------------
--
Piet van Oostrum, Dept of Computer Science, University of Utrecht
Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!hp4nl!ruuinf!piet)
Technical Details
Message-ID:
<1141@ruuinf.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!telly!attcan!dptcdc!jarvis.csri.toronto.edu!mailrus!ames!xanth!uunet!mcvax!hp4nl!ruuinf!pietShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!telly!attcan!dptcdc!jarvis.csri.toronto.edu!mailrus!ames!xanth!uunet!mcvax!hp4nl!ruuinf!piet From: piet@ruuinf (Piet van Oostrum) Newsgroups: gnu.gcc.bug Subject: bug in switch (constant) Summary: wrong code generated Message-ID: <1141@ruuinf.UUCP> Date: 16 Feb 89 16:53:22 GMT Sender: piet@ruuinf.UUCP Reply-To: piet@ruuinf (Piet van Oostrum) Organization: Dept of Computer Science, University of Utrecht, Holland Lines: 86