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