diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2015-04-03 17:23:27 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2015-04-03 17:23:27 +0000 |
commit | a3d94329e909d9d14ba6a6cf9f398cdafc84da53 (patch) | |
tree | 94fa7053e0114e4946c451a921ae30f9a4e0c703 /gcc | |
parent | 1dc15b0b9dd13b4ef6c7af420b2d3b6fe877d4a1 (diff) | |
download | gcc-a3d94329e909d9d14ba6a6cf9f398cdafc84da53.zip gcc-a3d94329e909d9d14ba6a6cf9f398cdafc84da53.tar.gz gcc-a3d94329e909d9d14ba6a6cf9f398cdafc84da53.tar.bz2 |
re PR c++/64085 (ICE on C++14 lambda by-reference capture with an initializer)
/cp
2015-04-03 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/64085
* lambda.c (add_capture): Use dependent_type_p for capture by
reference too.
/testsuite
2015-04-03 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/64085
* g++.dg/cpp1y/lambda-init13.C: New.
From-SVN: r221858
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/lambda.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-init13.C | 18 |
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ca048aa..b84f337 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-04-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/64085 + * lambda.c (add_capture): Use dependent_type_p for capture by + reference too. + 2015-04-02 Marek Polacek <polacek@redhat.com> PR c++/65642 diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index b160c8c..dd1c2d4 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -506,7 +506,7 @@ add_capture (tree lambda, tree id, tree orig_init, bool by_reference_p, if (by_reference_p) { type = build_reference_type (type); - if (!real_lvalue_p (initializer)) + if (!dependent_type_p (type) && !real_lvalue_p (initializer)) error ("cannot capture %qE by reference", initializer); } else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0810c13..3e87768 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/64085 + * g++.dg/cpp1y/lambda-init13.C: New. + 2015-04-03 Marek Polacek <polacek@redhat.com> * g++.dg/cpp0x/pr57101.C: Use proper type for size_t. diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-init13.C b/gcc/testsuite/g++.dg/cpp1y/lambda-init13.C new file mode 100644 index 0000000..9b1d139 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-init13.C @@ -0,0 +1,18 @@ +// PR c++/64085 +// { dg-do compile { target c++14 } } + +template<typename T> +struct reference_wrapper +{ + T& get() const noexcept; +}; + +template<class T> +auto make_monad(reference_wrapper<T> arg) { + return [&captive = arg.get()](auto&&) { return 1; }; +} + +int main() +{ + make_monad(reference_wrapper<int&>()); +} |