Article View: gnu.gcc.bug
Article #2717gcc-1.35 bug
From: Mark Mills
Date: Thu, 01 Jun 1989 18:50
Date: Thu, 01 Jun 1989 18:50
185 lines
3710 bytes
3710 bytes
I have found what appears to be a bug in gcc-1.35. However,
it is such a simple thing surely it is not. Here are some
examples which demonstrate the "bug". Each was compiled
with: gcc -O e1.c. (The as listings by: gcc -O -S e1.c)
This gcc was brought up on a R3V5.1 Unix system using pcc.
I am using the native as and ld. The processor is 68030/68882.
This same R3V5.1/pcc compiles and runs TeX, X11, etc, so I
believe that much is ok. Gcc compiled itself fine during
stage1 build, except c-parse.tab.c, expr.c and insn-recog.c
would not compile with both -g and -O options. Either just
-g or -O worked fine by itself. These modules were built with
-g for the stage1 build. The stage1 build was what was used
to generate the sequences below.
It would be nice if there was a gcc test suite that had
known programs to test against. Know you always wonder whether
it is gcc or your "port" which is causing the problems.
Regards and keep up the good work,
Mark Mills
---
mark@motcoh.UUCP
{osu-cis, mcdchg}!motcoh!mark
=================== Example 1 =========================
main()
{
float M;
int N;
N = 1000000;
M = (float)N;
printf ("M = %e\n",M);
printf ("N = %e\n",(float)N);
}
M = 1.000000e+06
N = 1.000000e+06
text
L%C0:
byte 77,32,61,32,37,101,10,0
L%C1:
byte 78,32,61,32,37,101,10,0
even
global main
main:
link.w %a6,&0
fmovem &0x4,-(%sp)
mov.l %d2,-(%sp)
fmove.l &1000000,%fp2
fmove.d %fp2,-(%sp)
pea L%C0
move.l &printf,%d2
move.l %d2,%a0
jsr (%a0)
fmove.d %fp2,-(%sp)
pea L%C1
move.l %d2,%a0
jsr (%a0)
mov.l -16(%a6),%d2
fmovm.x -12(%a6),&0x20
unlk %a6
rts
================= Example 2 ======================
main()
{
float M;
int N;
N = 1000000;
M = 1000000.0;
printf ("M = %e\n",M);
printf ("N = %e\n",(float)N);
}
M = 0.000000e+00
N = 1.000000e+06
text
L%C0:
byte 77,32,61,32,37,101,10,0
L%C1:
byte 78,32,61,32,37,101,10,0
even
global main
main:
link.w %a6,&0
movm.l &0x3000,-(%sp)
move.l &1000000,%d2
fmove.s &0x0,%fp1
fmove.d %fp1,-(%sp)
pea L%C0
move.l &printf,%d3
move.l %d3,%a0
jsr (%a0)
fmove.l %d2,%fp0
fmove.d %fp0,-(%sp)
pea L%C1
move.l %d3,%a0
jsr (%a0)
movm.l -8(%a6),&0xc
unlk %a6
rts
================ Example 3 ==================
main()
{
float M;
int N;
N = 1000000;
M = 1.0e+06;
printf ("M = %e\n",M);
printf ("N = %e\n",(float)N);
}
Produces the same printf output and identical asm code.
================== Example 4 ======================
#define M 1000000.0
main()
{
printf ("M = %e\n",M);
}
M = 1.000000e+06
text
L%C0:
byte 77,32,61,32,37,101,10,0
even
global main
main:
link.w %a6,&0
clr.l -(%sp)
move.l &1093567616,-(%sp)
pea L%C0
jsr printf
unlk %a6
rts
================= Example 5 ==================
#define M 1000000.0
main()
{
long num = 50;
float oops;
oops = num * M;
printf ("oops = %e\n",oops);
}
oops = 4.275000e+04
text
L%C0:
byte 111,111,112,115,32,61,32,37
byte 101,10,0
even
global main
main:
link.w %a6,&0
fmove.l &50,%fp0
fmul.d &0x408ab800000000,%fp0
fmove.s %fp0,%d0
fmove.s %d0,%fp1
fmove.d %fp1,-(%sp)
pea L%C0
jsr printf
unlk %a6
rts
Technical Details
Message-ID:
<8906011450.AA20169@motcoh.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!watmath!uunet!tut.cis.ohio-state.edu!AI.MIT.EDU!motcoh!markShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!watmath!uunet!tut.cis.ohio-state.edu!AI.MIT.EDU!motcoh!mark From: motcoh!mark@AI.MIT.EDU (Mark Mills) Newsgroups: gnu.gcc.bug Subject: gcc-1.35 bug Message-ID: <8906011450.AA20169@motcoh.UUCP> Date: 1 Jun 89 18:50:56 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 185