diff options
author | Jason Merrill <jason@redhat.com> | 2014-12-12 11:43:16 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-12-12 11:43:16 -0500 |
commit | 18e780d460928cdbcd78b1dcbaf2bda9b8d0537c (patch) | |
tree | fc93cb696974d6d6f9a464daaf1235e8c443c3ea /gcc | |
parent | 0f3d27f01a5d86b3f7a9323d2b7fe1aa11f6ad2b (diff) | |
download | gcc-18e780d460928cdbcd78b1dcbaf2bda9b8d0537c.zip gcc-18e780d460928cdbcd78b1dcbaf2bda9b8d0537c.tar.gz gcc-18e780d460928cdbcd78b1dcbaf2bda9b8d0537c.tar.bz2 |
re PR c++/61402 (-Wsequence-point doesn't notice unsequenced lambda init and function argument)
PR c++/61402
* lambda.c (add_capture): Don't pass a dependent type to
variably_modified_type_p.
From-SVN: r218680
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/lambda.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-init11.C | 20 |
3 files changed, 28 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 53bf2f5..1809b26 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-12-12 Jason Merrill <jason@redhat.com> + + PR c++/61402 + * lambda.c (add_capture): Don't pass a dependent type to + variably_modified_type_p. + 2014-12-11 Jason Merrill <jason@redhat.com> Remove N3639 "array of runtime length" from -std=c++14. diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index 9eb9200..3da28e5 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -483,7 +483,8 @@ add_capture (tree lambda, tree id, tree orig_init, bool by_reference_p, NULL_TREE, array_type_nelts (type)); type = vla_capture_type (type); } - else if (variably_modified_type_p (type, NULL_TREE)) + else if (!dependent_type_p (type) + && variably_modified_type_p (type, NULL_TREE)) { error ("capture of variable-size type %qT that is not an N3639 array " "of runtime bound", type); diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-init11.C b/gcc/testsuite/g++.dg/cpp1y/lambda-init11.C new file mode 100644 index 0000000..f7525d8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-init11.C @@ -0,0 +1,20 @@ +// PR c++/61402 +// { dg-do run { target c++14 } } + +extern "C" void abort(); + +template<typename T> +void foo(T t) { + auto test = [ i = ++t ](T v) { + if (i != v) + abort(); + }; + test(t); +} + +int main(){ + foo(3.14f); + foo(0); + foo('a'); + foo(false); +} |