From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19568 invoked by alias); 14 Nov 2001 02:26:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 19538 invoked by uid 71); 14 Nov 2001 02:26:00 -0000 Resent-Date: 14 Nov 2001 02:26:00 -0000 Resent-Message-ID: <20011114022600.19537.qmail@sourceware.cygnus.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, jamie@turbolabs.com Received:(qmail 18846 invoked by uid 61); 14 Nov 2001 02:18:42 -0000 Message-Id:<20011114021842.18845.qmail@sourceware.cygnus.com> Date: Fri, 02 Nov 2001 08:08:00 -0000 From: jamie@turbolabs.com Reply-To: jamie@turbolabs.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.2 (1.1.1.1.2.21) Subject: c++/4871: value argument destructor called twice when a virtual method is called in virtual inherited class X-SW-Source: 2001-11/txt/msg00060.txt.bz2 List-Id: >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 >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