Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!nstn.ns.ca!news.cs.indiana.edu!att!ucbvax!GODZILLA.CGL.RMIT.OZ.AU!mg From: mg@GODZILLA.CGL.RMIT.OZ.AU (Mike Gigante) Newsgroups: comp.sys.sgi Subject: C compiler bug (optimizer), Irix 3.3.1 Message-ID: <9105021249.16330@godzilla.cgl.rmit.oz.au> Date: 3 May 91 03:49:42 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 79 In the following code: void drawbbox(struct bbox bb) { float v[7][3]; int i; /* * a close enough approximation... */ v[0][0] = bb.x1; v[0][1] = bb.y1; v[0][2] = bb.z1; v[1][0] = bb.x2; v[1][1] = bb.y1; v[1][2] = bb.z1; v[2][0] = bb.x2; v[2][1] = bb.y2; v[2][2] = bb.z1; v[3][0] = bb.x1; v[3][1] = bb.y2; v[3][2] = bb.z1; v[4][0] = bb.x1; v[4][1] = bb.y2; v[4][2] = bb.z2; v[5][0] = bb.x2; v[5][1] = bb.y2; v[5][2] = bb.z2; v[6][0] = bb.x2; v[6][1] = bb.y1; v[6][2] = bb.z2; (*) v[7][0] = bb.x1; v[7][1] = bb.y1; v[7][2] = bb.z2; (**) bgnclosedline(); for(i=0; i < 8; i++) v3f(v[i]); endclosedline(); } I get an incorrectly draw bbox. Ok, so I did the following: bgnclosedline(); for(i=0; i < 8; i++) { v3f(v[i]); printf("bbox: %f %f %f\n", v[i][0], v[i][1], v[i][2]); } endclosedline(); and lo and behold, it tells me that the Z value for the last point is wrong while for the second last point, it is correct. A quick look at the assignment code shows that in both positions, (see * & **), reveals that this should *not* happen. The cure was to declare v to be volatile v[8][3]; and change the v3f call to v3f((float *)v[i]); An alternative solution is to use -O0, but that doesn't appeal for other reasons :-) Mike Gigante, ACGC Royal Melbourne Institute of Technology