Sun4 C compiler generates bad code under strange conditions

Felix Lee flee at shire.cs.psu.edu
Thu Feb 9 13:38:21 AEST 1989


Compile and run the following (on a Sun4/260, SunOS4.0):

	main() { printf("%d %d\n", x(0), x(1)); }
	x(a) int a; { return (a==0) ? 99 : y() + y(); }
	y() { return 12; }

Curiously enough, it prints 0 and 12, instead of 99 and 24.  Looking at
the assembly code, the compiler is putting the intermediate return value
of x() into %i5, instead of somewhere useful, like %o0.

If you compile with at least -O2 optimization, it works correctly.
--
Felix Lee	flee at shire.cs.psu.edu	*!psuvax1!shire!flee

[[ Send it to Sun (if you haven't already)!  They'll see it someday.
--wnl ]]



More information about the Comp.sys.sun mailing list