Date: Tue, 24 Mar 1998 09:44:04 -0800 (PST) From: Tom Bartol <bartol@salk.edu> To: freebsd-current@FreeBSD.ORG Subject: gcc bug in -current!!! Message-ID: <Pine.BSF.3.96.980324090529.2860C-100000@dale.salk.edu>
next in thread | raw e-mail | index | archive | help
Hi all,
I just found and narrowed down the following bug in gcc in -current after
a cvsup and make world as of Mon Mar 23 12:14:55 PST. This bug appears to
have crept in sometime between then and Feb 14. Included below is a small
program which demonstrates the bug along with output from the program
compiled on yesterday's -current and Feb. 14 -current. It appears to be a
bug with the handling of the sign bit in static unsigned int quantities.
Note the incorrect sign of the double-precision values in the printout and
how the sign changes anomalously when cc and then cc -O is used for
the compilation on yesterday's -current. I thought I should report this
right away since compiler bugs can have nasty effects especially when you
use it to rebuild your whole system :-(
Thanks,
Tom
Here is the program:
#include <stdio.h>
main()
{
double d1,d2,d3,d4;
static unsigned int c1 = 0x80000000;
unsigned int c2 = 0x80000000;
static unsigned int c3 = 0x40000000;
unsigned int c4 = 0x40000000;
d1=c1;
d2=c2;
d3=c3;
d4=c4;
printf("c1 = %x c2 = %x\n",c1,c2);
printf("d1 = %12.9e d2 = %12.9e\n",d1,d2);
printf("\nc3 = %x c4 = %x\n",c3,c4);
printf("d3 = %12.9e d4 = %12.9e\n",d3,d4);
exit(0);
}
Here is the output after compiling on yesterday's -current using cc with
no compiler flags:
c1 = 80000000 c2 = 80000000
d1 = -2.147483648e+09 d2 = -2.147483648e+09
c3 = 40000000 c4 = 40000000
d3 = 1.073741824e+09 d4 = 1.073741824e+09
Here is the output after compiling on a Feb 14 -current using cc with no
compiler flags:
c1 = 80000000 c2 = 80000000
d1 = 2.147483648e+09 d2 = 2.147483648e+09
c3 = 40000000 c4 = 40000000
d3 = 1.073741824e+09 d4 = 1.073741824e+09
Here is the output after compiling on a yesterday's -current using cc -O:
c1 = 80000000 c2 = 80000000
d1 = -2.147483648e+09 d2 = 2.147483648e+09
c3 = 40000000 c4 = 40000000
d3 = 1.073741824e+09 d4 = 1.073741824e+09
Here is the output after compiling on a Feb 14 -current using cc -O:
c1 = 80000000 c2 = 80000000
d1 = 2.147483648e+09 d2 = 2.147483648e+09
c3 = 40000000 c4 = 40000000
d3 = 1.073741824e+09 d4 = 1.073741824e+09
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.980324090529.2860C-100000>
