From patchwork Mon Mar 11 16:53:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 1910516 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=BOaVyYSS; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TtjXP0ywWz1yWm for ; Tue, 12 Mar 2024 03:53:39 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1D3DC3858CD1 for ; Mon, 11 Mar 2024 16:53:36 +0000 (GMT) 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 43E2A3858CD1 for ; Mon, 11 Mar 2024 16:53:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 43E2A3858CD1 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 43E2A3858CD1 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=1710175997; cv=none; b=HPce6XJQFfqvvlrhnZYMbqhjJ6+8f/BuGAVUaSR68S2M3Hf8s8QhWCP+iEvYOitir7Nsd9WYOdUNncV0BTRA9M51kUxjOgMycebzcL8567jaMTZiy98/TaSdScPWqA2SmxiB9II5ghKOzCkSIABqapQTDR7BZIRMoevvoEFrj3Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710175997; c=relaxed/simple; bh=wziOX3oqoN5DsKw8ect2F0nhil+t5y7SGBVtOtHIrh8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=AxmoZduvBhcxhRdPDIthGfUnFsM5iHU+T/h9dWX8RZnyfYeGbrLIuyrvv/dbQ0iZkSfHUaXO2uXfOzgl0f9HSTE3h7b/du03dxcSJso4wcBhFFZWEtGAaA7k1ucbmp81k0z0nF5W3uQd5BFYY1aby7J5ZYqfsZepUjnqRCsA/z4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1710175996; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=QOUY5hBigNR0GtJUERTMkUlqMz0SmwIUVQgnkyzHcy8=; b=BOaVyYSSDOtUxungh+YTECGUU1doTPqYfKRjrpW/3fGOzosS7EzkJ5VVuzCtzfL2Ge8R6L P8wr+YWvrmpBGmtHg+aP4RIs1BIwQ6U98Ey5lIfQsP/7r8wPcn22tQV4aeruktfd8Y2Fhk /sgFlb1ynj1fExospxGfT3Rp3/t8yAQ= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-626-cghHNtqUPGGyFu-6IERgrg-1; Mon, 11 Mar 2024 12:53:11 -0400 X-MC-Unique: cghHNtqUPGGyFu-6IERgrg-1 Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-68f7572bc3dso72759126d6.0 for ; Mon, 11 Mar 2024 09:53:11 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710175990; x=1710780790; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QOUY5hBigNR0GtJUERTMkUlqMz0SmwIUVQgnkyzHcy8=; b=BI4qDmfD7Dca8AlqO5VFXh/QF8/EeS0jQp/k1qOYVvCYI7bKh6TIc9HxDu2SZS+Ma5 IddQ0tGGqSSDzZL6O5p8ZFPiBHg2suBUDkOY305FlsEwC8mwPvUv37FeQLV3im36+Esz FScxmIAeuCLpQmoZJNTTR7Bf9fyhoW9GTYpWoNYeR2SgcJiwdkd/ttCbiBY677TwufNL W06fM7NN2GziKduQhCOwvQ3BH4ja2XgZY1QxKaYS2Hk3sdSxwxB6vmCo4BfBVy2OiSoE tQnIpSsADjWdqcUbRIRjX5aMns0kM3F42wT+GqHKxtgtHW4RQzMcEfKSDxeX0Yix0Laz O6Ow== X-Gm-Message-State: AOJu0YzLJqsvcG+tQOVvFfGlVQ7Cfksme/R4GI2Ub0LzPZlyMrsbUURE S5kuKiKwtOuUIDOfyzdLTvV15bwmtzF819WVq+ZrMmTUNobnquuz5u5DyeGNDX6KN/Ekm/NLupg FgClKtO1Kk/yrQLrxzGO9cxqyzIGSe7bQW2kYLbhXN6iYzK8QJVUFWJC38qKi/7z7PmROcHUmbm gQpyDi3IwBj29SbN6ysbOQLRKQkVLkeuqfc2Ej X-Received: by 2002:a05:6214:1395:b0:690:a74c:ae0a with SMTP id pp21-20020a056214139500b00690a74cae0amr7933835qvb.0.1710175990439; Mon, 11 Mar 2024 09:53:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFdHfU/vVhdrV7P8JTmX5H42K1Y/o2yhYH/DlRqAsut+tnOmp05SnilH9j0IJ2um8E2iH8P1Q== X-Received: by 2002:a05:6214:1395:b0:690:a74c:ae0a with SMTP id pp21-20020a056214139500b00690a74cae0amr7933816qvb.0.1710175990152; Mon, 11 Mar 2024 09:53:10 -0700 (PDT) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id eu8-20020ad44f48000000b0068fcd643b9dsm2796476qvb.22.2024.03.11.09.53.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Mar 2024 09:53:09 -0700 (PDT) From: Patrick Palka To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com, Patrick Palka Subject: [PATCH] c++: recalculating local specs via build_extra_args [PR114303] Date: Mon, 11 Mar 2024 12:53:07 -0400 Message-ID: <20240311165307.3930810-1-ppalka@redhat.com> X-Mailer: git-send-email 2.44.0.165.ge09f1254c5 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-14.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_NONE, 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.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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for trunk and release branches? -- >8 -- r13-6452-g341e6cd8d603a3 made build_extra_args walk evaluated contexts first so that we prefer processing a local specialization in an evaluated context even if its first use is in an unevaluated context. But this means we need to avoid walking a tree that already has extra args/specs saved because the list of saved specs appears to be an evaluated context. It seems then that we should be calculating the saved specs from scratch each time, rather than potentially walking the saved specs list from an earlier partial instantiation when calling build_extra_args a second time around. PR c++/114303 gcc/cp/ChangeLog: * constraint.cc (tsubst_requires_expr): Clear REQUIRES_EXPR_EXTRA_ARGS before calling build_extra_args. * pt.cc (tsubst_stmt) : Call build_extra_args on the new IF_STMT instead of t which might already have IF_STMT_EXTRA_ARGS. gcc/testsuite/ChangeLog: * g++.dg/cpp1z/constexpr-if-lambda6.C: New test. --- gcc/cp/constraint.cc | 1 + gcc/cp/pt.cc | 2 +- .../g++.dg/cpp1z/constexpr-if-lambda6.C | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index 49de3211d4c..8a3b5d80ba7 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -2362,6 +2362,7 @@ tsubst_requires_expr (tree t, tree args, sat_info info) matching or dguide constraint rewriting), in which case we need to partially substitute. */ t = copy_node (t); + REQUIRES_EXPR_EXTRA_ARGS (t) = NULL_TREE; REQUIRES_EXPR_EXTRA_ARGS (t) = build_extra_args (t, args, info.complain); return t; } diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 8cf0d5b7a8d..37f2392d035 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -18718,7 +18718,7 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl) IF_COND (stmt) = IF_COND (t); THEN_CLAUSE (stmt) = THEN_CLAUSE (t); ELSE_CLAUSE (stmt) = ELSE_CLAUSE (t); - IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (t, args, complain); + IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (stmt, args, complain); add_stmt (stmt); break; } diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C new file mode 100644 index 00000000000..038c2a41210 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C @@ -0,0 +1,16 @@ +// PR c++/114303 +// { dg-do compile { target c++17 } } + +struct A { static constexpr bool value = true; }; + +int main() { + [](auto x1) { + return [&](auto) { + return [&](auto x3) { + if constexpr (decltype(x3)::value) { + static_assert(decltype(x1)::value); + } + }(A{}); + }(0); + }(A{}); +}