diff options
author | Jason Merrill <jason@redhat.com> | 2011-08-30 11:28:40 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-08-30 11:28:40 -0400 |
commit | a728a2ada0698cbd8688d5eb6d88d357ec27eb5b (patch) | |
tree | bc2dda5b8a4431bb6229ddcdf43feb5f9d5fe4c4 /gcc | |
parent | d05da2b9d529b199ff3589353e91ec4440f5ab1f (diff) | |
download | gcc-a728a2ada0698cbd8688d5eb6d88d357ec27eb5b.zip gcc-a728a2ada0698cbd8688d5eb6d88d357ec27eb5b.tar.gz gcc-a728a2ada0698cbd8688d5eb6d88d357ec27eb5b.tar.bz2 |
re PR c++/50220 ([C++0x] [4.7 Regression] ICE when capturing a by-reference template function argument in a lambda)
PR c++/50220
* semantics.c (add_capture): Call complete_type for copy.
From-SVN: r178326
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C | 9 |
4 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9abac29..c2c00a7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-08-30 Jason Merrill <jason@redhat.com> + PR c++/50220 + * semantics.c (add_capture): Call complete_type for copy. + PR c++/50234 * semantics.c (cxx_eval_component_reference): Handle value-initialization for omitted initializers. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 1ad991f..dd7c013 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -8651,6 +8651,9 @@ add_capture (tree lambda, tree id, tree initializer, bool by_reference_p, if (!real_lvalue_p (initializer)) error ("cannot capture %qE by reference", initializer); } + else + /* Capture by copy requires a complete type. */ + type = complete_type (type); /* Add __ to the beginning of the field name so that user code won't find the field with name lookup. We can't just leave the name diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 237deac..ccaf17c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-08-30 Jason Merrill <jason@redhat.com> + PR c++/50220 + * g++.dg/cpp0x/lambda/lambda-50220.C: New. + PR c++/50234 * g++.dg/cpp0x/constexpr-value3.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C new file mode 100644 index 0000000..240143c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C @@ -0,0 +1,9 @@ +// PR c++/50220 +// { dg-options -std=c++0x } + +template<typename Foo> struct Foobar {}; + +void foobar(const Foobar<void>& obj) +{ + [obj](){}(); +} |