From b9c9af4c281b609840adcc272032c2d38f463b17 Mon Sep 17 00:00:00 2001 From: jason Date: Fri, 21 Feb 2014 14:01:20 +0000 Subject: [PATCH] PR c++/60251 * lambda.c (is_normal_capture_proxy): Handle VLA capture. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207995 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/lambda.c | 4 ++++ gcc/testsuite/g++.dg/cpp1y/vla11.C | 8 ++++++++ 3 files changed, 15 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp1y/vla11.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index be248e1..e175768 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2014-02-21 Jason Merrill + PR c++/60251 + * lambda.c (is_normal_capture_proxy): Handle VLA capture. + PR c++/60167 PR c++/60222 PR c++/58606 diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index 8bb820d..ad993e9 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -250,6 +250,10 @@ is_normal_capture_proxy (tree decl) /* It's not a capture proxy. */ return false; + if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE)) + /* VLA capture. */ + return true; + /* It is a capture proxy, is it a normal capture? */ tree val = DECL_VALUE_EXPR (decl); if (val == error_mark_node) diff --git a/gcc/testsuite/g++.dg/cpp1y/vla11.C b/gcc/testsuite/g++.dg/cpp1y/vla11.C new file mode 100644 index 0000000..c9cdade --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/vla11.C @@ -0,0 +1,8 @@ +// PR c++/60251 +// { dg-options "-std=c++1y -pedantic-errors" } + +void foo(int n) +{ + int x[n]; + [&x]() { decltype(x) y; }; // { dg-error "decltype of array of runtime bound" } +} -- 2.7.4