diff options
author | Jason Merrill <jason@redhat.com> | 2014-09-22 15:22:11 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-09-22 15:22:11 -0400 |
commit | a546927c6a9a06b25ae85f8206b2c7afc53f4a45 (patch) | |
tree | c400f29d211f1ef321ecdd015d159c8337af81b3 /gcc/cp/lambda.c | |
parent | 05424ee6ec0d20b028649cce108ed442863f1063 (diff) | |
download | gcc-a546927c6a9a06b25ae85f8206b2c7afc53f4a45.zip gcc-a546927c6a9a06b25ae85f8206b2c7afc53f4a45.tar.gz gcc-a546927c6a9a06b25ae85f8206b2c7afc53f4a45.tar.bz2 |
re PR c++/63320 (bogus ‘this’ was not captured for this lambda function error)
PR c++/63320
PR c++/60463
PR c++/60755
* lambda.c (maybe_resolve_dummy, lambda_expr_this_capture): Handle
not finding 'this'.
From-SVN: r215478
Diffstat (limited to 'gcc/cp/lambda.c')
-rw-r--r-- | gcc/cp/lambda.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index 0d8d455..17fd037 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -724,7 +724,8 @@ lambda_expr_this_capture (tree lambda, bool add_capture_p) if (!this_capture) { - error ("%<this%> was not captured for this lambda function"); + if (add_capture_p) + error ("%<this%> was not captured for this lambda function"); result = error_mark_node; } else @@ -768,8 +769,9 @@ maybe_resolve_dummy (tree object, bool add_capture_p) /* In a lambda, need to go through 'this' capture. */ tree lam = CLASSTYPE_LAMBDA_EXPR (current_class_type); tree cap = lambda_expr_this_capture (lam, add_capture_p); - object = build_x_indirect_ref (EXPR_LOCATION (object), cap, - RO_NULL, tf_warning_or_error); + if (cap != error_mark_node) + object = build_x_indirect_ref (EXPR_LOCATION (object), cap, + RO_NULL, tf_warning_or_error); } return object; |