From patchwork Tue Sep 14 19:16:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 44997 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 97369385840F for ; Tue, 14 Sep 2021 19:17:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 97369385840F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1631647040; bh=Un7U5C+HWFp4QmWeIzkndkgsYEh4fTTMOLLH+EnS1jc=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=RI7svpJgW0Ssyrb80jMVlFEgCtZtu/gyaaVtUVvqy+852mLd2fE3tMB+IGgdh3LoO opzu4Dq6ulGT+hE8wJm1Xg2EY9F6n2PRvyI36cKWEH/eurHJnyqIu+LsUPIcwOOXYn 7Wj5ZYhqQQwxkQdwEeLLZz0Rkm6YwXPgoLDrWOPQ= 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 [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id AF07B3857C6C for ; Tue, 14 Sep 2021 19:16:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AF07B3857C6C Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-437-T_k0l0A9OWe_bGcmKvGaIg-1; Tue, 14 Sep 2021 15:16:33 -0400 X-MC-Unique: T_k0l0A9OWe_bGcmKvGaIg-1 Received: by mail-qv1-f70.google.com with SMTP id f14-20020a056214076e00b003773e95910bso839120qvz.4 for ; Tue, 14 Sep 2021 12:16:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Un7U5C+HWFp4QmWeIzkndkgsYEh4fTTMOLLH+EnS1jc=; b=DGyUq22YCtDpk2yvf5kk7AprU4go7QbqGlL0fS0yhU+Sb+NwrMglbxXDELjCq9cjJC 4evDJbPSr+lkgAX4D+ISeqtCaM5J9efHJ5rqjtn5e52LoG3j94B4fJr35IHM3jyuA5hb pst+PJaXbR8/AyU/Fiel/BCCCIXqIIB+sPW7YcbZdK4OGAQ+QjrEVokJWadkd3Ew1NOM ema2FhTBePdFInSwJbwaEmpzjcUpcZ/4ZOP0kFqleE4tlvb/XgmlvAnH5dQTVhB9ZQe+ +w8M2QU4WmXnI5mwtbwy9yTNVBaFMASVwX+e1Zwkg3cCAWMkK+NBpZ0u4eP/HJ++5wIK i1Pg== X-Gm-Message-State: AOAM533vKpRhKHOKMSl58JvamHnN9zQuWm4tI3bqiTo8/ZX9yKm4LQlM /7eS3rqn02ULmbGrJL/uGsW/Nwob/DZaqkJbsr25kX4pzfBinGJ0xQA94CaqssvxnGMjpmY4z+L Ls1uV1sBHZ9ThPAd4ywKwLolHk38pa1F46Af6CI8thy3zO+3n8fgMnapj7NudU1kmc5E= X-Received: by 2002:ac8:744e:: with SMTP id h14mr6447655qtr.252.1631646992598; Tue, 14 Sep 2021 12:16:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy/YmYq7iw5Z+oeWaCITxk2o42XoPN5t+euSKgh5R+4iVEGc1HLr0XalHv1tK7aG8wF6pYcow== X-Received: by 2002:ac8:744e:: with SMTP id h14mr6447625qtr.252.1631646992246; Tue, 14 Sep 2021 12:16:32 -0700 (PDT) Received: from localhost.localdomain (ool-457d493a.dyn.optonline.net. [69.125.73.58]) by smtp.gmail.com with ESMTPSA id e25sm8235177qka.83.2021.09.14.12.16.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Sep 2021 12:16:31 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH] c++: default ctor that's also a list ctor [PR102050] Date: Tue, 14 Sep 2021 15:16:24 -0400 Message-Id: <20210914191624.927175-1-ppalka@redhat.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-16.0 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_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Patrick Palka via Gcc-patches From: Patrick Palka Reply-To: Patrick Palka Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" In grok_special_member_properties we need to set TYPE_HAS_COPY_CTOR, TYPE_HAS_DEFAULT_CONSTRUCTOR and TYPE_HAS_LIST_CTOR independently from each other because a single constructor can be both a default and list constructor (as in the first testcase), or both a default and copy constructor (as in the second testcase). Bootstrapped and regtested on x86_64-pc-linux-gsu, does this look OK for trunk? PR c++/102050 gcc/cp/ChangeLog: * decl.c (grok_special_member_properties): Set TYPE_HAS_COPY_CTOR, TYPE_HAS_DEFAULT_CONSTRUCTOR and TYPE_HAS_LIST_CTOR independently from each other. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/initlist125.C: New test. * g++.dg/cpp0x/initlist126.C: New test. --- gcc/cp/decl.c | 6 ++++-- gcc/testsuite/g++.dg/cpp0x/initlist125.C | 10 ++++++++++ gcc/testsuite/g++.dg/cpp0x/initlist126.C | 17 +++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist125.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist126.C diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 1a2925b4108..76e4e6e8a26 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -14843,9 +14843,11 @@ grok_special_member_properties (tree decl) if (ctor > 1) TYPE_HAS_CONST_COPY_CTOR (class_type) = 1; } - else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl))) + + if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl))) TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1; - else if (is_list_ctor (decl)) + + if (is_list_ctor (decl)) TYPE_HAS_LIST_CTOR (class_type) = 1; if (DECL_DECLARED_CONSTEXPR_P (decl) diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist125.C b/gcc/testsuite/g++.dg/cpp0x/initlist125.C new file mode 100644 index 00000000000..08ae3741c67 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist125.C @@ -0,0 +1,10 @@ +// PR c++/102050 +// { dg-do compile { target c++11 } } + +#include + +struct A { A(std::initializer_list = {}); }; + +A x{0}; +A y{1, 2, 3}; +A z; diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist126.C b/gcc/testsuite/g++.dg/cpp0x/initlist126.C new file mode 100644 index 00000000000..0a8fb998be6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist126.C @@ -0,0 +1,17 @@ +// PR c++/102050 +// { dg-do compile { target c++11 } } + +#include + +extern struct A a; + +struct A { + A(const A& = a); + A(std::initializer_list) = delete; +}; + +void f(A); + +int main() { + f({}); // { dg-bogus "deleted" } +}