From: Jason Merrill Date: Thu, 10 May 2018 18:40:43 +0000 (-0400) Subject: * lambda.c (lambda_expr_this_capture): Improve logic. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=86cf10840b6cfbfe03399d10ca6deabb05eb4e40;p=gcc.git * lambda.c (lambda_expr_this_capture): Improve logic. From-SVN: r260122 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e70d3948eb1..544806d28a4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2018-05-09 Jason Merrill + * lambda.c (lambda_expr_this_capture): Improve logic. + * decl.c (make_typename_type): s/parameters/arguments/. * parser.c (cp_parser_nested_name_specifier_opt): Likewise. * pt.c (make_pack_expansion): Correct error message. diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index e9b962a8f33..e3f22fcc5b9 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)