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.133.124]) by sourceware.org (Postfix) with ESMTPS id CEFFB385B83B for ; Wed, 13 Dec 2023 16:47:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CEFFB385B83B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CEFFB385B83B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702486087; cv=none; b=hZuMp3nTldUKTaG0ouhlWSLrWAihU5hUWPHU/90gfLZTRDuPC/9jG4kSPsKum/VT6IqmnxOZLHQicRWfsIEElNRKiINjj7DgwZFHtzRhO9wNEFSE3bjrNm4iWtHOOHNIpflVWqqHvDdQToCkGFnhKiGS6DE7IVfJkfrpm5AORQA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702486087; c=relaxed/simple; bh=0E9LFn/SglZuGb13z3xxG0TTOEOuLJO4VKb4O14WoOc=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=VtaNhvnEs7fmcRGisJym9QtNyZRZbecBLxk7RvYyN7plktU5YZ6Zgj9Ck4Q3a83kxo+uK36B0PQxfIkiyXrcmZ1yofWz6EB3Ys9wSP21W/QW2Hm+gJqg1ms3dzpzqKIfQVqp1kjuKqsDF5pGWADFSH5yxWLqLl+hqggU7dBTLEs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1702486077; 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: in-reply-to:in-reply-to:references:references; bh=ZvHhUL+OxAp3TzVHkxcdE/nMPmQWK3POYOAnRiEhJtA=; b=dSd9BBEKpOGsE3q7DXHeF3tDcj1daaH8IUU3tKub8QY1dPSHLWQ1ce2L8go2CuiUtjGuoQ C5gLamfbTDGEBjxbs64zDVRZun3x9e8kM+PXBPwHTO8iarN3n6iCpGujf2eyk/se5R38pp QlIM3eAQEq9onk+LQP4HQ3qDHZnmPIY= Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-32-8Q5BSHwMMFi2PxYu3f9Cew-1; Wed, 13 Dec 2023 11:47:45 -0500 X-MC-Unique: 8Q5BSHwMMFi2PxYu3f9Cew-1 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-77f7ba27036so480726885a.1 for ; Wed, 13 Dec 2023 08:47:45 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702486064; x=1703090864; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZvHhUL+OxAp3TzVHkxcdE/nMPmQWK3POYOAnRiEhJtA=; b=ve7hTE0TGwQXrTBBCBj2JQUG80Ub3afVuj51PwJeCgk1GhOzIUTv9xib8UUH+AHv6x djrtmeCTbaU7AnhNaaM+gDrlhv8nYNHs21cQ89o0qHf3EvLSHMImIFuAmoZAHOtzdEJW 7p6+qQ05pPS6lwb4HxvzSj+tEfpcjpdqqVeNamybcBKsN68Ro2fvLIU1izBojINn19Mf //axeaumapFR8x0OkiUw+1J81g9dKYSs/S6ZdHbPc3EVIiC91pN1Mm6dH9/I7Jp9dXwS gf6qClM6KdyNiMtYuSc0r7NDQZqMTu+VWOfcav1trgLz1RwKYugxzk4I9s2S1P1trlDG nbvw== X-Gm-Message-State: AOJu0YyiMiyioID9GQG98Mx0wuMsSQfe+RRjbc5138brrNHV0UZb1ZIn hjnQbcpYda47+XqWXH4ZAcBKXCZUXgWG9eJLZv45TWlVvd8TmpbOCPwBBL3CyAeoUudxbgcvsga Kto85GUXoMDbc/bwY4nugyxYXbsmCBqyyxBRX6uZoMw5uYTA47yg3xPAxBhVNRqqWuSUr7IL5Tw == X-Received: by 2002:a05:620a:31aa:b0:77d:84d1:a594 with SMTP id bi42-20020a05620a31aa00b0077d84d1a594mr13402339qkb.10.1702486064683; Wed, 13 Dec 2023 08:47:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IHzuWHojoOjmn8OagboRACOKw2TkI6LZn1hSaYbzWoB69rpy4U8y1Krb9g2MJ+9wCGD6h2qsw== X-Received: by 2002:a05:620a:31aa:b0:77d:84d1:a594 with SMTP id bi42-20020a05620a31aa00b0077d84d1a594mr13402320qkb.10.1702486064241; Wed, 13 Dec 2023 08:47:44 -0800 (PST) Received: from jason.com (130-44-146-16.s12558.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.146.16]) by smtp.gmail.com with ESMTPSA id j25-20020a05620a0a5900b0077f37896f24sm4613249qka.97.2023.12.13.08.47.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Dec 2023 08:47:43 -0800 (PST) From: Jason Merrill To: gcc-patches@gcc.gnu.org Subject: [pushed 2/4] c++: constant direct-initialization [PR108243] Date: Wed, 13 Dec 2023 11:47:38 -0500 Message-Id: <20231213164740.1591535-2-jason@redhat.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231213164740.1591535-1-jason@redhat.com> References: <20231213164740.1591535-1-jason@redhat.com> 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.2 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_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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< -- When testing the proposed patch for PR71093 I noticed that it changed the diagnostic for consteval-prop6.C. I then noticed that the diagnostic wasn't very helpful either way; it was complaining about modification of the 'x' variable, but it's not a problem to initialize a local variable with a consteval constructor as long as the value is actually constant, we want to know why the value isn't constant. And then it turned out that this also fixed a missed-optimization bug in the testsuite. PR c++/108243 gcc/cp/ChangeLog: * constexpr.cc (cxx_eval_outermost_constant_expr): Turn a constructor CALL_EXPR into a TARGET_EXPR. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/consteval-prop6.C: Adjust diagnostic. * g++.dg/opt/is_constant_evaluated3.C: Remove xfails. --- gcc/cp/constexpr.cc | 16 +++++++++++++++- gcc/testsuite/g++.dg/cpp2a/consteval-prop6.C | 2 +- .../g++.dg/opt/is_constant_evaluated3.C | 8 ++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 58187a4fd12..4cf9dd71b05 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -8651,7 +8651,21 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, } if (!object) { - if (TREE_CODE (t) == TARGET_EXPR) + if (TREE_CODE (t) == CALL_EXPR) + { + /* If T is calling a constructor to initialize an object, reframe + it as an AGGR_INIT_EXPR to avoid trying to modify an object + from outside the constant evaluation, which will fail even if + the value is actually constant (is_constant_evaluated3.C). */ + tree fn = cp_get_callee_fndecl_nofold (t); + if (fn && DECL_CONSTRUCTOR_P (fn)) + { + object = CALL_EXPR_ARG (t, 0); + object = build_fold_indirect_ref (object); + r = build_aggr_init_expr (type, r); + } + } + else if (TREE_CODE (t) == TARGET_EXPR) object = TARGET_EXPR_SLOT (t); else if (TREE_CODE (t) == AGGR_INIT_EXPR) object = AGGR_INIT_EXPR_SLOT (t); diff --git a/gcc/testsuite/g++.dg/cpp2a/consteval-prop6.C b/gcc/testsuite/g++.dg/cpp2a/consteval-prop6.C index 93ed398d9bf..ca7db7c63d3 100644 --- a/gcc/testsuite/g++.dg/cpp2a/consteval-prop6.C +++ b/gcc/testsuite/g++.dg/cpp2a/consteval-prop6.C @@ -48,7 +48,7 @@ struct X { int a = sizeof(undef(0)); int x = undef(0); - X() = default; // { dg-error "modification of .x. is not a constant expression" } + X() = default; // { dg-error {'consteval int undef\(int\)' used before its definition} } }; void diff --git a/gcc/testsuite/g++.dg/opt/is_constant_evaluated3.C b/gcc/testsuite/g++.dg/opt/is_constant_evaluated3.C index 0a1e46e5638..783127cf909 100644 --- a/gcc/testsuite/g++.dg/opt/is_constant_evaluated3.C +++ b/gcc/testsuite/g++.dg/opt/is_constant_evaluated3.C @@ -17,7 +17,7 @@ int main() { } // { dg-final { scan-tree-dump "a1 = {\\.n=42, \\.m=0}" "original" } } -// { dg-final { scan-tree-dump "a2 = {\\.n=42, \\.m=0}" "original" { xfail *-*-* } } } -// { dg-final { scan-tree-dump "a3 = {\\.n=42, \\.m=0}" "original" { xfail *-*-* } } } -// { dg-final { scan-tree-dump "a4 = {\\.n=42, \\.m=0}" "original" { xfail *-*-* } } } -// { dg-final { scan-tree-dump "a5 = {\\.n=42, \\.m=0}" "original" { xfail *-*-* } } } +// { dg-final { scan-tree-dump "a2 = {\\.n=42, \\.m=0}" "original" } } +// { dg-final { scan-tree-dump "a3 = {\\.n=42, \\.m=0}" "original" } } +// { dg-final { scan-tree-dump "a4 = {\\.n=42, \\.m=0}" "original" } } +// { dg-final { scan-tree-dump "a5 = {\\.n=42, \\.m=0}" "original" } } -- 2.39.3