rickc@agora.hf.intel.com (Rick Coates) (09/21/89)
Here is a small program that does some wrong things with structure passing. It compiles fine on both the Sun 3 (68xxx) and on the Sun 4 (SPARC RISC). What is interesting is that it also _runs_ fine on the Sun 4. It core dumps (as expected) on the second subroutine call on the Sun 3. Any explanations or comments? Rick Coates Consulting H/W - S/W engineer (Graphics - Sun - Unix - ASIC design - imbedded systems) ...!tektronix!tessi!agora!rickc main.c: struct x { int x; int y; int z; }; main() { struct x test; test.x = 111111; test.y = 222222; test.z = 333333; sub1(&test); /* this routine expects reference */ printf("z: %d\n",test.z); test.z = 333333; /* WRONG */ sub1(test); /* this routine expects reference */ printf("z: %d\n",test.z); test.z = 333333; /* WRONG */ sub2(&test); /* this routine expects structure */ printf("z: %d\n",test.z); test.z = 333333; sub2(test); /* this routine expects strucuture */ printf("z: %d\n",test.z); } sub.c: struct x { int x; int y; int z; }; sub1(st) struct x *st; { printf("x: %d y: %d\n",st->x,st->y); st->z = 666; } sub2(st) struct x st; { printf("x: %d y: %d\n",st.x,st.y); st.z = 666; } results: (comilation: cc -c main.c ; cc -c sub.c ; cc -o main main.o sub.o) (compiled on Sun 4 under SunOS v. 4.01) x: 111111 y: 222222 (passed as reference - used as reference) z: 666 x: 111111 y: 222222 (passed as value - used as reference) z: 333333 x: 111111 y: 222222 (passed as reference - used as value) z: 666 x: 111111 y: 222222 (passed as value - used as value) z: 333333