From patchwork Wed Apr 13 14:18:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 52860 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 0AD603857830 for ; Wed, 13 Apr 2022 14:19:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0AD603857830 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1649859579; bh=Gsd6W4IhJfMZnKqu1DJ9WdRbKUt7nnkoNW1BVsmcpUE=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=jvHikFl9T1ZE0l0EFrRwv65xQ9QxAak3b1id7xoC77q7TcA74jk5L0FcbIHETbkSK aRVSfDyPSu7p6UoqAGxojtsqbh3ADZtd64u5KuhwUsUyiTvWHHsPXQqdsZferwmb/E 5maeg9VztHsfJ12Tm2YOhW/8AXEBqKuVgW1yEmEQ= 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.129.124]) by sourceware.org (Postfix) with ESMTPS id 86B473857350 for ; Wed, 13 Apr 2022 14:18:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 86B473857350 Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-505-lu0Edr4bM4e3vxyXPYYZ7A-1; Wed, 13 Apr 2022 10:18:23 -0400 X-MC-Unique: lu0Edr4bM4e3vxyXPYYZ7A-1 Received: by mail-qk1-f198.google.com with SMTP id ay14-20020a05620a178e00b0069a9c319c64so1234000qkb.3 for ; Wed, 13 Apr 2022 07:18:17 -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:subject:date:message-id:mime-version :content-transfer-encoding; bh=Gsd6W4IhJfMZnKqu1DJ9WdRbKUt7nnkoNW1BVsmcpUE=; b=Dq5ju6wQDlsuPg04SFr2w5w8XYGuWXVBiOePHh16+NJZ626+T0zzMZacPgrwiXYe+H +lf+rHe8cK1VQIp4HU71CrY4wyJAIwOOO/oaLVtqUN2wTfgpsI4gDrYS4SOiIKAZ/soo h7xCNx/7PmlQuakZQ0GTauH3GX8lkUsLPKENkT1Yf8kfKOiXiYxc7UA1851Rl1j1EwF0 X7UryjhhvnnasuONLcvFthC79ZzDc/iR6fnEGgC+zTky6HKA2TSBDZyhEW9DSaP+FIbS /CmTGDGUrDVg2/UlW8wCjvgu7IwI0n8l5MKz9RBI6CKOcGGM0icX27e3RVWgVFT9oXz/ F8HA== X-Gm-Message-State: AOAM532rdx7nUkbSiWroiV0za30qSAfQlatMO3fbYqytj2uyoi5XioSP TxQIc/UnKNstCXT4TtyJJKzLcQsJnNEKCxFWe6ZUhklzJ5Vl1VHej73x7vwCCE1Gk89r/IAJBN1 WbN6d+ztvjcgNby1xphntys+tuZVHUzkbHz69UXLqLrBNg9VYvqIwpHuwsUx+bgHaBg== X-Received: by 2002:a05:6214:1c8c:b0:440:da6b:a3dc with SMTP id ib12-20020a0562141c8c00b00440da6ba3dcmr8307038qvb.12.1649859496435; Wed, 13 Apr 2022 07:18:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyoSqQXCSVDz5LFcMb2/zJq5VEteqjJorDpa1mXUHpGzFEJIFmd2s0uvI4s30o6pFbsNVYnmQ== X-Received: by 2002:a05:6214:1c8c:b0:440:da6b:a3dc with SMTP id ib12-20020a0562141c8c00b00440da6ba3dcmr8306995qvb.12.1649859495934; Wed, 13 Apr 2022 07:18:15 -0700 (PDT) Received: from barrymore.redhat.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 g72-20020a379d4b000000b0069c0f9b1325sm6748747qke.21.2022.04.13.07.18.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 07:18:14 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: empty base constexpr -fno-elide-ctors [PR105245] Date: Wed, 13 Apr 2022 10:18:12 -0400 Message-Id: <20220413141812.3181344-1-jason@redhat.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-13.1 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_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The patch for 100111 extended our handling of empty base elision to the case where the derived class has no other fields, but we still need to make sure that there's some initializer for the derived object. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/105245 PR c++/100111 gcc/cp/ChangeLog: * constexpr.cc (cxx_eval_store_expression): Build a CONSTRUCTOR as needed in empty base handling. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/constexpr-empty2.C: Add -fno-elide-constructors. --- gcc/cp/constexpr.cc | 6 ++++++ gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C | 1 + 2 files changed, 7 insertions(+) base-commit: 31350635bfd90beea79b0e9220008da12bbb5d22 diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 1ce1842430d..b170053e8e1 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -5933,6 +5933,12 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t, { /* See above on initialization of empty bases. */ gcc_assert (is_empty_class (TREE_TYPE (init)) && !lval); + if (!*valp) + { + /* But do make sure we have something in *valp. */ + *valp = build_constructor (type, nullptr); + CONSTRUCTOR_NO_CLEARING (*valp) = no_zero_init; + } return init; } else diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C index 2acfa98364b..9768b89904e 100644 --- a/gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C +++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C @@ -1,4 +1,5 @@ // { dg-do compile { target c++14 } } +// { dg-additional-options -fno-elide-constructors } struct A {