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
This commit is contained in:
Jason Merrill 2015-08-17 14:42:09 -04:00 committed by Jason Merrill
parent ceaaf873e9
commit b361a15ff6
3 changed files with 34 additions and 0 deletions

View file

@ -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.

View file

@ -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));
}

View file

@ -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>; }