rjc%castor.cognet.ucla.edu@CS.UCLA.EDU (Robert Collins) (12/06/89)
Michael, This one was buried in 10,000 lines of code...what a pain to find... Sun4/330 SunOS 4.0.3 Incorrect results are generated in the following program when compiled with -O. Here is a copy of the source file, compiled and run with -O, and compiled and run without -O. Have fun, rob rjc@cs.ucla.edu Script started on Tue Dec 5 16:27:23 1989 castor.cognet.ucla.edu% cat foo.cc #include <assert.h> unsigned builtin_alg = 1; unsigned num_algs = 3; unsigned alg1_initial_food(const unsigned gen) { unsigned amount = 1; #if 0 if ((rng->asLong() % 300) == 0) { amount = (rng->asLong() % 500) + 1; }; #endif return amount; } unsigned net_initial_food(const unsigned gen) { return 0; } unsigned alg2_initial_food(const unsigned gen) { return 0; } unsigned initial_food(const unsigned gen) return amount() { assert(builtin_alg < num_algs); switch (builtin_alg) { case 0: amount = net_initial_food(gen); break; case 1: amount = alg1_initial_food(gen); break; case 2: amount = alg2_initial_food(gen); break; default: assert(0); break; }; return /* amount */; } main() { assert(initial_food(0) == 1); } castor.cognet.ucla.edu% g++ -v -O foo.cc g++ version 1.36.2- (based on GCC 1.36) /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ -D__OPTIMIZE__ foo.cc /tmp/cca12490.cpp GNU CPP version 1.36 /usr/local/lib/gcc-cc1plus /tmp/cca12490.cpp -quiet -dumpbase foo.cc -O -version -o /tmp/cca12490.s GNU C++ version 1.36.2- (based on GCC 1.36) (sparc) compiled by GNU C version 1.36. default target switches: -mfpu -mepilogue /usr/local/lib/gcc-as -o foo.o /tmp/cca12490.s /usr/local/lib/gcc-ld -e start -dc -dp /lib/crt0.o foo.o -lg++ /usr/local/lib/gcc-gnulib -lc castor.cognet.ucla.edu% a.out Failed assertion initial_food(0) == 1 at line 51 of `foo.cc'. Abort (core dumped) castor.cognet.ucla.edu% g++ -v foo.cc g++ version 1.36.2- (based on GCC 1.36) /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ foo.cc /tmp/cca12496.cpp GNU CPP version 1.36 /usr/local/lib/gcc-cc1plus /tmp/cca12496.cpp -quiet -dumpbase foo.cc -version -o /tmp/cca12496.s GNU C++ version 1.36.2- (based on GCC 1.36) (sparc) compiled by GNU C version 1.36. default target switches: -mfpu -mepilogue /usr/local/lib/gcc-as -o foo.o /tmp/cca12496.s /usr/local/lib/gcc-ld -e start -dc -dp /lib/crt0.o foo.o -lg++ /usr/local/lib/gcc-gnulib -lc castor.cognet.ucla.edu% a.out castor.cognet.ucla.edu% ^D script done on Tue Dec 5 16:27:55 1989