From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 AD4FD3858D39 for ; Fri, 22 Sep 2023 13:23:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AD4FD3858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695388990; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=MMpT3dUGV6ucszUM3ToqmcAuvbetNWgRf9C0bYpnKNY=; b=F6flYA6HIP7IswV0nH/9U3suqfV+2b5MKhRQtp+gDegVINsDsMVyYB70+f5AryV+Elt5Wk ESIuHqh5CVzhJ9ddGLJnVnDcDw6ON/tz+PzBEXWimmA2gGYW4VCHI8TtU4MTZHGVDWvOQT uk9RlYrak7tJ2iPNSac3UOrwxFwjFkg= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-49-GLuIxuHoMl-NgkJpvHaqdQ-1; Fri, 22 Sep 2023 09:23:08 -0400 X-MC-Unique: GLuIxuHoMl-NgkJpvHaqdQ-1 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-32310ab48f2so197373f8f.3 for ; Fri, 22 Sep 2023 06:23:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695388987; x=1695993787; 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=MMpT3dUGV6ucszUM3ToqmcAuvbetNWgRf9C0bYpnKNY=; b=JzbF5nf4OWOpMvHhp5e7ed5ZE4JYGsRRznolvkLBzVnJqh3RA5FVrPWgTJO7CqZ8W9 Oz78R8JHVJTcJWuJyuP7NJBEXeQiY3SADVY1Gm64VYFB1UGXm6qLotSAYd+X2SCmMJ6p wc+dYIMu2exOAA4P1FCfw6iBh+1tz3BSU7+CD2eDq6EN2A2DnX1Ks/YF0Jx64EB5XWXL ixLvJN5LdFKlUV393+Kph6Twfgdf+kWr6ke2lFmSQwf5eWipbdAAOTWhlyVg2NS8Y5+x +GVkz41VeNfGyAIvStj8zqKSg24mM1qU5tuJp6R1vzivjcld8csgE0+hw1tYK7ULY4u8 icMw== X-Gm-Message-State: AOJu0YzObvDzRl0YiQ8NMlMj/GgTYa8KRd9HQcnB6IcDyuMkiLvGOUcI 1M7dzXhXuf8rpxa7tWl5ja2NMSb/X5039whD+r7ZqHe2lQMh6LfsrAEkyhBZOmhCyo6Vdg8D5TH f5YfJuTvk8qV8Qm18q9BoRWj1xTMlK8T88wEccNRGXZQLB+oQlPxdGZVXgbvmbr+kG1pTLJiWLv Du X-Received: by 2002:adf:dd91:0:b0:321:6bed:1646 with SMTP id x17-20020adfdd91000000b003216bed1646mr7762438wrl.14.1695388987526; Fri, 22 Sep 2023 06:23:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFfQyUv2aQ820aH7+ZBlHS/phKsfmmMYTZXXOVYIbSS8XH8MN/YcnLRtnj+vCrQsW7rPxs7Zw== X-Received: by 2002:adf:dd91:0:b0:321:6bed:1646 with SMTP id x17-20020adfdd91000000b003216bed1646mr7762419wrl.14.1695388987045; Fri, 22 Sep 2023 06:23:07 -0700 (PDT) Received: from jason.com ([195.89.33.213]) by smtp.gmail.com with ESMTPSA id x8-20020adff0c8000000b0031f3780ce60sm4493670wro.7.2023.09.22.06.23.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Sep 2023 06:23:06 -0700 (PDT) From: Jason Merrill To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: constexpr and designated initializer Date: Fri, 22 Sep 2023 14:23:04 +0100 Message-Id: <20230922132304.263323-1-jason@redhat.com> X-Mailer: git-send-email 2.39.3 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-12.3 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_H4,RCVD_IN_MSPIKE_WL,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 List-Id: Tested x86_64-pc-linux-gnu, applying to trunk. -- 8< -- The change of active member being non-constant (before C++20) results in a CONSTRUCTOR with a null value for the first field, don't crash. gcc/cp/ChangeLog: * constexpr.cc (free_constructor): Handle null ce->value. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/constexpr-union7.C: New test. --- gcc/cp/constexpr.cc | 2 +- gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index a673a6022f1..2a6601c0cbc 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -1753,7 +1753,7 @@ free_constructor (tree t) { constructor_elt *ce; for (HOST_WIDE_INT i = 0; vec_safe_iterate (elts, i, &ce); ++i) - if (TREE_CODE (ce->value) == CONSTRUCTOR) + if (ce->value && TREE_CODE (ce->value) == CONSTRUCTOR) vec_safe_push (ctors, ce->value); ggc_free (elts); } diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C new file mode 100644 index 00000000000..230fa6e7d06 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C @@ -0,0 +1,6 @@ +// { dg-do compile { target c++14 } } +// { dg-options "" } + +union U { int i; float f; }; +constexpr auto g (U u) { return (u.i = 42); } // { dg-error "active member" "" { target c++17_down } } +static_assert (g({.f = 3.14}) == 42); // { dg-error "non-constant" "" { target c++17_down } } base-commit: 9c62af101e11e1cce573c2b3d2e18b403412dbc8 -- 2.39.3