From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2122) id B3441392AC23; Mon, 12 Sep 2022 17:50:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B3441392AC23 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1663005051; bh=Ar1OxjdjUl3X0XAmZyTLyxAvOvjxcO6M37rbGhb8lQ8=; h=From:To:Subject:Date:From; b=nR+h1vxo7X/0ZEztoi8ixw8VVEBIy6chFzdpZ3OpH5kIFlhUeQ+yH8HUaewLD3QWe t59ZtoXpHWeXFodiFyma8vd815teXzj22B8XBpVhy0tGOCk3Va20VhqIF8DhjV6E/+ x7dsxuAjaH6LQVDxWw2NtvYjnnY7IP04cKW3Q2EA= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jason Merrill To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-2628] c++: lambda capture of array with deduced bounds [PR106567] X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/master X-Git-Oldrev: 8ef5fa4c56c82dfbd6e8fc5e4e08c4be843abc3e X-Git-Newrev: 7c989a8ed47228bdd494a2f0d1f6fdd325f953d7 Message-Id: <20220912175051.B3441392AC23@sourceware.org> Date: Mon, 12 Sep 2022 17:50:51 +0000 (GMT) List-Id: https://gcc.gnu.org/g:7c989a8ed47228bdd494a2f0d1f6fdd325f953d7 commit r13-2628-g7c989a8ed47228bdd494a2f0d1f6fdd325f953d7 Author: Jason Merrill Date: Mon Sep 12 12:59:46 2022 -0400 c++: lambda capture of array with deduced bounds [PR106567] We can't use the type of an array variable directly if we haven't deduced its length yet. PR c++/106567 gcc/cp/ChangeLog: * lambda.cc (type_deducible_expression_p): Check array_of_unknown_bound_p. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/lambda/lambda-array4.C: New test. Diff: --- gcc/cp/lambda.cc | 1 + gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array4.C | 29 +++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc index 3fb98a98057..3ee1fe9489e 100644 --- a/gcc/cp/lambda.cc +++ b/gcc/cp/lambda.cc @@ -198,6 +198,7 @@ type_deducible_expression_p (tree expr) tree t = non_reference (TREE_TYPE (expr)); return (t && TREE_CODE (t) != TYPE_PACK_EXPANSION && !WILDCARD_TYPE_P (t) && !LAMBDA_TYPE_P (t) + && !array_of_unknown_bound_p (t) && !type_uses_auto (t)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array4.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array4.C new file mode 100644 index 00000000000..94ec7f8457e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array4.C @@ -0,0 +1,29 @@ +// PR c++/106567 +// { dg-do compile { target c++11 } } + +template +void urgh() +{ + const V x[] = {V(0), V(1), V(2), V(0)}; + + [&]() { + for (auto& v : x) {} + }(); +} + +void no_urgh() +{ + using V = int; + + const V x[] = {V(0), V(1), V(2), V(0)}; + + [&]() { + for (auto& v : x) {} + }(); +} + +int main() +{ + no_urgh(); + urgh(); +}