home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / gnu / gcc / bug / 2828 < prev    next >
Encoding:
Text File  |  1992-11-24  |  1.9 KB  |  83 lines

  1. Newsgroups: gnu.gcc.bug
  2. Path: sparky!uunet!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!deshaw.com!christos
  3. From: christos@deshaw.com (Christos Zoulas)
  4. Subject: Argument passing bug in gcc-2.3.1 (sparc)
  5. Message-ID: <By75B7.144@deshaw.com>
  6. Keywords: sparc, arguments, double
  7. Sender: gnulists@ai.mit.edu
  8. Organization: D. E. Shaw & Co.
  9. Distribution: gnu
  10. Date: Tue, 24 Nov 1992 01:25:54 GMT
  11. Approved: bug-gcc@prep.ai.mit.edu
  12. Lines: 69
  13.  
  14. Hello,
  15.  
  16. The following program works correctly with sun's cc, but produces incorrect
  17. results with gcc.
  18.  
  19. % cc bug.c
  20. % a.out
  21.  0 0 1.2 1.2 1 0
  22.  
  23. % gcc -v bug.c
  24. Reading specs from /usr/local/lib/gcc-lib/sparc/2.3.1/specs
  25. gcc version 2.3.1
  26.  /usr/local/lib/gcc-lib/sparc/2.3.1/cpp -lang-c -v -undef -D__GNUC__=2 -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ -D__sparc -D__sun -D__unix bug.c /usr/tmp/cca03859.i
  27. GNU CPP version 2.3.1 (sparc)
  28.  /usr/local/lib/gcc-lib/sparc/2.3.1/cc1 /usr/tmp/cca03859.i -quiet -dumpbase bug.c -version -o /usr/tmp/cca03859.s
  29. GNU C version 2.3.1 (sparc) compiled by GNU C version 2.3.1.
  30.  as -o /usr/tmp/cca038591.o /usr/tmp/cca03859.s
  31.  /usr/local/lib/gcc-lib/sparc/2.3.1/ld -e start -dc -dp /lib/crt0.o -L/usr/local/lib/gcc-lib/sparc/2.3.1 -L/usr/local/lib /usr/tmp/cca038591.o -lgcc -lc -lgcc
  32. % a.out
  33.  0 0 4.24399e-315 1.2 1 0
  34.  
  35. % cat bug.c
  36. #include <stdio.h>
  37.  
  38.  
  39. struct x {
  40.    struct {
  41.     double b;
  42.     double a;
  43.    } q;
  44.    struct {
  45.     double m;
  46.    } p;
  47.    double nl;
  48.    double lo;
  49.    double in;
  50. };
  51.  
  52.  
  53. double f1(ip, d1, d2, d3)
  54.    struct x *ip;
  55.    double d1, d2, d3;
  56. {
  57.    return (d1 + 1.0) * d2 + d3 + 1.2;
  58. }
  59.  
  60.  
  61. double f2(d1, d2)
  62.    double d1, d2;
  63. {
  64.    return d1 * d2 + 1.0;
  65. }
  66.  
  67. struct x g;
  68.  
  69. main()
  70. {
  71.   struct x *ip = &g;
  72.  
  73.   (void)fprintf(stderr, " %g %g %g %g %g %.10g\n",
  74.                 ip->q.b, ip->q.a,
  75.                 f1(ip, 0.0, ip->p.m, 0.0),
  76.                 f1(ip, ip->p.m, 0.0, 0.0),
  77.                 f2(ip->nl, ip->lo),
  78.                 ip->in);
  79.   exit(0);
  80. }
  81.  
  82.  
  83.