From: Jason Merrill Date: Fri, 21 Feb 2014 14:01:20 +0000 (-0500) Subject: re PR c++/60251 ([c++11] ICE capturing variable-length array) X-Git-Tag: releases/gcc-4.9.0~779 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e429bc3555e7c3cbbc3b03ee0dbf78b3b9a4c198;p=thirdparty%2Fgcc.git re PR c++/60251 ([c++11] ICE capturing variable-length array) PR c++/60251 * lambda.c (is_normal_capture_proxy): Handle VLA capture. From-SVN: r207995 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index be248e1f400a..e17576895ed3 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 8bb820d0c3b0..ad993e9d3923 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 000000000000..c9cdadea7ecb --- /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" } +}