g++ bug (egcs-2.91.02): static function disapears with -O3

Joseph Heled pepe@iconz.co.nz
Thu Jan 8 15:06:00 GMT 1998


uname -a: SunOS zeal 5.5 Generic sun4u sparc SUNW,Ultra-1

With -O3, egcs erroneously removes f(). (remove the const from a[] and all is
well)


C++ source:
==================================================
typedef void (*F)(void);

static void f(void) {}

static F const  // the offending const
a[] =
{
  f,
};


int
main()
{
  a[0]();
}
==================================================

compilation:
==================================================

/home/joseph/egcs/bin/g++  -v -Vegcs-2.91.02   b16.cc -O3 -o b16

Reading specs from
/home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/specs
gcc version egcs-2.91.02 971216 (gcc-2.8.0)
 /home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/cpp -lang-c++
-v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -Dsparc
-Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__
-D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__EXCEPTIONS
-D__OPTIMIZE__ -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) b16.cc
/var/tmp/cca002zk.ii
GNU CPP version egcs-2.91.02 971216 (gcc-2.8.0) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /home/joseph/egcs/include/g++
 /usr/local/include
 /home/joseph/egcs/sparc-sun-solaris2.5/include
 /home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/include
 /usr/include
End of search list.
 /home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/cc1plus
/var/tmp/cca002zk.ii -quiet -dumpbase b16.cc -O3 -version -o /var/tmp/cca002zk.s
GNU C++ version egcs-2.91.02 971216 (gcc-2.8.0) (sparc-sun-solaris2.5) compiled
by GNU C version egcs-2.90.20 971201 (gcc2-970802 experimental).
 /usr/ccs/bin/as -V -Qy -s -o /var/tmp/cca002zk1.o /var/tmp/cca002zk.s
/usr/ccs/bin/as: SC4.0 dev 15 Feb 1995
 /home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/ld -V -Y
P,/usr/ccs/lib:/usr/lib -Qy -o b16
/home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/crt1.o
/home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/crti.o
/usr/ccs/lib/values-Xa.o
/home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/crtbegin.o
-L/home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02
-L/home/joseph/egcs/sparc-sun-solaris2.5/lib -L/usr/ccs/bin -L/usr/ccs/lib
-L/home/joseph/egcs/lib /var/tmp/cca002zk1.o -lstdc++ -lm -lgcc -lc -lgcc
/home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/crtend.o
/home/joseph/egcs/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.91.02/crtn.o
ld: Software Generation Utilities (SGU) SunOS/ELF (LK-2.0 (S/I) - versioning)
Undefined			first referenced
 symbol  			    in file
f(void)                             /var/tmp/cca002zk1.o
ld: fatal: Symbol referencing errors. No output written to b16
collect2: ld returned 1 exit status

Compilation exited abnormally with code 1 at Fri Jan  9 11:56:40



More information about the Gcc-bugs mailing list