This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
c++/1702: virtual inheritance initialization bug
- To: gcc-gnats at gcc dot gnu dot org
- Subject: c++/1702: virtual inheritance initialization bug
- From: degreef at imec dot be
- Date: 19 Jan 2001 16:50:49 -0000
- Reply-To: degreef at imec dot be
>Number: 1702
>Category: c++
>Synopsis: virtual inheritance initialization bug
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: wrong-code
>Submitter-Id: net
>Arrival-Date: Fri Jan 19 08:56:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Eddy De Greef
>Release: g++ version 2.95.3 20010112 (prerelease test2)
>Organization:
>Environment:
Redhat 6.2 - Linux version 2.2.14
glibc-2.1.3
>Description:
During the initialization of a class in a relatively
simple (virtual) inheritance tree, a virtual base
class is seemingly not initialized in time. See the
attachment for more information.
This is reproducable on Redhat 6.2 (also with egcs 1.1.2
and gcc 2.95.2), but _not_ on HP-UX (2.95.2),
nor on Solaris 2.6 (2.95.2), so it seems to be x86 specific.
>How-To-Repeat:
edg> g++ virt-inh-bug.C
egg> ./a.out
B::data(): 12345 OK
((A&)B)::data(): 1 ERROR!!!
C::data(): 12345 OK
((A&)C)::data(): 12345 OK
When trying to access the data member via a virtual
function during the construction of B, it is not
accessible, despite the fact that B should be fully
functional already.
After the initialization of C has been completed,
everything works fine.
>Fix:
Removing the data member of class C, or switching to
non-virtual inheritance works, but that is not an option
for me.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="virt-inh-bug.C"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="virt-inh-bug.C"
I2luY2x1ZGUgPHN0ZGlvLmg+CgpjbGFzcyBBCnsKICBwdWJsaWM6CiAgIAogIEEoKSB7fQogIHZp
cnR1YWwgaW50IGRhdGEoKSA9IDA7Cn07CgpjbGFzcyBCOiB2aXJ0dWFsIHB1YmxpYyBBIC8qIEEg
bXVzdCBiZSBhIHZpcnR1YWwgYmFzZSBjbGFzcyAqLwp7CiAgcHVibGljOgoKICBCKCkKICB7CiAg
ICAgYl9kYXRhID0gMTIzNDU7CiAgICAgcHJpbnRmKCJCOjpkYXRhKCk6ICAgICAgICVkIE9LXG4i
LCBkYXRhKCkpOwogICAgIAogICAgIC8vCiAgICAgLy8gRHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24g
b2YgYW4gaW5zdGFuY2Ugb2YgQiwgaXQgaXMgYWxyZWFkeSBhIAogICAgIC8vIHBlcmZlY3RseSB2
YWxpZCBpbnN0YW5jZSBvZiBBLCBzbyB0aGlzIGNhbGwgc2hvdWxkIHJldHVybiBleGFjdGx5CiAg
ICAgLy8gdGhlIHNhbWUgcmVzdWx0LiBVbmZvcnR1bmF0ZWx5LCBpdCBkb2Vzbid0IHdoZW4gdGhl
ICJkdW1teV9kYXRhIiAKICAgICAvLyBkYXRhIG1lbWJlciBpcyBwcmVzZW50IGluIEMKICAgICAv
LwogICAgIAogICAgIHByaW50ZigiKChBJilCKTo6ZGF0YSgpOiAlZCAgICAgRVJST1IhISFcbiIs
ICgoQSopdGhpcyktPmRhdGEoKSk7CiAgfQoKICB2aXJ0dWFsIGludCBkYXRhKCkgeyByZXR1cm4g
Yl9kYXRhOyB9CiAgCiAgaW50IGJfZGF0YTsKfTsKCmNsYXNzIEM6IHB1YmxpYyBCCnsKICBwdWJs
aWM6CgogIEMoKSA6IEEoKSwgQigpIHt9CgogIC8vCiAgLy8gV2l0aG91dCB0aGlzIGRhdGEgbWVt
YmVyLCBldmVyeXRoaW5nIGdvZXMgZmluZS4gCiAgLy8gV2hlbiBpdCBpcyBwcmVzZW50LCBpdCBz
ZWVtcyB0byBtZXNzIHVwIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgCiAgLy8gdmlydHVhbCBm
dW5jdGlvbiB0YWJsZXMuCiAgLy8KCiAgaW50IGR1bW15X2RhdGE7Cn07CgppbnQgbWFpbigpCnsK
ICAgQyBjOwogICBwcmludGYoIkM6OmRhdGEoKTogICAgICAgJWQgT0tcbiIsIGMuZGF0YSgpKTsK
ICAgcHJpbnRmKCIoKEEmKUMpOjpkYXRhKCk6ICVkIE9LXG4iLCAoKEEmKWMpLmRhdGEoKSk7CiAg
IHJldHVybiAwOwp9Cgo=