[comp.sys.sgi] problem with structures on a 4-D

kyriazis@rpics (George Kyriazis) (10/08/88)

	Hello.  I am transfering a program from a Sun4 to an 4-D and I have 
the following problem:  When I use a function that returns a structure as
an argument to another function, incorrect results appear.  Can anybody
help me?  A test program follows.  It works fine on a Sun4 (and Sun3).
Thanks.


-------------------------------
struct	vector {double x, y, z};

struct	vector	vadd(a,b)
struct	vector	a,b;
{
	struct	vector	c;

	c.x = a.x + b.x;
	c.y = a.y + b.y;
	c.z = a.z + b.z;

	return c;
}

struct	vector	svproduct(k, a)
double	k;
struct	vector	a;
{
	a.x *= k;
	a.y *= k;
	a.z *= k;

	return a;
}

main()
{
	struct	vector	a,b,c,d,aa,bb;
	double	sc;

	printf("v1: "); scanf("%lf %lf %lf", &a.x, &a.y, &a.z);
	printf("v2: "); scanf("%lf %lf %lf", &b.x, &b.y, &b.z);
	printf("scale: "); scanf("%lf", &sc);

	aa = svproduct(sc, a);
	bb = svproduct(sc, b);
	printf("a: %lf %lf %lf\n", aa.x, aa.y, aa.z);
	printf("b: %lf %lf %lf\n", bb.x, bb.y, bb.z);
	c = vadd(aa, bb);
	d = vadd(svproduct(sc,a),svproduct(sc,b));

	printf("%lf %lf %lf\n", c.x, c.y, c.z);
	printf("%lf %lf %lf\n", d.x, d.y, d.z);
}

Output is as follows:

v1: 1 0 0
v2: 0 1 0
scale: 2
a: 2.000000 0.000000 0.000000
b: 0.000000 2.000000 0.000000
2.000000 2.000000 0.000000
2.000000 2.000000 2.000000




  George Kyriazis
  kyriazis@turing.cs.rpi.edu
------------------------------

skinner@saturn.ucsc.edu (Robert Skinner) (10/12/88)

In article <1373@imagine.PAWL.RPI.EDU>, kyriazis@rpics (George Kyriazis) writes:
> 
> 	Hello.  I am transfering a program from a Sun4 to an 4-D and I have 
> the following problem:  When I use a function that returns a structure as
> an argument to another function, incorrect results appear.  Can anybody
> help me?  A test program follows.  It works fine on a Sun4 (and Sun3).
> Thanks.
> 

structure passing is broken in release 3.0.
it is fixed in 3.1.

Robert Skinner