diff options
author | Jason Merrill <jason@redhat.com> | 2018-02-26 21:44:26 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-02-26 21:44:26 -0500 |
commit | ab5f26bba1270e16317188fe1070df05ab89bb00 (patch) | |
tree | b8e572feaf9346ec92bb89192086de7eaa46822d /gcc/cp/lambda.c | |
parent | d36a19c78a67bb367ff24942db78299f24df2970 (diff) | |
download | gcc-ab5f26bba1270e16317188fe1070df05ab89bb00.zip gcc-ab5f26bba1270e16317188fe1070df05ab89bb00.tar.gz gcc-ab5f26bba1270e16317188fe1070df05ab89bb00.tar.bz2 |
PR c++/84520 - ICE with generic lambda in NSDMI.
* lambda.c (lambda_expr_this_capture): Don't look for fake NSDMI
'this' in a generic lambda instantiation.
From-SVN: r258021
Diffstat (limited to 'gcc/cp/lambda.c')
-rw-r--r-- | gcc/cp/lambda.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index 6a79826..3f77df0 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -758,11 +758,14 @@ lambda_expr_this_capture (tree lambda, bool add_capture_p) lambda_stack); if (LAMBDA_EXPR_EXTRA_SCOPE (tlambda) + && !COMPLETE_TYPE_P (LAMBDA_EXPR_CLOSURE (tlambda)) && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (tlambda)) == FIELD_DECL) { /* In an NSDMI, we don't have a function to look up the decl in, but the fake 'this' pointer that we're using for parsing is - in scope_chain. */ + in scope_chain. But if the closure is already complete, we're + in an instantiation of a generic lambda, and the fake 'this' + is gone. */ init = scope_chain->x_current_class_ptr; gcc_checking_assert (init && (TREE_TYPE (TREE_TYPE (init)) |