| 
in the following, += and *= are miscompiled because an optimisation
is applied that only works if the left-hand side of the assignment
is floating point.
cat <<'!' >pt.c
typedef struct Point {int x, y;} Point;
#define	PI	3.1415626535
double cos(double), sin(double);
int print(char*, ...);
Point
circlept(Point c, int r, int degrees)
{
        double rad;
        rad = (double) degrees * PI/180.0;
        c.x += cos(rad)*r;
		c.x *= cos(rad)*r;
     	c.y -= sin(rad)*r;
        print("circlerad %d %d\n", c.x, c.y);
        return c;
}
!
 |