From patchwork Fri Mar 10 13:54:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 67408 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp883594wrd; Fri, 10 Mar 2023 05:55:17 -0800 (PST) X-Google-Smtp-Source: AK7set/4BAg/7vpW9xQzVSh7l+pI7SPdlgNDdSEZr039hiyY1Bz2jxo+FeCLQVYlNu/tWYq3mPqf X-Received: by 2002:a17:906:1410:b0:8f6:76da:90dd with SMTP id p16-20020a170906141000b008f676da90ddmr22580197ejc.64.1678456517364; Fri, 10 Mar 2023 05:55:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678456517; cv=none; d=google.com; s=arc-20160816; b=MmmPDBvHqlZ/lsSI8iPktC/KBi1nDuJlFupn5SW1wYYtEnqfxGtW8eEu52zUXypMjS rh8lD3jwa/7Pl5TNgBc9cZHdLY9ZGPO8LdTynSCitLXT4mTIwFrJO5rFL+abjY6DU5gC LSJTBqtgV9qCFJW8Dxa7SQtjbVCfKnetbkBMBW+4vTo6jMw2q8zRqxefeBUP8B/OR4Uz QC2pPSlUUi/sK3pDIF1PgU/oSL9jvIpOIgkSeAYE6lMZ41216SRXNUv0/hv+aZqSMOQG 65qrVCd6/PnJtt9uN/1nNxCAJEc+kX18PxTPhBHPYDN3PcQctUH2dYU6fQtWR8/G7oNI 6JaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:to :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=/7dEt8WDLOrmXKi8KP4Lg/eV/bN/pruX9yIkBxvIcMk=; b=p04Wu0+/94t6qOH7htO+LUXs1FUVII2aASu9faBXi42rxDmENFxKvJlGVEFHBwlrQH fEF2H9FTvDr4LXpxd7OgndoCzsAP4FAKjXffd3sS3tLeY6qB36qcanmkjJI7hS/GlclF OfMEE52E15Tai/Kw33Lo6rHSubestNl42FZAPKy5zysa2LqK55NdSoVCIE79k5FTwNvG HPjWxeEinfNrBlrXz16AT87hXGmI6RqCJg+H5VMcdHPh+dQyvg/mY51CFQYlJGXKypo2 GqW4gJzUDKQeYQR5Pz9SHvqLJuAjWWew/hvnxdOzc1JNS1/kirSjb0Kmg98eGuOxfaNR EF3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=tNYjRw+j; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id 1-20020a170906318100b008cf224f0cf5si2068651ejy.325.2023.03.10.05.55.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 05:55:17 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=tNYjRw+j; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A425E3858D3C for ; Fri, 10 Mar 2023 13:55:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A425E3858D3C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1678456511; bh=/7dEt8WDLOrmXKi8KP4Lg/eV/bN/pruX9yIkBxvIcMk=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=tNYjRw+jnV11v4Wmfgj7aQ51wfdo0B1nY3FN808M8Hu9EVcSE+7/enFJdbM82hlir kAqQ+MiQWqGZRlVQHqdLvutqp16C5KZ6eQIPGgcMT3Jl0xlxAq8AA89b1JOL8EOCwZ Wdh+P0Poak7x2WmdCbgq9qAUKYRBPTkAtO2u6je8= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id AC1603858D32 for ; Fri, 10 Mar 2023 13:54:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AC1603858D32 Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-194-pNtTsz_wN_Sr6cNZb3-r0A-1; Fri, 10 Mar 2023 08:54:26 -0500 X-MC-Unique: pNtTsz_wN_Sr6cNZb3-r0A-1 Received: by mail-qt1-f197.google.com with SMTP id br8-20020a05622a1e0800b003c0189c37e1so2904704qtb.18 for ; Fri, 10 Mar 2023 05:54:26 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678456465; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/7dEt8WDLOrmXKi8KP4Lg/eV/bN/pruX9yIkBxvIcMk=; b=3r6apET2NzvXPMuHyTzvhMSeiW64xv9MjoFHQD+sIJbWmGO1IJtHhXvQYrO2Ua85YN FEK0uXXrFOBqvOZEHrhMXp77w6HzyS7uVqpogcUSqPtf7LmaUbfIQoAXQartNOiZXa9b Wh22b83ho4321FfXP1Z29Zx7i4UJiom4cz8GYleskoHWQ9wICsyXTC+Q3Rmrxo6XElCr Zv6Fm6gSoxQ8n6pb4OtIPew9DlxXow/eyk2eNmZsAEZQZSgJkrM5gEZ7eT202DqSeKK0 nyhGTKGRXIKb6QIzsBrpt5rcJLp6fRbjrEzsVuBJxNTL5AMnZGzAVTzZhW+equ1XHros m1jw== X-Gm-Message-State: AO0yUKWGfxaTNeRW7Vnn3cLmABwhRjZP3CRVuLGIq9eycoK4aslSELnC x+GJmIy7dWryOchrUZbnmo14W8TMnCCDFfMBB8SKSwo6UyBoauEVOwQp+NZKwZ1HPxnYborvXlr pQ4c20d2FbewOE+vb5mEAJQP7HYkk2KfEyH8dO9HmgRHY9FK8MohBAE9nv60YUY1K+Tmirg+YuA == X-Received: by 2002:ac8:5f0d:0:b0:3bf:c423:c36d with SMTP id x13-20020ac85f0d000000b003bfc423c36dmr3757176qta.12.1678456465273; Fri, 10 Mar 2023 05:54:25 -0800 (PST) X-Received: by 2002:ac8:5f0d:0:b0:3bf:c423:c36d with SMTP id x13-20020ac85f0d000000b003bfc423c36dmr3757131qta.12.1678456464719; Fri, 10 Mar 2023 05:54:24 -0800 (PST) Received: from jason.com (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id d2-20020ac86142000000b003a81eef14efsm1422177qtm.45.2023.03.10.05.54.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 05:54:24 -0800 (PST) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: class NTTP and nested anon union [PR108566] Date: Fri, 10 Mar 2023 08:54:20 -0500 Message-Id: <20230310135420.2492295-1-jason@redhat.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759989221125484885?= X-GMAIL-MSGID: =?utf-8?q?1759989221125484885?= Tested x86_64-pc-linux-gnu, applying to trunk. -- 8< -- We were failing to come up with the name for the anonymous union. It seems like unfortunate redundancy, but the ABI does say that the name of an anonymous union is its first named member. PR c++/108566 gcc/cp/ChangeLog: * mangle.cc (anon_aggr_naming_decl): New. (write_unqualified_name): Use it. gcc/testsuite/ChangeLog: * g++.dg/abi/anon6.C: New test. --- gcc/cp/mangle.cc | 27 ++++++++++++++++++++++++++- gcc/testsuite/g++.dg/abi/anon6.C | 19 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/abi/anon6.C base-commit: 2fc55f51f9953b451d6d6ddfae23379001e6ac95 diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc index 242b3f31cba..a235f23459d 100644 --- a/gcc/cp/mangle.cc +++ b/gcc/cp/mangle.cc @@ -1389,6 +1389,28 @@ find_decomp_unqualified_name (tree decl, size_t *len) return p; } +/* "For the purposes of mangling, the name of an anonymous union is considered + to be the name of the first named data member found by a pre-order, + depth-first, declaration-order walk of the data members of the anonymous + union. If there is no such data member (i.e., if all of the data members in + the union are unnamed), then there is no way for a program to refer to the + anonymous union, and there is therefore no need to mangle its name." */ + +static tree +anon_aggr_naming_decl (tree type) +{ + tree field = next_aggregate_field (TYPE_FIELDS (type)); + for (; field; field = next_aggregate_field (DECL_CHAIN (field))) + { + if (DECL_NAME (field)) + return field; + if (ANON_AGGR_TYPE_P (TREE_TYPE (field))) + if (tree sub = anon_aggr_naming_decl (TREE_TYPE (field))) + return sub; + } + return NULL_TREE; +} + /* We don't need to handle thunks, vtables, or VTTs here. Those are mangled through special entry points. @@ -1432,7 +1454,10 @@ write_unqualified_name (tree decl) bool found = false; - if (DECL_NAME (decl) == NULL_TREE) + if (DECL_NAME (decl) == NULL_TREE + && ANON_AGGR_TYPE_P (TREE_TYPE (decl))) + decl = anon_aggr_naming_decl (TREE_TYPE (decl)); + else if (DECL_NAME (decl) == NULL_TREE) { found = true; gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl)); diff --git a/gcc/testsuite/g++.dg/abi/anon6.C b/gcc/testsuite/g++.dg/abi/anon6.C new file mode 100644 index 00000000000..7be0b0bbdb7 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/anon6.C @@ -0,0 +1,19 @@ +// PR c++/108566 +// { dg-do compile { target c++20 } } + +template +struct wrapper1 { + union { + union { + T RightName; + }; + }; +}; + +template void dummy(){} + +void uses() { + dummy{123.0}>(); +} + +// { dg-final { scan-assembler "_Z5dummyIXtl8wrapper1IdEtlNS1_Ut_Edi9RightNametlNS2_Ut_Edi9RightNameLd405ec00000000000EEEEEEvv" } }