re PR c++/79264 (ICE verify_type failed)
PR c++/79264 * lambda.c (maybe_generic_this_capture): Deal with template-id-exprs. * semantics.c (finish_member_declaration): Assert class is being defined. PR c++/79264 * g++.dg/cpp1y/pr61636-1.C: Augment. From-SVN: r245065
This commit is contained in:
parent
8eedca0df1
commit
7f357c6164
@ -1,3 +1,10 @@
|
||||
2017-01-31 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/79264
|
||||
* lambda.c (maybe_generic_this_capture): Deal with template-id-exprs.
|
||||
* semantics.c (finish_member_declaration): Assert class is being
|
||||
defined.
|
||||
|
||||
2017-01-30 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
Introduce C++ support in libcc1.
|
||||
|
@ -849,13 +849,21 @@ maybe_generic_this_capture (tree object, tree fns)
|
||||
interest. */
|
||||
if (BASELINK_P (fns))
|
||||
fns = BASELINK_FUNCTIONS (fns);
|
||||
bool id_expr = TREE_CODE (fns) == TEMPLATE_ID_EXPR;
|
||||
if (id_expr)
|
||||
fns = TREE_OPERAND (fns, 0);
|
||||
for (; fns; fns = OVL_NEXT (fns))
|
||||
if (DECL_NONSTATIC_MEMBER_FUNCTION_P (OVL_CURRENT (fns)))
|
||||
{
|
||||
/* Found a non-static member. Capture this. */
|
||||
lambda_expr_this_capture (lam, true);
|
||||
break;
|
||||
}
|
||||
{
|
||||
tree fn = OVL_CURRENT (fns);
|
||||
|
||||
if ((!id_expr || TREE_CODE (fn) == TEMPLATE_DECL)
|
||||
&& DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
|
||||
{
|
||||
/* Found a non-static member. Capture this. */
|
||||
lambda_expr_this_capture (lam, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2962,6 +2962,12 @@ finish_member_declaration (tree decl)
|
||||
/* We should see only one DECL at a time. */
|
||||
gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
|
||||
|
||||
/* Don't add decls after definition. */
|
||||
gcc_assert (TYPE_BEING_DEFINED (current_class_type)
|
||||
/* We can add lambda types when late parsing default
|
||||
arguments. */
|
||||
|| LAMBDA_TYPE_P (TREE_TYPE (decl)));
|
||||
|
||||
/* Set up access control for DECL. */
|
||||
TREE_PRIVATE (decl)
|
||||
= (current_access_specifier == access_private_node);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-01-31 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/79264
|
||||
* g++.dg/cpp1y/pr61636-1.C: Augment.
|
||||
|
||||
2017-01-31 Christophe Lyon <christophe.lyon@linaro.org>
|
||||
|
||||
* gcc.dg/memcmp-1.c (static void test_driver_memcmp): Call
|
||||
|
@ -1,4 +1,5 @@
|
||||
// PR c++/61636
|
||||
// PR c++/79264
|
||||
// { dg-do compile { target c++14 } }
|
||||
|
||||
// ICE because we figure this capture too late.
|
||||
@ -28,4 +29,8 @@ void A::b() {
|
||||
auto lam2 = [&](auto asdf) { Baz (asdf); };
|
||||
|
||||
lam2 (0);
|
||||
|
||||
auto lam3 = [&](auto asdf) { Baz<int> (asdf); };
|
||||
|
||||
lam3 (0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user