From patchwork Sun Aug 31 18:20:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 384555 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id E01001400E9 for ; Mon, 1 Sep 2014 04:21:12 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:content-type; q=dns; s=default; b=U6cPyvI6bQJN6vZc7T1/XVr1feT5kYifxIXtg1QJDua FQV+0EzC1iBbqb8SelKsYQnCOT/Xs/bGeddid5Upo3CrKO6XVLIQpPeQXz8tKQsj qW0mBjIsN/IRyxW39feuSNxTxph2CDbss/XDmJxonL2fXau/kSwjM2E3uCfxahrY = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:content-type; s=default; bh=GrTLWLHelM6e1YnyHm6e5UbLClo=; b=CH7D7HmIJ35J0HoeM Yyfhs+8rJmYHTtE6Q7xAiKHkw+hpIIwWxu21VuY5Zx4sizaeD/OUr5bhRFY8n1BO 3HIagXCdr+k9a4ECQ3iM0rYJvNOjYpRD/DVOjC7X95ZsgGXPypHAPbFoZmMS3uEC fBbHnUxTLo/TbmAwVgoVk5t0J8= Received: (qmail 8806 invoked by alias); 31 Aug 2014 18:21:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8556 invoked by uid 89); 31 Aug 2014 18:20:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.6 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Sun, 31 Aug 2014 18:20:54 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s7VIKrgh031625 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sun, 31 Aug 2014 14:20:53 -0400 Received: from [10.10.116.27] ([10.10.116.27]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s7VIKqpg016596; Sun, 31 Aug 2014 14:20:52 -0400 Message-ID: <54036781.3020002@redhat.com> Date: Sun, 31 Aug 2014 14:20:49 -0400 From: Jason Merrill User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.7.0 MIME-Version: 1.0 To: gcc-patches List CC: Jan Hubicka Subject: C++ PATCH for c++/62302 (wrong comdat group) Honza's earlier change to the assert at the end of cdtor_comdat_group was wrong; we really do need to make sure that we've created the '5' group that we want. This is complicated by the change to alias creation that automatically copies DECL_COMDAT_GROUP over, but since comdat groups are copied from DECL_ASSEMBLER_NAME anyway, we can just look there to find the names we want. Tested x86_64-pc-linux-gnu, applying to trunk. commit fad4e2d51d8773fb1297f51cc8771fd14635a4b0 Author: Jason Merrill Date: Fri Aug 29 17:23:14 2014 -0400 PR c++/62302 * optimize.c (cdtor_comdat_group): Just look at the DECL_ASSEMBLER_NAME of the 'tors. diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index f9a236e..31acb07 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -159,18 +159,12 @@ build_delete_destructor_body (tree delete_dtor, tree complete_dtor) static tree cdtor_comdat_group (tree complete, tree base) { - tree complete_name = DECL_COMDAT_GROUP (complete); - tree base_name = DECL_COMDAT_GROUP (base); + tree complete_name = DECL_ASSEMBLER_NAME (complete); + tree base_name = DECL_ASSEMBLER_NAME (base); char *grp_name; const char *p, *q; bool diff_seen = false; size_t idx; - if (complete_name == NULL) - complete_name = cxx_comdat_group (complete); - if (base_name == NULL) - base_name = cxx_comdat_group (base); - complete_name = DECL_ASSEMBLER_NAME (complete_name); - base_name = DECL_ASSEMBLER_NAME (base_name); gcc_assert (IDENTIFIER_LENGTH (complete_name) == IDENTIFIER_LENGTH (base_name)); grp_name = XALLOCAVEC (char, IDENTIFIER_LENGTH (complete_name) + 1); @@ -190,7 +184,7 @@ cdtor_comdat_group (tree complete, tree base) diff_seen = true; } grp_name[idx] = '\0'; - gcc_assert (diff_seen || symtab_node::get (complete)->alias); + gcc_assert (diff_seen); return get_identifier (grp_name); } diff --git a/gcc/testsuite/g++.dg/abi/comdat1.C b/gcc/testsuite/g++.dg/abi/comdat1.C new file mode 100644 index 0000000..e1025e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/comdat1.C @@ -0,0 +1,13 @@ +// PR c++/62302 + +// { dg-do compile { target *-*-*gnu* } } +// { dg-final { scan-assembler "_ZN3optIiED5Ev,comdat" } } +// { dg-final { scan-assembler-not "_ZN3optIiED0Ev,comdat" } } +// { dg-final { scan-assembler-not "_ZN3optIiED1Ev,comdat" } } +// { dg-final { scan-assembler-not "_ZN3optIiED2Ev,comdat" } } + +struct Option { + virtual ~Option() {} +}; +template class opt : public Option {}; +template class opt;