Path: utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!usc!elroy.jpl.nasa.gov!jarthur!spectre.ccsf.caltech.edu!news From: edelsohn@groucho.tapir.Caltech.EDU (David Edelsohn) Newsgroups: gnu.gcc.bug Subject: gcc-1.37 bug printing structure members on DECstation 3100 Summary: values are corrupted and sometimes dependent on output redirection Keywords: mips decstation gcc-1.37 ntp Message-ID: <1990Feb22.031825.20590@spectre.ccsf.caltech.edu> Date: 22 Feb 90 03:18:25 GMT Sender: news@spectre.ccsf.caltech.edu Reply-To: edelsohn@groucho.tapir.Caltech.EDU (David Edelsohn) Distribution: na Organization: Theoretical Astrophysics, Caltech Lines: 97 Now that gcc-1.37 no longer assumes that the host's native compiler produces correct results for casts from unsigned long to double, ntp-3.4 (Network Time Protocol from the Universiy of Maryland) passes its self tests. However, the appended program demonstrates a problem experienced when using ntpdc: printf() output is incorrect for elements of structures and for functions acting on elements of structures. The results are always incorrect and are dependent on whether the output is sent to a terminal or to a file or pipe but are independent of shell used. Mips cc1.31 always produces the correct output. The results do not depend on whether optimization is enabled. Machine: DECstation 3100 Operating System: Ultrix 3.1/UWS 2.2 Configuration: config.gcc decstation Version: gcc-1.37 Appended is the output of a verbose gcc compilation, the output of the program to the terminal, the output of the program when redirected to a file, the verbose compilation by Mips cc1.31, the output of the Mips cc-compiled program, and finally the program listing. David =============================================================================== David Edelsohn CCSF/Theoretical Astrophysics INTERNET: edelsohn@tapir.Caltech.EDU 130-33 Caltech Pasadena, CA 91125 "It's only a dream away ..." -- from Time Bandits ending credits song "... Nature cannot be fooled." -- Richard Feynman -----appended text----- % gcc -v gccbug.c gcc version 1.37 /usr/gnu/lib/gcc-cpp -v -undef -D__GNUC__ -Dultrix -Dbsd4_2 -DMIPSEL -Dhost_mips -Dmips -Dunix -DR3000 -DLANGUAGE_C -DSYSTYPE_BSD -D__ultrix__ -D__bsd4_2__ -D__MIPSEL__ -D__host_mips__ -D__mips__ -D__unix__ -D__R3000__ -D__LANGUAGE_C__ -D__SYSTYPE_BSD__ gccbug.c /usr/tmp/cca20436.cpp GNU CPP version 1.37 /usr/gnu/lib/gcc-cc1 /usr/tmp/cca20436.cpp -quiet -dumpbase gccbug.c -version -o /usr/tmp/cca20436.s GNU C version 1.37 compiled by GNU C version 1.37. default target switches: -munix -mnofixed-ovfl -mG0 -mG1 (AL-MIPS 1.11) as -nocpp -G 8 -o gccbug.o /usr/tmp/cca20436.s ld -G 8 /lib/crt0.o gccbug.o /usr/gnu/lib/gcc-gnulib -lc /usr/gnu/lib/gcc-gnulib % a.out 7.97.215.131 0x83d76107 0x761d783 0x0 25.0.0.0 131.215.97.7 % a.out > bug.file % cat bug.file 7.97.215.131 0x83d76107 0x761d783 0x0 15.0.0.0 131.215.97.7 % cc -v gccbug.c /usr/lib/cpp1.31 -v gccbug.c -DLANGUAGE_C -DMIPSEL -I/usr/include1.31 > /tmp/ctmpa20496 0.1u 0.1s 0:00 79% 24+87k 0+2io 0pf+0w /usr/lib/ccom1.31 -Xv -EL -Xg0 -O1 -XS/tmp/ctmsta20496 < /tmp/ctmpa20496 > /tmp/ctmfa20496 ccom:main 0.1u 0.1s 0:00 60% 78+221k 0+4io 3pf+0w /usr/lib/ugen1.31 -v -G 8 -EL -g0 -O1 /tmp/ctmfa20496 -o /tmp/ctmca20496 -t /tmp/ctmsta20496 -temp /tmp/ctmgta20496 0.0u 0.0s 0:00 32% 78+59k 0+4io 3pf+0w /usr/lib/as11.31 -v -G 8 -p0 -EL -g0 -O1 /tmp/ctmca20496 -o gccbug.o -t /tmp/ctmsta20496 as1: main 0.0u 0.0s 0:00 20% 79+77k 0+2io 3pf+0w /usr/bin/ld1.31 -B1.31 -G 8 -g0 -nocount /usr/lib/crt0.o1.31 -count gccbug.o -nocount -lc 0.0u 0.2s 0:00 48% 66+179k 1+15io 4pf+0w % a.out 131.215.97.7 0x83d76107 0x761d783 0x761d783 131.215.97.7 131.215.97.7 /* program which produces incorrect printf() output when compiled using * gcc-1.37 on a DECstations 3100 */ #include #include #include #include #include #include struct sockaddr_in sin = {AF_INET}; void exit(int); void main() { unsigned long naddr, addr = 0x83d76107; sin.sin_addr.s_addr = htonl(addr); naddr = htonl(addr); printf("%-16.16s\n", inet_ntoa(sin.sin_addr)); printf("0x%x\t0x%x\t0x%x\n", addr, naddr, sin.sin_addr); printf("%-16.16s\n", inet_ntoa(sin.sin_addr)); printf("%-16.16s\n", inet_ntoa(naddr)); exit(0); }