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