Commit 806010b9 by Jason Merrill Committed by Jason Merrill

parser.c (cp_parser_lambda_expression): Clear LAMBDA_EXPR_THIS_CAPTURE after parsing.

	* parser.c (cp_parser_lambda_expression): Clear
	LAMBDA_EXPR_THIS_CAPTURE after parsing.
	* pt.c (tsubst_copy_and_build): Make sure it isn't set.

From-SVN: r175156
parent 2cd8d506
2011-06-17 Jason Merrill <jason@redhat.com> 2011-06-17 Jason Merrill <jason@redhat.com>
* parser.c (cp_parser_lambda_expression): Clear
LAMBDA_EXPR_THIS_CAPTURE after parsing.
* pt.c (tsubst_copy_and_build): Make sure it isn't set.
* cp-tree.h (struct tree_lambda_expr): Change common to typed. * cp-tree.h (struct tree_lambda_expr): Change common to typed.
Move non-pointers to end of struct. Move non-pointers to end of struct.
......
...@@ -625,7 +625,8 @@ enum cp_lambda_default_capture_mode_type { ...@@ -625,7 +625,8 @@ enum cp_lambda_default_capture_mode_type {
#define LAMBDA_EXPR_CAPTURE_LIST(NODE) \ #define LAMBDA_EXPR_CAPTURE_LIST(NODE) \
(((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->capture_list) (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->capture_list)
/* The node in the capture-list that holds the 'this' capture. */ /* During parsing of the lambda, the node in the capture-list that holds
the 'this' capture. */
#define LAMBDA_EXPR_THIS_CAPTURE(NODE) \ #define LAMBDA_EXPR_THIS_CAPTURE(NODE) \
(((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->this_capture) (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->this_capture)
......
...@@ -7430,6 +7430,9 @@ cp_parser_lambda_expression (cp_parser* parser) ...@@ -7430,6 +7430,9 @@ cp_parser_lambda_expression (cp_parser* parser)
pop_deferring_access_checks (); pop_deferring_access_checks ();
/* This field is only used during parsing of the lambda. */
LAMBDA_EXPR_THIS_CAPTURE (lambda_expr) = NULL_TREE;
if (ok) if (ok)
return build_lambda_object (lambda_expr); return build_lambda_object (lambda_expr);
else else
......
...@@ -13498,10 +13498,9 @@ tsubst_copy_and_build (tree t, ...@@ -13498,10 +13498,9 @@ tsubst_copy_and_build (tree t,
= (LAMBDA_EXPR_DISCRIMINATOR (t)); = (LAMBDA_EXPR_DISCRIMINATOR (t));
LAMBDA_EXPR_CAPTURE_LIST (r) LAMBDA_EXPR_CAPTURE_LIST (r)
= RECUR (LAMBDA_EXPR_CAPTURE_LIST (t)); = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
LAMBDA_EXPR_THIS_CAPTURE (r)
= RECUR (LAMBDA_EXPR_THIS_CAPTURE (t));
LAMBDA_EXPR_EXTRA_SCOPE (r) LAMBDA_EXPR_EXTRA_SCOPE (r)
= RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t)); = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE);
/* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */ /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set. */
determine_visibility (TYPE_NAME (type)); determine_visibility (TYPE_NAME (type));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment