[gnu.gcc.bug] Bug in struct passing

paul@UUNET.UU.NET (Paul Hudson) (02/15/89)

The following program should print

0 100 100 100 100 0

but instead prints

100 0 100 0 100 0 

(the last argument 3 times (?))

     struct p { float x, y; };
     struct p make_p(float x, float y)
     {
	 struct p r;
	 r.x = x;
	 r.y = y;
	 return r;
     }
     struct p return_p(struct p p)
     {
	 return p;
     }
     void print_p(struct p p1, struct p p2, struct p p3)
     {
	 printf("%g %g %g %g %g %g\n", p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
     }
     main()
     {
	 print_p(return_p(make_p(0.0, 100.0)),
		 return_p(make_p(100.0, 100.0)),
		 return_p(make_p(100.0, 0.0)));
     }


compiled with gcc -O. In general sparc gcc seems very fragile with struct args
and returns, which is unfortunate since that's the way I write code.

paul@UUNET.UU.NET (Paul Hudson) (02/15/89)

(Sorry - forgot my address previously)
The following program should print

0 100 100 100 100 0

but instead prints

100 0 100 0 100 0 

(the last argument 3 times (?))

     struct p { float x, y; };
     struct p make_p(float x, float y)
     {
	 struct p r;
	 r.x = x;
	 r.y = y;
	 return r;
     }
     struct p return_p(struct p p)
     {
	 return p;
     }
     void print_p(struct p p1, struct p p2, struct p p3)
     {
	 printf("%g %g %g %g %g %g\n", p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
     }
     main()
     {
	 print_p(return_p(make_p(0.0, 100.0)),
		 return_p(make_p(100.0, 100.0)),
		 return_p(make_p(100.0, 0.0)));
     }


compiled with gcc -O. In general sparc gcc seems very fragile with struct args
and returns, which is unfortunate since that's the way I write code.


Paul Hudson 

Snail mail: Monotype ADG	Email:	...!ukc!acorn!moncam!paul
	    Science Park,		paul@moncam.co.uk
	    Milton Road,	"Sun Microsysytems:
	    Cambridge,		 The Company is Arrogant (TM)"
	    CB4 4FQ