static initialization failure
John Cwikla
cwikla@wolfram.com
Sat Nov 28 22:15:00 GMT 1998
EGCS: egcs-2.92.21
OS : Linux misanthrope.brio.com 2.0.35
Options to egcs: None
This crashes in A's constructor as onlyBob is not initialized
on the Get() call. If you remove the intervening B superclass
from C, it works fine.
----
class A
{
A();
static A me;
};
A A::me;
class B
{
public:
B() {}
virtual void *allocme(int _size) = 0;
virtual void freeme(void *) = 0;
};
class C : public B
{
public:
C() {}
static C *Get();
void *allocme(int _size);
void freeme(void *);
private:
static C onlyBob;
};
A::A()
{
char *str;
B *asdf = C::Get();
str = (char *)asdf->allocme(60);
};
C C::onlyBob;
inline void *C::allocme(int _size)
{
return ::operator new(_size);
}
inline void C::freeme(void *fred)
{
::operator delete(fred);
}
inline C* C::Get()
{
return &onlyBob;
}
int main(int argc, char **argv)
{
C *fred;
char *ptr;
fred = C::Get();
ptr = (char*)fred->allocme(50);
}
----
Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/specs
gcc version egcs-2.92.21 19981118 (gcc2 ss-980609 experimental)
/usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=92 -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di586 -Dpentium -D__i586 -D__i586__ -D__pentium -D__pentium__ broken.cpp broken.ii
GNU CPP version egcs-2.92.21 19981118 (gcc2 ss-980609 experimental) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/../../../../include/g++-2
/usr/local/include
/usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/../../../../i586-pc-linux-gnu/include
/usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/include
/usr/include
End of search list.
/usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/cc1plus broken.ii -quiet -dumpbase broken.cc -version -o broken.s
GNU C++ version egcs-2.92.21 19981118 (gcc2 ss-980609 experimental) (i586-pc-linux-gnu) compiled by GNU C version egcs-2.92.21 19981118 (gcc2 ss-980609 experimental).
as -V -Qy -o broken.o broken.s
GNU assembler version 2.9.1 (i686-pc-linux-gnu), using BFD version 2.9.1.0.4
/usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/crtbegin.o -L/usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21 -L/usr/local/lib broken.o -lstdc++ -lm -lgcc -lc -lgcc /usr/local/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.92.21/crtend.o /usr/lib/crtn.o
More information about the Gcc-bugs
mailing list