diff options
Diffstat (limited to 'gcc/cp/lambda.c')
-rw-r--r-- | gcc/cp/lambda.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index e9b962a..e3f22fc 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -743,9 +743,7 @@ lambda_expr_this_capture (tree lambda, bool add_capture_p) add_capture_p = false; /* Try to default capture 'this' if we can. */ - if (!this_capture - && (!add_capture_p - || LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)) + if (!this_capture) { tree lambda_stack = NULL_TREE; tree init = NULL_TREE; @@ -756,9 +754,15 @@ lambda_expr_this_capture (tree lambda, bool add_capture_p) 3. a non-default capturing lambda function. */ for (tree tlambda = lambda; ;) { - lambda_stack = tree_cons (NULL_TREE, - tlambda, - lambda_stack); + if (add_capture_p + && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (tlambda) == CPLD_NONE) + /* tlambda won't let us capture 'this'. */ + break; + + if (add_capture_p) + lambda_stack = tree_cons (NULL_TREE, + tlambda, + lambda_stack); tree closure = LAMBDA_EXPR_CLOSURE (tlambda); tree containing_function @@ -807,10 +811,6 @@ lambda_expr_this_capture (tree lambda, bool add_capture_p) init = LAMBDA_EXPR_THIS_CAPTURE (tlambda); break; } - - if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (tlambda) == CPLD_NONE) - /* An outer lambda won't let us capture 'this'. */ - break; } if (init) |