[gnu.g++.bug] virtual method in virtual base class bug.

newton%cadillac.cad.mcc.com@MCC.COM (Dave Newton) (01/16/90)

/*
Micheal,

  I'm having problems with virtuals methods in virtual base classes.
I've commented the code where the problem occurs -- uncommenting
"c.isA1();' segv's the compiler.

SUN3 (4.03)
g++-1.36.3 -v -g -O -o virtual1 virtual1.cc
g++ version 1.36.3 (based on GCC 1.36.92)
 /usr/local/gnu/1.36.3/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 virtual1.cc /usr/tmp/cca28135.cpp
GNU CPP version 1.36.92
 /usr/local/gnu/1.36.3/lib/gcc-cc1plus /usr/tmp/cca28135.cpp -quiet -dumpbase virtual1.cc -g -O -version -o /usr/tmp/cca28135.s
GNU C++ version 1.36.3 (based on GCC 1.36.92) (68k, MIT syntax) compiled by GNU C version 1.36.92.
default target switches: -m68020 -mc68020 -m68881 -mbitfield
 /usr/local/gnu/1.36.3/lib/gcc-as -mc68020 -o virtual1.o /usr/tmp/cca28135.s
 /usr/local/gnu/1.36.3/lib/gcc-ld -o virtual1 -e start -dc -dp -Bstatic /lib/crt0.o /lib/Mcrt1.o virtual1.o -lg++ /usr/local/gnu/1.36.3/lib/gcc-gnulib -lg -lc -lg -L/usr/lib/f68881


#include <stream.h>


class X {
public:
  X() {}
  virtual const char* isA1() const {return "X";}
};

class A : public X {
public:
  A() {}
  virtual const char* isA() const {return "A";}
  const char* isA1() const {return "A";}
};

class B : public virtual A {
public:
  B() {}
  const char* isA() const {return "B";}
  const char* isA1() const {return "B";}
};

class C : public B {
public:
  C() {}
  const char* isA() const {return "C";}
  const char* isA1() const {return "C";}
};

main() {
  C c;
  A* a = &c;
  cout << a->isA() << "\n";  // return "C" as I expected 
  cout << a->isA1() << "\n"; // return "A" not what I expected
//  c.isA1();		     // segv's the compile
}