alexande@cs.unc.edu (Geoffrey D. Alexander) (01/13/90)
I have found a possible bug in the order constructor expressions are evaluated and assigned. This problem is illustrated by the following program. ====test3.c==================================================================== #include <stdio.h> typedef struct { double real; double imaginary; } complex; main() { complex x; complex y; x=(complex){1.0,1.0}; x=(complex){((x).real*(x).real)-((x).imaginary*(x).imaginary), ((x).real*(x).imaginary)+((x).real*(x).imaginary)} ; fprintf(stdout, "x=%lf", x.real); if (x.imaginary>=0.0) fprintf(stdout,"+"); fprintf(stdout, "%lfi\n", x.imaginary); x=(complex){1.0,1.0}; y=(complex){((x).real*(x).real)-((x).imaginary*(x).imaginary), ((x).real*(x).imaginary)+((x).real*(x).imaginary)} ; fprintf(stdout, "y=%lf", y.real); if (x.imaginary>=0.0) fprintf(stdout,"+"); fprintf(stdout, "%lfi\n", y.imaginary); exit(0); } =============================================================================== I compiled the program as follows: gcc test3.c -O -o test3 I get the following results: x=0.000000+0.000000i y=0.000000+2.000000i The value of y is correct, while the value of x is not. It seems that the assignment to x is using the newly computed value of x.real when computing x.imaginary. Is this the way it should work? I would prefer that it use the original value of x.real in computing x.imaginary. Any comments from other gcc users? Geoff Alexander