Bug in invoking virtual functions in g++ 2.8.1/egcs 1.0.3 release
Jonathan Mohr
mohrj@Berio.Augustana.AB.CA
Wed Aug 5 17:30:00 GMT 1998
Subsequent to sending my previous message containing a simple example
illustrating what I take to be a bug in resolving the virtual overloading
of operator=, I found an even simpler example to illustrate the same bug.
When the following program is compiled on an i586 machine running Linux
with g++ version 2.7.2.3, it (correctly) invokes Derived::operator= and
reports that 'x' contains 2. However, when compiled on a Cyrix 6x86
machine running Linux with egcs-2.90.29 980515 (egcs-1.0.3 release),
it invokes Base::operator= and reports that 'x' contains 1.
Can anyone else duplicate this result? Is this actually a compiler bug,
or was there some change in standard C++ that makes this program illegal?
----------------------- snip ------------------------------------
//
// An even simpler test of virtual overloading of operator= in C++.
//
// Under g++ 2.7.2.3, this program properly shows that 'x' contains 2.
// Under egcs-2.90.29 980515 (egcs-1.0.3 release) [and g++ 2.8.1],
// the program shows 'x' as containing 1 (i.e., it executes virtual
// function Base::op= instead of Derived::op=).
//
// J. Mohr 1998 August 5
//
#include <iostream.h>
class Base
{
public:
Base() { value = 0; }
virtual void operator= ( Base& b ) { value = 1; }
int value;
};
class Derived : public Base
{
public:
virtual void operator= ( Base& b ) { value = 2; }
};
void main()
{
Derived x, d;
x = d;
cout << "x contains " << x.value << " (should be 2).\n";
}
----------------------- snip ------------------------------------
Sorry for the nuisance of sending the previous not-as-simple example.
Regards,
Jonathan Mohr
---
Jonathan Mohr, Associate Professor of Computing Science
Augustana University College, 4901-46 Ave., Camrose, AB, Canada T4V 2R3
E-mail: mohrj@augustana.ab.ca Phone: (403) 679-1514 Fax: (403) 679-1129
More information about the Gcc-bugs
mailing list