c++/4871: value argument destructor called twice when a virtual method is called in virtual inherited class
jamie@turbolabs.com
jamie@turbolabs.com
Fri Nov 2 07:35:00 GMT 2001
>Number: 4871
>Category: c++
>Synopsis: value argument destructor called twice when a virtual method is called in virtual inherited class
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Nov 13 18:26:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Jamie Painter <jamie@turboabs.com:>
>Release: gcc version 3.0.2
>Organization:
>Environment:
Linux
>Description:
When a method is called with a class argument passed by value, under certain conditions the value is destructed twice. The conditions seem to be related to the use of virtual inheritance, as demonstrated in the attached source.
>How-To-Repeat:
Compile (g++ gccbug.cpp),
run (./a.out).
Observe the output:
constructing ValueType 0xbffffa34
destructing ValueType 0xbffffa34
destructing ValueType 0xbffffa34
Note that the value parameter is constructed once and deconstructed twice.
Gcc 2.95.2 produces the correct output:
constructing ValueType 0xbffff8a4
destructing ValueType 0xbffff8a4
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="gccbug.cpp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gccbug.cpp"
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFZhbHVlVHlwZQp7CiAgVmFsdWVUeXBlKCkgIAog
IHsgCiAgICBzdGQ6OmNlcnIgPDwgImNvbnN0cnVjdGluZyAgVmFsdWVUeXBlICIgPDwgdGhpcyA8
PCBzdGQ6OmVuZGw7IAogIH0KICB+VmFsdWVUeXBlKCkgCiAgeyAKICAgIHN0ZDo6Y2VyciA8PCAi
ZGVzdHJ1Y3RpbmcgICBWYWx1ZVR5cGUgIiA8PCB0aGlzIDw8IHN0ZDo6ZW5kbDsgCiAgfQogIFZh
bHVlVHlwZShjb25zdCBWYWx1ZVR5cGUgJnYpCiAgewogICAgc3RkOjpjZXJyIDw8ICJjb3B5IGNv
bnN0cnVjdCBWYWx1ZVR5cGUgIiAKCSAgICAgIDw8IHRoaXMgPDwgIiBzcmM6ICIgPDwgJnYgIDw8
IHN0ZDo6ZW5kbDsKICB9Cn07CgpzdHJ1Y3QgQmFzZSAKewogIHZpcnR1YWwgfkJhc2UoKSB7fQog
IHZpcnR1YWwgdm9pZCBieVZhbHVlQ2FsbCggVmFsdWVUeXBlICkgPSAwOwp9OwoKc3RydWN0IERl
cml2ZWQgOiBwdWJsaWMgdmlydHVhbCBCYXNlIAp7CiAgdmlydHVhbCB+RGVyaXZlZCgpIHt9Cn07
CgpzdHJ1Y3QgQmFzZURlZiA6IHB1YmxpYyB2aXJ0dWFsIEJhc2UgCnsKICB2aXJ0dWFsIH5CYXNl
RGVmKCkge30KICB2b2lkIGJ5VmFsdWVDYWxsKCBWYWx1ZVR5cGUgKTsKfTsKCnN0cnVjdCBEZXJp
dmVkRGVmIDogcHVibGljIERlcml2ZWQsIHB1YmxpYyBCYXNlRGVmIAp7Cn07Cgp2b2lkIEJhc2VE
ZWY6OmJ5VmFsdWVDYWxsKCBWYWx1ZVR5cGUgdikKewp9CgoKaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIgKmFyZ3ZbXSkKewogIEJhc2UgKmIgPSBuZXcgRGVyaXZlZERlZjsKICBiLT5ieVZhbHVlQ2Fs
bCggVmFsdWVUeXBlKCkgKTsKICByZXR1cm4gMDsKfQoK
More information about the Gcc-bugs
mailing list