Article View: gnu.g++.bug
Article #489Assignment phase initialization broken with virtual base class
From: David Franke
Date: Tue, 10 Oct 1989 14:42
Date: Tue, 10 Oct 1989 14:42
80 lines
2527 bytes
2527 bytes
When "virtual public A" is replaced with "public A" in the
following source code, the program executes as intended.
With "virtual public A", the result is as shown below.
[2.51]lynx) cat test.cc
#include <stream.h>
class A {
int i;
public:
int j;
A(int val1, int val2) { i = val1; j = val2; }
virtual void describe();
};
class B : virtual public A {
public:
int k;
B(int i) : A(42,43) { k = i; }
virtual void describe();
};
void A::describe()
{
cout << "i = " << i << ", j = " << j << "\n";
}
void B::describe()
{
cout << "k = " << k << ", ";
this->A::describe();
}
A v1(10,20);
A *p1 = &v1;
B v3(30);
B *p3 = &v3;
main (int argc, char *argv[])
{
A v2(30,40);
A* p2 = &v2;
p1->describe();
p2->describe();
p3->describe();
}
[2.52]lynx) make -f test-makefile
/usr/local/gnu/1.36/bin/g++ -c -g -B/usr/local/gnu/1.36/lib/gcc- -I/usr/local/gnu/1.36/lib/g++-include -v test.cc -o test.o
gcc version 1.32
/usr/local/gnu/1.36/lib/gcc-cpp -+ -v -I/usr/local/gnu/1.36/lib/g++-include -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 test.cc /tmp/cca09791.cpp
GNU CPP version 1.36
/usr/local/gnu/1.36/lib/gcc-cc1plus /tmp/cca09791.cpp -quiet -dumpbase test.cc -g -version -o /tmp/cca09791.s
GNU C++ version 1.36.0- (based on GCC 1.35.99) (68k, MIT syntax) compiled by GNU C version 1.36.
default target switches: -m68020 -mc68020 -m68881 -mbitfield
/usr/local/gnu/1.36/lib/gcc-as -mc68020 /tmp/cca09791.s -o test.o
/usr/local/gnu/1.36/bin/g++ -g -B/usr/local/gnu/1.36/lib/gcc- -v test.o -o test; chmod 775 test
gcc version 1.32
/usr/local/gnu/1.36/lib/gcc-ld -o test -e start -dc -dp -Bstatic /lib/crt0.o /lib/Mcrt1.o -L/usr/local/gnu/1.36/lib test.o -lg++ /usr/local/gnu/1.36/lib/gcc-gnulib -lg -lc
[2.53]lynx) test
i = 10, j = 20
i = 30, j = 40
i = 131168, j = 43
David Franke, MCC CAD Program | ARPA: franke@mcc.com | Phone: [512] 338-3641
UUCP: {uunet,harvard,gatech,pyramid}!cs.utexas.edu!milano!cadillac!franke
Technical Details
Message-ID:
<3232@cadillac.CAD.MCC.COM>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!cs.utexas.edu!milano!cadillac!lynx!frankeShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!cs.utexas.edu!milano!cadillac!lynx!franke From: franke@lynx.cad.mcc.com (David Franke) Newsgroups: gnu.g++.bug Subject: Assignment phase initialization broken with virtual base class Message-ID: <3232@cadillac.CAD.MCC.COM> Date: 10 Oct 89 14:42:33 GMT Sender: news@cadillac.CAD.MCC.COM Lines: 80