vaughan%cadillac.cad.mcc.com@MCC.COM (Paul Vaughan) (12/08/89)
The code below causes the compiler (1.36.2) to bomb on a SUN3, I have no clue why. This example is derived from some of my code that failed after adding a virtual base class to what used to be the base class of the hierarchy. The really curious thing is that switching the order of defintion of two functions (both of which have already been declared) causes the compiler to work as expected. ----------------------------------- class Base { public: Base() {} protected: Base* base(); private: char* name(); }; class VBase : public Base { public: VBase() {} protected: VBase* vbase; private: char* name; }; class At : public virtual VBase { public: At() { } protected: At* at; private: int n; }; class FooAt : public At { public: FooAt() {} protected: FooAt* foo; private: int n; }; class Baz : public virtual VBase { public: Baz() {} protected: Baz* baz; private: int n; }; class AtBaz : public Baz { public: AtBaz() {} protected: AtBaz* Atbaz; private: int n; }; class Barf : public AtBaz { public: Barf() {} protected: Barf* barf; private: int n; }; class BarFooAt : public Barf, public FooAt{ public: BarFooAt(); protected: BarFooAt* barFooAt; private: int n; }; BarFooAt* newBarFooAt(); BarFooAt::BarFooAt() {} // if you switch this and the function below, it works fine BarFooAt* newBarFooAt() { return new BarFooAt; // line 81 } main() { } --------------------------- [1.1475]puma) g++-1.36.2 -v -g -O -DX11 -o vbase vbase.cc -lg++ -llwp -lX11 -lm g++ version 1.36.2- (based on GCC 1.36) /usr/local/gnu/1.36.2/lib/gcc-cpp -+ -v -DX11 -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 vbase.cc /usr/tmp/cca15245.cpp GNU CPP version 1.36 /usr/local/gnu/1.36.2/lib/gcc-cc1plus /usr/tmp/cca15245.cpp -quiet -dumpbase vbase.cc -g -O -version -o /usr/tmp/cca15245.s GNU C++ version 1.36.2- (based on GCC 1.36) (68k, MIT syntax) compiled by GNU C version 1.36. default target switches: -m68020 -mc68020 -m68881 -mbitfield vbase.cc: In function class BarFooAt *newBarFooAt (): vbase.cc:81: Segmentation violation g++-1.36.2: Program cc1plus got fatal signal 11.