From patchwork Fri Mar 17 23:32:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 71520 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp40157wrt; Fri, 17 Mar 2023 16:33:46 -0700 (PDT) X-Google-Smtp-Source: AK7set9aduye+8dXhrXfaJkmV7qwGdHOh42DD5u41RjMFdlpiQBDvbFYfgb/ZKD+IE/KtDh4GDuu X-Received: by 2002:a17:906:bc87:b0:92e:3944:716d with SMTP id lv7-20020a170906bc8700b0092e3944716dmr975065ejb.3.1679096026815; Fri, 17 Mar 2023 16:33:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679096026; cv=none; d=google.com; s=arc-20160816; b=ve6ptuh6BMCDV36s3xaGmd33KezZWu0yuXH92Zdads2T605JcdqYmJLs7N41UdYPcQ WYvbxQ5c0GVc0N1dDkMJpfk9BA1sNL/izGqlttdYqa3GIizHe8bqr8bVKWX0u9igePkF Y1UzN1UHkhaPftvZ/3gSrNUYfjJOpONAk8GNzDA0qK0FomUjvz+pANsVN9SzfCTLUEqo 2EvsjEq7Lq/XNpiln9rHVPmPvRljIS2/X+jIhgY4/R3seiu56+DMwGGpsxTLzfvpN6fq TYIiRonMEU2wljd05MVqnzwMdVenUxbVMErxG6XTvDxAWpAS4LcVKip3ZKs1L/YzbLQI vBQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:to :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=34BGBRLzjV1pesQw+XkwYZsZFV4maHjkowZmx1LnG0s=; b=pDu22hcg6SLkxB/yJNCNaCAnwwovpW6ThUvsVq0ol8AQ1VfDmmQBu8pa8R2T0GXfpT ux31RMxykvICGhq50t7ZY2RHXMUWil/LHcB5yQHdir1KzP0g8dXaAuNylNyAhNNeXqwu OQsu917C3yN7PbmByfd992KnY8v7hXC93X7DzGvpB01sdcRI6SbiKWe2h5g46f68X3NR O6uW1t8WWhpTljxgfoL/V1yfvc9Bv7UQLlME5fJ9OjsjE9t2Kt407ED1U8S2oE2ybRn1 Aho+E/oiHzcHr44Blzkto6VcxLa3PvdbRScP5isXbp9tXyL2ZEv80WmNp8vQhmq+xXxf FKEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vdgAkodJ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id e26-20020a170906375a00b00927cbf235e7si3367343ejc.338.2023.03.17.16.33.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Mar 2023 16:33:46 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vdgAkodJ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 82F193858C50 for ; Fri, 17 Mar 2023 23:33:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 82F193858C50 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1679096023; bh=34BGBRLzjV1pesQw+XkwYZsZFV4maHjkowZmx1LnG0s=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=vdgAkodJkmoyXLEl6RPmcZ6HhwOHYq6v6eEWUywk3li44NqKLgQqZ2CxEqD4kwzpE pxfZRArvYEOJFE5IJr1tmND5k/BL9llamdgCIzfOzSzt5reLsg74USYqsazH3gHEd+ w18BU6/iALVm1Xg0XBaOIQvErPihrul1L9Ssckww= 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 D75C13858C50 for ; Fri, 17 Mar 2023 23:32:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D75C13858C50 Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-459-jIw93vA0PHGmKGJF19jI7w-1; Fri, 17 Mar 2023 19:32:54 -0400 X-MC-Unique: jIw93vA0PHGmKGJF19jI7w-1 Received: by mail-qv1-f71.google.com with SMTP id e1-20020a0cd641000000b005b47df84f6eso3607946qvj.0 for ; Fri, 17 Mar 2023 16:32:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679095973; 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=34BGBRLzjV1pesQw+XkwYZsZFV4maHjkowZmx1LnG0s=; b=J5Qo5alAgl6Ihe2RQS3ylIqqKfQk1NrUm0aigC1c8gZVMguMhD4ZmsK9D1WVkrgckO 7k8+NFVcuiVbpLIp+ooJjoWcCmltDky+tEIzcZy/FXxiSZAbi9DUmJewxYZWXQ8Flall 08bYHN3nu49Dth/revR8Xt+Cc/9iYiUIEZGciKWN+ntbqEsG/RzBeVp3Lp2qU9RSvUZ6 KooETEij7hcm5pSRl+t8jHKI+ZhzO3GqQhU378cdHY3nVM0dcG1YEjWTiB6SyKiEWiuw DFUtZFt3vOtIQycDaTImQx7+um+YmUxs+rDwpjF/LpfFWpWJLajZxoZMmhX6DGtEZQVs bilQ== X-Gm-Message-State: AO0yUKVAuhWs9ttcp3lbEwBJzl1izuteqHX5/E/qNLdB2GoPLPdl4ahy DczNw5+nyAkOMyWgZKFGF8D/NgELNGPinNxD3uWsirMhIvAwrAFTztyg6K+UwlF3/peMH1djgG5 plBY4oFjzicvZX/JIIFwIYkbJFxhTwxDfBmx6VI2B/uWikP8usOGHVtuAbT1fpfZycrX1kM/Jwg == X-Received: by 2002:a05:6214:2388:b0:56e:9551:1966 with SMTP id fw8-20020a056214238800b0056e95511966mr42195052qvb.3.1679095973130; Fri, 17 Mar 2023 16:32:53 -0700 (PDT) X-Received: by 2002:a05:6214:2388:b0:56e:9551:1966 with SMTP id fw8-20020a056214238800b0056e95511966mr42195034qvb.3.1679095972759; Fri, 17 Mar 2023 16:32:52 -0700 (PDT) Received: from jason.cygnus.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 z72-20020a37654b000000b0074283b87a4esm2574439qkb.90.2023.03.17.16.32.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Mar 2023 16:32:52 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: constant, array, lambda, template [PR108975] Date: Fri, 17 Mar 2023 19:32:49 -0400 Message-Id: <20230317233249.1406928-1-jason@redhat.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.6 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_H2, 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 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+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760659795307318603?= X-GMAIL-MSGID: =?utf-8?q?1760659795307318603?= Tested x86_64-pc-linux-gnu, applying to trunk. -- 8< -- When a lambda refers to a constant local variable in the enclosing scope, we tentatively capture it, but if we end up pulling out its constant value, we go back at the end of the lambda and prune any unneeded captures. Here while parsing the template we decided that the dim capture was unneeded, because we folded it away, but then we brought back the use in the template trees that try to preserve the source representation with added type info. So then when we tried to instantiate that use, we couldn't find what it was trying to use, and crashed. Fixed by not trying to prune when parsing a template; we'll prune at instantiation time. PR c++/108975 gcc/cp/ChangeLog: * lambda.cc (prune_lambda_captures): Don't bother in a template. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/lambda/lambda-const11.C: New test. --- gcc/cp/lambda.cc | 3 +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11.C | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11.C base-commit: 890043314a7f405081990ea9d0cb577dd44f883f diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc index 212990a21bf..9925209b2ed 100644 --- a/gcc/cp/lambda.cc +++ b/gcc/cp/lambda.cc @@ -1760,6 +1760,9 @@ prune_lambda_captures (tree body) if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam) == CPLD_NONE) /* No default captures, and we don't prune explicit captures. */ return; + /* Don't bother pruning in a template, we'll prune at instantiation time. */ + if (dependent_type_p (TREE_TYPE (lam))) + return; hash_map const_vars; diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11.C new file mode 100644 index 00000000000..26af75bf132 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11.C @@ -0,0 +1,14 @@ +// PR c++/108975 +// { dg-do compile { target c++11 } } + +template +void f() { + constexpr int dim = 1; + auto l = [&] { + int n[dim * 1]; + }; + // In f, we shouldn't actually capture dim. + static_assert (sizeof(l) == 1, ""); +} + +template void f();