This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/1702: virtual inheritance initialization bug



>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=

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]