[gnu.g++.bug] g++-1.36.2- -O bug

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