diff options
author | Jason Merrill <jason@redhat.com> | 2015-08-17 14:42:09 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2015-08-17 14:42:09 -0400 |
commit | b361a15ff60daf83fc2ddccbc6166e4bd19e2b35 (patch) | |
tree | ef31c5fa83e6a037420b94a79071be095462bd86 | |
parent | ceaaf873e9392ac3f196c400afbc91f70a9dbce2 (diff) | |
download | gcc-b361a15ff60daf83fc2ddccbc6166e4bd19e2b35.zip gcc-b361a15ff60daf83fc2ddccbc6166e4bd19e2b35.tar.gz gcc-b361a15ff60daf83fc2ddccbc6166e4bd19e2b35.tar.bz2 |
re PR c++/67244 (internal compiler error: in gimplify_var_or_parm_decl, at gimplify.c:1801)
PR c++/67244
* pt.c (tsubst_copy_and_build): Call insert_pending_capture_proxies.
From-SVN: r226950
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested5.C | 29 |
3 files changed, 34 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 078ee74..ca00d03 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2015-08-17 Jason Merrill <jason@redhat.com> + PR c++/67244 + * pt.c (tsubst_copy_and_build): Call insert_pending_capture_proxies. + PR c++/67104 * constexpr.c (array_index_cmp, find_array_ctor_elt): New. (cxx_eval_array_reference, cxx_eval_store_expression): Use them. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index ecd86e4..b84bda4 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -16344,6 +16344,8 @@ tsubst_copy_and_build (tree t, LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE; + insert_pending_capture_proxies (); + RETURN (build_lambda_object (r)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested5.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested5.C new file mode 100644 index 0000000..3ebdf3b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested5.C @@ -0,0 +1,29 @@ +// PR c++/67244 +// { dg-do compile { target c++11 } } + +class A { +public: + int operator*(); +}; +template <typename T, typename Predicate> +void searchGen(int, int, T, Predicate p4) { + p4(0); +} +template <typename...> struct B; +template <typename MetaFunction, typename Type, typename... Types> +struct B<MetaFunction, Type, Types...> { + static void exec() { MetaFunction::template exec<Type>; } +}; +template <typename MetaFunction, typename... Types> void forEachType() { + B<MetaFunction, Types...>::exec; +} +namespace { +struct C { + template <typename T> void exec() { + A __trans_tmp_1; + const auto target = *__trans_tmp_1; + searchGen(0, 0, 0, [=](T) { [=] { target; }; }); + } +}; +} +void ____C_A_T_C_H____T_E_S_T____75() { forEachType<C, int>; } |