1 /* Perform the semantic phase of lambda parsing, i.e., the process of
2 building tree structure, checking semantic consistency, and
3 building RTL. These routines are used both during actual parsing
4 and during the instantiation of template functions.
6 Copyright (C) 1998-2016 Free Software Foundation, Inc.
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify it
11 under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
15 GCC is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
26 #include "coretypes.h"
28 #include "stringpool.h"
30 #include "tree-iterator.h"
34 /* Constructor for a lambda expression. */
37 build_lambda_expr (void)
39 tree lambda = make_node (LAMBDA_EXPR);
40 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
41 LAMBDA_EXPR_CAPTURE_LIST (lambda) = NULL_TREE;
42 LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
43 LAMBDA_EXPR_PENDING_PROXIES (lambda) = NULL;
44 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
45 LAMBDA_EXPR_MUTABLE_P (lambda) = false;
49 /* Create the closure object for a LAMBDA_EXPR. */
52 build_lambda_object (tree lambda_expr)
54 /* Build aggregate constructor call.
55 - cp_parser_braced_list
56 - cp_parser_functional_cast */
57 vec<constructor_elt, va_gc> *elts = NULL;
58 tree node, expr, type;
61 if (processing_template_decl)
64 /* Make sure any error messages refer to the lambda-introducer. */
65 saved_loc = input_location;
66 input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
68 for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
70 node = TREE_CHAIN (node))
72 tree field = TREE_PURPOSE (node);
73 tree val = TREE_VALUE (node);
75 if (field == error_mark_node)
77 expr = error_mark_node;
84 /* Mere mortals can't copy arrays with aggregate initialization, so
85 do some magic to make it work here. */
86 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
87 val = build_array_copy (val);
88 else if (DECL_NORMAL_CAPTURE_P (field)
89 && !DECL_VLA_CAPTURE_P (field)
90 && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
92 /* "the entities that are captured by copy are used to
93 direct-initialize each corresponding non-static data
94 member of the resulting closure object."
96 There's normally no way to express direct-initialization
97 from an element of a CONSTRUCTOR, so we build up a special
98 TARGET_EXPR to bypass the usual copy-initialization. */
99 val = force_rvalue (val, tf_warning_or_error);
100 if (TREE_CODE (val) == TARGET_EXPR)
101 TARGET_EXPR_DIRECT_INIT_P (val) = true;
104 CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
107 expr = build_constructor (init_list_type_node, elts);
108 CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
110 /* N2927: "[The closure] class type is not an aggregate."
111 But we briefly treat it as an aggregate to make this simpler. */
112 type = LAMBDA_EXPR_CLOSURE (lambda_expr);
113 CLASSTYPE_NON_AGGREGATE (type) = 0;
114 expr = finish_compound_literal (type, expr, tf_warning_or_error);
115 CLASSTYPE_NON_AGGREGATE (type) = 1;
118 input_location = saved_loc;
122 /* Return an initialized RECORD_TYPE for LAMBDA.
123 LAMBDA must have its explicit captures already. */
126 begin_lambda_type (tree lambda)
131 /* Unique name. This is just like an unnamed class, but we cannot use
132 make_anon_name because of certain checks against TYPE_ANONYMOUS_P. */
134 name = make_lambda_name ();
136 /* Create the new RECORD_TYPE for this lambda. */
137 type = xref_tag (/*tag_code=*/record_type,
140 /*template_header_p=*/false);
141 if (type == error_mark_node)
142 return error_mark_node;
145 /* Designate it as a struct so that we can use aggregate initialization. */
146 CLASSTYPE_DECLARED_CLASS (type) = false;
148 /* Cross-reference the expression and the type. */
149 LAMBDA_EXPR_CLOSURE (lambda) = type;
150 CLASSTYPE_LAMBDA_EXPR (type) = lambda;
152 /* Clear base types. */
153 xref_basetypes (type, /*bases=*/NULL_TREE);
155 /* Start the class. */
156 type = begin_class_definition (type);
161 /* Returns the type to use for the return type of the operator() of a
165 lambda_return_type (tree expr)
167 if (expr == NULL_TREE)
168 return void_type_node;
169 if (type_unknown_p (expr)
170 || BRACE_ENCLOSED_INITIALIZER_P (expr))
172 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
173 return error_mark_node;
175 gcc_checking_assert (!type_dependent_expression_p (expr));
176 return cv_unqualified (type_decays_to (unlowered_expr_type (expr)));
179 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
183 lambda_function (tree lambda)
186 if (TREE_CODE (lambda) == LAMBDA_EXPR)
187 type = LAMBDA_EXPR_CLOSURE (lambda);
190 gcc_assert (LAMBDA_TYPE_P (type));
191 /* Don't let debug_tree cause instantiation. */
192 if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
193 && !COMPLETE_OR_OPEN_TYPE_P (type))
195 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
196 /*protect=*/0, /*want_type=*/false,
197 tf_warning_or_error);
199 lambda = STRIP_TEMPLATE (get_first_fn (lambda));
203 /* Returns the type to use for the FIELD_DECL corresponding to the
205 The caller should add REFERENCE_TYPE for capture by reference. */
208 lambda_capture_field_type (tree expr, bool explicit_init_p)
211 bool is_this = is_this_parameter (tree_strip_nop_conversions (expr));
212 if (!is_this && type_dependent_expression_p (expr))
214 type = cxx_make_type (DECLTYPE_TYPE);
215 DECLTYPE_TYPE_EXPR (type) = expr;
216 DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
217 DECLTYPE_FOR_INIT_CAPTURE (type) = explicit_init_p;
218 SET_TYPE_STRUCTURAL_EQUALITY (type);
220 else if (!is_this && explicit_init_p)
223 type = do_auto_deduction (type, expr, type);
226 type = non_reference (unlowered_expr_type (expr));
230 /* Returns true iff DECL is a lambda capture proxy variable created by
231 build_capture_proxy. */
234 is_capture_proxy (tree decl)
237 && DECL_HAS_VALUE_EXPR_P (decl)
238 && !DECL_ANON_UNION_VAR_P (decl)
239 && LAMBDA_FUNCTION_P (DECL_CONTEXT (decl)));
242 /* Returns true iff DECL is a capture proxy for a normal capture
243 (i.e. without explicit initializer). */
246 is_normal_capture_proxy (tree decl)
248 if (!is_capture_proxy (decl))
249 /* It's not a capture proxy. */
252 if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
256 /* It is a capture proxy, is it a normal capture? */
257 tree val = DECL_VALUE_EXPR (decl);
258 if (val == error_mark_node)
261 gcc_assert (TREE_CODE (val) == COMPONENT_REF);
262 val = TREE_OPERAND (val, 1);
263 return DECL_NORMAL_CAPTURE_P (val);
266 /* VAR is a capture proxy created by build_capture_proxy; add it to the
267 current function, which is the operator() for the appropriate lambda. */
270 insert_capture_proxy (tree var)
275 /* Put the capture proxy in the extra body block so that it won't clash
276 with a later local variable. */
277 b = current_binding_level;
280 cp_binding_level *n = b->level_chain;
281 if (n->kind == sk_function_parms)
285 pushdecl_with_scope (var, b, false);
287 /* And put a DECL_EXPR in the STATEMENT_LIST for the same block. */
288 var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
289 stmt_list = (*stmt_list_stack)[1];
290 gcc_assert (stmt_list);
291 append_to_statement_list_force (var, &stmt_list);
294 /* We've just finished processing a lambda; if the containing scope is also
295 a lambda, insert any capture proxies that were created while processing
296 the nested lambda. */
299 insert_pending_capture_proxies (void)
302 vec<tree, va_gc> *proxies;
305 if (!current_function_decl || !LAMBDA_FUNCTION_P (current_function_decl))
308 lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
309 proxies = LAMBDA_EXPR_PENDING_PROXIES (lam);
310 for (i = 0; i < vec_safe_length (proxies); ++i)
312 tree var = (*proxies)[i];
313 insert_capture_proxy (var);
315 release_tree_vector (LAMBDA_EXPR_PENDING_PROXIES (lam));
316 LAMBDA_EXPR_PENDING_PROXIES (lam) = NULL;
319 /* Given REF, a COMPONENT_REF designating a field in the lambda closure,
320 return the type we want the proxy to have: the type of the field itself,
321 with added const-qualification if the lambda isn't mutable and the
322 capture is by value. */
325 lambda_proxy_type (tree ref)
328 if (ref == error_mark_node)
329 return error_mark_node;
330 if (REFERENCE_REF_P (ref))
331 ref = TREE_OPERAND (ref, 0);
332 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
333 type = TREE_TYPE (ref);
334 if (!type || WILDCARD_TYPE_P (non_reference (type)))
336 type = cxx_make_type (DECLTYPE_TYPE);
337 DECLTYPE_TYPE_EXPR (type) = ref;
338 DECLTYPE_FOR_LAMBDA_PROXY (type) = true;
339 SET_TYPE_STRUCTURAL_EQUALITY (type);
341 if (DECL_PACK_P (TREE_OPERAND (ref, 1)))
342 type = make_pack_expansion (type);
346 /* MEMBER is a capture field in a lambda closure class. Now that we're
347 inside the operator(), build a placeholder var for future lookups and
351 build_capture_proxy (tree member)
353 tree var, object, fn, closure, name, lam, type;
355 if (PACK_EXPANSION_P (member))
356 member = PACK_EXPANSION_PATTERN (member);
358 closure = DECL_CONTEXT (member);
359 fn = lambda_function (closure);
360 lam = CLASSTYPE_LAMBDA_EXPR (closure);
362 /* The proxy variable forwards to the capture field. */
363 object = build_fold_indirect_ref (DECL_ARGUMENTS (fn));
364 object = finish_non_static_data_member (member, object, NULL_TREE);
365 if (REFERENCE_REF_P (object))
366 object = TREE_OPERAND (object, 0);
368 /* Remove the __ inserted by add_capture. */
369 name = get_identifier (IDENTIFIER_POINTER (DECL_NAME (member)) + 2);
371 type = lambda_proxy_type (object);
373 if (DECL_VLA_CAPTURE_P (member))
375 /* Rebuild the VLA type from the pointer and maxindex. */
376 tree field = next_initializable_field (TYPE_FIELDS (type));
377 tree ptr = build_simple_component_ref (object, field);
378 field = next_initializable_field (DECL_CHAIN (field));
379 tree max = build_simple_component_ref (object, field);
380 type = build_cplus_array_type (TREE_TYPE (TREE_TYPE (ptr)),
381 build_index_type (max));
382 type = build_reference_type (type);
383 REFERENCE_VLA_OK (type) = true;
384 object = convert (type, ptr);
387 var = build_decl (input_location, VAR_DECL, name, type);
388 SET_DECL_VALUE_EXPR (var, object);
389 DECL_HAS_VALUE_EXPR_P (var) = 1;
390 DECL_ARTIFICIAL (var) = 1;
392 DECL_CONTEXT (var) = fn;
394 if (name == this_identifier)
396 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (lam) == member);
397 LAMBDA_EXPR_THIS_CAPTURE (lam) = var;
400 if (fn == current_function_decl)
401 insert_capture_proxy (var);
403 vec_safe_push (LAMBDA_EXPR_PENDING_PROXIES (lam), var);
408 /* Return a struct containing a pointer and a length for lambda capture of
409 an array of runtime length. */
412 vla_capture_type (tree array_type)
414 static tree ptr_id, max_id;
415 tree type = xref_tag (record_type, make_anon_name (), ts_current, false);
416 xref_basetypes (type, NULL_TREE);
417 type = begin_class_definition (type);
420 ptr_id = get_identifier ("ptr");
421 max_id = get_identifier ("max");
423 tree ptrtype = build_pointer_type (TREE_TYPE (array_type));
424 tree field = build_decl (input_location, FIELD_DECL, ptr_id, ptrtype);
425 finish_member_declaration (field);
426 field = build_decl (input_location, FIELD_DECL, max_id, sizetype);
427 finish_member_declaration (field);
428 return finish_struct (type, NULL_TREE);
431 /* From an ID and INITIALIZER, create a capture (by reference if
432 BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
436 add_capture (tree lambda, tree id, tree orig_init, bool by_reference_p,
437 bool explicit_init_p)
440 tree type, member, name;
442 bool variadic = false;
443 tree initializer = orig_init;
445 if (PACK_EXPANSION_P (initializer))
447 initializer = PACK_EXPANSION_PATTERN (initializer);
451 if (TREE_CODE (initializer) == TREE_LIST)
452 initializer = build_x_compound_expr_from_list (initializer, ELK_INIT,
453 tf_warning_or_error);
454 type = TREE_TYPE (initializer);
455 if (type == error_mark_node)
456 return error_mark_node;
458 if (array_of_runtime_bound_p (type))
462 error ("array of runtime bound cannot be captured by copy, "
463 "only by reference");
465 /* For a VLA, we capture the address of the first element and the
466 maximum index, and then reconstruct the VLA for the proxy. */
467 tree elt = cp_build_array_ref (input_location, initializer,
468 integer_zero_node, tf_warning_or_error);
469 initializer = build_constructor_va (init_list_type_node, 2,
470 NULL_TREE, build_address (elt),
471 NULL_TREE, array_type_nelts (type));
472 type = vla_capture_type (type);
474 else if (!dependent_type_p (type)
475 && variably_modified_type_p (type, NULL_TREE))
477 error ("capture of variable-size type %qT that is not an N3639 array "
478 "of runtime bound", type);
479 if (TREE_CODE (type) == ARRAY_TYPE
480 && variably_modified_type_p (TREE_TYPE (type), NULL_TREE))
481 inform (input_location, "because the array element type %qT has "
482 "variable size", TREE_TYPE (type));
483 type = error_mark_node;
487 type = lambda_capture_field_type (initializer, explicit_init_p);
488 if (type == error_mark_node)
489 return error_mark_node;
492 type = build_reference_type (type);
493 if (!dependent_type_p (type) && !real_lvalue_p (initializer))
494 error ("cannot capture %qE by reference", initializer);
498 /* Capture by copy requires a complete type. */
499 type = complete_type (type);
500 if (!dependent_type_p (type) && !COMPLETE_TYPE_P (type))
502 error ("capture by copy of incomplete type %qT", type);
503 cxx_incomplete_type_inform (type);
504 return error_mark_node;
509 /* Add __ to the beginning of the field name so that user code
510 won't find the field with name lookup. We can't just leave the name
511 unset because template instantiation uses the name to find
512 instantiated fields. */
513 buf = (char *) alloca (IDENTIFIER_LENGTH (id) + 3);
514 buf[1] = buf[0] = '_';
515 memcpy (buf + 2, IDENTIFIER_POINTER (id),
516 IDENTIFIER_LENGTH (id) + 1);
517 name = get_identifier (buf);
519 /* If TREE_TYPE isn't set, we're still in the introducer, so check
521 if (!LAMBDA_EXPR_CLOSURE (lambda))
523 if (IDENTIFIER_MARKED (name))
525 pedwarn (input_location, 0,
526 "already captured %qD in lambda expression", id);
529 IDENTIFIER_MARKED (name) = true;
533 type = make_pack_expansion (type);
535 /* Make member variable. */
536 member = build_decl (input_location, FIELD_DECL, name, type);
537 DECL_VLA_CAPTURE_P (member) = vla;
539 if (!explicit_init_p)
540 /* Normal captures are invisible to name lookup but uses are replaced
541 with references to the capture field; we implement this by only
542 really making them invisible in unevaluated context; see
543 qualify_lookup. For now, let's make explicitly initialized captures
545 DECL_NORMAL_CAPTURE_P (member) = true;
547 if (id == this_identifier)
548 LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
550 /* Add it to the appropriate closure class if we've started it. */
551 if (current_class_type
552 && current_class_type == LAMBDA_EXPR_CLOSURE (lambda))
553 finish_member_declaration (member);
555 tree listmem = member;
558 listmem = make_pack_expansion (member);
559 initializer = orig_init;
561 LAMBDA_EXPR_CAPTURE_LIST (lambda)
562 = tree_cons (listmem, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
564 if (LAMBDA_EXPR_CLOSURE (lambda))
565 return build_capture_proxy (member);
566 /* For explicit captures we haven't started the function yet, so we wait
567 and build the proxy from cp_parser_lambda_body. */
571 /* Register all the capture members on the list CAPTURES, which is the
572 LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer. */
575 register_capture_members (tree captures)
577 if (captures == NULL_TREE)
580 register_capture_members (TREE_CHAIN (captures));
582 tree field = TREE_PURPOSE (captures);
583 if (PACK_EXPANSION_P (field))
584 field = PACK_EXPANSION_PATTERN (field);
586 /* We set this in add_capture to avoid duplicates. */
587 IDENTIFIER_MARKED (DECL_NAME (field)) = false;
588 finish_member_declaration (field);
591 /* Similar to add_capture, except this works on a stack of nested lambdas.
592 BY_REFERENCE_P in this case is derived from the default capture mode.
593 Returns the capture for the lambda at the bottom of the stack. */
596 add_default_capture (tree lambda_stack, tree id, tree initializer)
598 bool this_capture_p = (id == this_identifier);
600 tree var = NULL_TREE;
602 tree saved_class_type = current_class_type;
606 for (node = lambda_stack;
608 node = TREE_CHAIN (node))
610 tree lambda = TREE_VALUE (node);
612 current_class_type = LAMBDA_EXPR_CLOSURE (lambda);
613 if (DECL_PACK_P (initializer))
614 initializer = make_pack_expansion (initializer);
615 var = add_capture (lambda,
620 && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
622 /*explicit_init_p=*/false);
623 initializer = convert_from_reference (var);
626 current_class_type = saved_class_type;
631 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the
632 form of an INDIRECT_REF, possibly adding it through default
633 capturing, if ADD_CAPTURE_P is true. */
636 lambda_expr_this_capture (tree lambda, bool add_capture_p)
640 tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
642 /* In unevaluated context this isn't an odr-use, so don't capture. */
643 if (cp_unevaluated_operand)
644 add_capture_p = false;
646 /* Try to default capture 'this' if we can. */
649 || LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE))
651 tree lambda_stack = NULL_TREE;
652 tree init = NULL_TREE;
654 /* If we are in a lambda function, we can move out until we hit:
655 1. a non-lambda function or NSDMI,
656 2. a lambda function capturing 'this', or
657 3. a non-default capturing lambda function. */
658 for (tree tlambda = lambda; ;)
660 lambda_stack = tree_cons (NULL_TREE,
664 if (LAMBDA_EXPR_EXTRA_SCOPE (tlambda)
665 && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (tlambda)) == FIELD_DECL)
667 /* In an NSDMI, we don't have a function to look up the decl in,
668 but the fake 'this' pointer that we're using for parsing is
670 init = scope_chain->x_current_class_ptr;
672 (init && (TREE_TYPE (TREE_TYPE (init))
673 == current_nonlambda_class_type ()));
677 tree closure_decl = TYPE_NAME (LAMBDA_EXPR_CLOSURE (tlambda));
678 tree containing_function = decl_function_context (closure_decl);
680 if (containing_function == NULL_TREE)
681 /* We ran out of scopes; there's no 'this' to capture. */
684 if (!LAMBDA_FUNCTION_P (containing_function))
686 /* We found a non-lambda function. */
687 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function))
688 /* First parameter is 'this'. */
689 init = DECL_ARGUMENTS (containing_function);
694 = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
696 if (LAMBDA_EXPR_THIS_CAPTURE (tlambda))
698 /* An outer lambda has already captured 'this'. */
699 init = LAMBDA_EXPR_THIS_CAPTURE (tlambda);
703 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (tlambda) == CPLD_NONE)
704 /* An outer lambda won't let us capture 'this'. */
711 this_capture = add_default_capture (lambda_stack,
712 /*id=*/this_identifier,
719 if (cp_unevaluated_operand)
720 result = this_capture;
721 else if (!this_capture)
725 error ("%<this%> was not captured for this lambda function");
726 result = error_mark_node;
733 /* To make sure that current_class_ref is for the lambda. */
734 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref))
735 == LAMBDA_EXPR_CLOSURE (lambda));
737 result = this_capture;
739 /* If 'this' is captured, each use of 'this' is transformed into an
740 access to the corresponding unnamed data member of the closure
741 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
742 ensures that the transformed expression is an rvalue. ] */
743 result = rvalue (result);
749 /* We don't want to capture 'this' until we know we need it, i.e. after
750 overload resolution has chosen a non-static member function. At that
751 point we call this function to turn a dummy object into a use of the
755 maybe_resolve_dummy (tree object, bool add_capture_p)
757 if (!is_dummy_object (object))
760 tree type = TYPE_MAIN_VARIANT (TREE_TYPE (object));
761 gcc_assert (!TYPE_PTR_P (type));
763 if (type != current_class_type
764 && current_class_type
765 && LAMBDA_TYPE_P (current_class_type)
766 && lambda_function (current_class_type)
767 && DERIVED_FROM_P (type, current_nonlambda_class_type ()))
769 /* In a lambda, need to go through 'this' capture. */
770 tree lam = CLASSTYPE_LAMBDA_EXPR (current_class_type);
771 tree cap = lambda_expr_this_capture (lam, add_capture_p);
772 if (cap && cap != error_mark_node)
773 object = build_x_indirect_ref (EXPR_LOCATION (object), cap,
774 RO_NULL, tf_warning_or_error);
780 /* Returns the innermost non-lambda function. */
783 current_nonlambda_function (void)
785 tree fn = current_function_decl;
786 while (fn && LAMBDA_FUNCTION_P (fn))
787 fn = decl_function_context (fn);
791 /* Returns the method basetype of the innermost non-lambda function, or
792 NULL_TREE if none. */
795 nonlambda_method_basetype (void)
798 if (!current_class_ref)
801 type = current_class_type;
802 if (!LAMBDA_TYPE_P (type))
805 /* Find the nearest enclosing non-lambda function. */
806 fn = TYPE_NAME (type);
808 fn = decl_function_context (fn);
809 while (fn && LAMBDA_FUNCTION_P (fn));
811 if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
814 return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
817 /* Like current_scope, but looking through lambdas. */
820 current_nonlambda_scope (void)
822 tree scope = current_scope ();
825 if (TREE_CODE (scope) == FUNCTION_DECL
826 && LAMBDA_FUNCTION_P (scope))
828 scope = CP_TYPE_CONTEXT (DECL_CONTEXT (scope));
831 else if (LAMBDA_TYPE_P (scope))
833 scope = CP_TYPE_CONTEXT (scope);
841 /* Helper function for maybe_add_lambda_conv_op; build a CALL_EXPR with
842 indicated FN and NARGS, but do not initialize the return type or any of the
846 prepare_op_call (tree fn, int nargs)
850 t = build_vl_exp (CALL_EXPR, nargs + 3);
851 CALL_EXPR_FN (t) = fn;
852 CALL_EXPR_STATIC_CHAIN (t) = NULL;
857 /* Return true iff CALLOP is the op() for a generic lambda. */
860 generic_lambda_fn_p (tree callop)
862 return (LAMBDA_FUNCTION_P (callop)
863 && DECL_TEMPLATE_INFO (callop)
864 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (callop)));
867 /* If the closure TYPE has a static op(), also add a conversion to function
871 maybe_add_lambda_conv_op (tree type)
873 bool nested = (cfun != NULL);
874 bool nested_def = decl_function_context (TYPE_MAIN_DECL (type));
875 tree callop = lambda_function (type);
876 tree lam = CLASSTYPE_LAMBDA_EXPR (type);
878 if (LAMBDA_EXPR_CAPTURE_LIST (lam) != NULL_TREE
879 || LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam) != CPLD_NONE)
882 if (processing_template_decl)
885 bool const generic_lambda_p = generic_lambda_fn_p (callop);
887 if (!generic_lambda_p && DECL_INITIAL (callop) == NULL_TREE)
889 /* If the op() wasn't instantiated due to errors, give up. */
890 gcc_assert (errorcount || sorrycount);
894 /* Non-template conversion operators are defined directly with build_call_a
895 and using DIRECT_ARGVEC for arguments (including 'this'). Templates are
896 deferred and the CALL is built in-place. In the case of a deduced return
897 call op, the decltype expression, DECLTYPE_CALL, used as a substitute for
898 the return type is also built in-place. The arguments of DECLTYPE_CALL in
899 the return expression may differ in flags from those in the body CALL. In
900 particular, parameter pack expansions are marked PACK_EXPANSION_LOCAL_P in
901 the body CALL, but not in DECLTYPE_CALL. */
903 vec<tree, va_gc> *direct_argvec = 0;
904 tree decltype_call = 0, call = 0;
905 tree optype = TREE_TYPE (callop);
906 tree fn_result = TREE_TYPE (optype);
908 tree thisarg = build_nop (TREE_TYPE (DECL_ARGUMENTS (callop)),
910 if (generic_lambda_p)
912 /* Prepare the dependent member call for the static member function
913 '_FUN' and, potentially, prepare another call to be used in a decltype
914 return expression for a deduced return call op to allow for simple
915 implementation of the conversion operator. */
917 tree instance = cp_build_indirect_ref (thisarg, RO_NULL,
918 tf_warning_or_error);
919 tree objfn = build_min (COMPONENT_REF, NULL_TREE,
920 instance, DECL_NAME (callop), NULL_TREE);
921 int nargs = list_length (DECL_ARGUMENTS (callop)) - 1;
923 call = prepare_op_call (objfn, nargs);
924 if (type_uses_auto (fn_result))
925 decltype_call = prepare_op_call (objfn, nargs);
929 direct_argvec = make_tree_vector ();
930 direct_argvec->quick_push (thisarg);
933 /* Copy CALLOP's argument list (as per 'copy_list') as FN_ARGS in order to
934 declare the static member function "_FUN" below. For each arg append to
935 DIRECT_ARGVEC (for the non-template case) or populate the pre-allocated
936 call args (for the template case). If a parameter pack is found, expand
937 it, flagging it as PACK_EXPANSION_LOCAL_P for the body call. */
939 tree fn_args = NULL_TREE;
942 tree src = DECL_CHAIN (DECL_ARGUMENTS (callop));
947 tree new_node = copy_node (src);
950 fn_args = tgt = new_node;
953 TREE_CHAIN (tgt) = new_node;
959 if (generic_lambda_p)
961 ++processing_template_decl;
962 tree a = forward_parm (tgt);
963 --processing_template_decl;
965 CALL_EXPR_ARG (call, ix) = a;
967 CALL_EXPR_ARG (decltype_call, ix) = unshare_expr (a);
969 if (PACK_EXPANSION_P (a))
970 /* Set this after unsharing so it's not in decltype_call. */
971 PACK_EXPANSION_LOCAL_P (a) = true;
976 vec_safe_push (direct_argvec, tgt);
978 src = TREE_CHAIN (src);
983 if (generic_lambda_p)
987 ++processing_template_decl;
988 fn_result = finish_decltype_type
989 (decltype_call, /*id_expression_or_member_access_p=*/false,
990 tf_warning_or_error);
991 --processing_template_decl;
995 call = build_call_a (callop,
996 direct_argvec->length (),
997 direct_argvec->address ());
999 CALL_FROM_THUNK_P (call) = 1;
1001 tree stattype = build_function_type (fn_result, FUNCTION_ARG_CHAIN (callop));
1002 stattype = (cp_build_type_attribute_variant
1003 (stattype, TYPE_ATTRIBUTES (optype)));
1005 /* First build up the conversion op. */
1007 tree rettype = build_pointer_type (stattype);
1008 tree name = mangle_conv_op_name_for_type (rettype);
1009 tree thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
1010 tree fntype = build_method_type_directly (thistype, rettype, void_list_node);
1011 tree convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
1013 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
1014 DECL_ALIGN (fn) = MINIMUM_METHOD_BOUNDARY;
1015 SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
1016 grokclassfn (type, fn, NO_SPECIAL);
1017 set_linkage_according_to_type (type, fn);
1018 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
1019 DECL_IN_AGGR_P (fn) = 1;
1020 DECL_ARTIFICIAL (fn) = 1;
1021 DECL_NOT_REALLY_EXTERN (fn) = 1;
1022 DECL_DECLARED_INLINE_P (fn) = 1;
1023 DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
1025 DECL_INTERFACE_KNOWN (fn) = 1;
1027 if (generic_lambda_p)
1028 fn = add_inherited_template_parms (fn, DECL_TI_TEMPLATE (callop));
1030 add_method (type, fn, NULL_TREE);
1032 /* Generic thunk code fails for varargs; we'll complain in mark_used if
1033 the conversion op is used. */
1034 if (varargs_function_p (callop))
1036 DECL_DELETED_FN (fn) = 1;
1040 /* Now build up the thunk to be returned. */
1042 name = get_identifier ("_FUN");
1043 tree statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
1045 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
1046 grokclassfn (type, fn, NO_SPECIAL);
1047 set_linkage_according_to_type (type, fn);
1048 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
1049 DECL_IN_AGGR_P (fn) = 1;
1050 DECL_ARTIFICIAL (fn) = 1;
1051 DECL_NOT_REALLY_EXTERN (fn) = 1;
1052 DECL_DECLARED_INLINE_P (fn) = 1;
1053 DECL_STATIC_FUNCTION_P (fn) = 1;
1054 DECL_ARGUMENTS (fn) = fn_args;
1055 for (tree arg = fn_args; arg; arg = DECL_CHAIN (arg))
1057 /* Avoid duplicate -Wshadow warnings. */
1058 DECL_NAME (arg) = NULL_TREE;
1059 DECL_CONTEXT (arg) = fn;
1062 DECL_INTERFACE_KNOWN (fn) = 1;
1064 if (generic_lambda_p)
1065 fn = add_inherited_template_parms (fn, DECL_TI_TEMPLATE (callop));
1067 if (flag_sanitize & SANITIZE_NULL)
1069 /* Don't UBsan this function; we're deliberately calling op() with a null
1071 tree attrs = build_tree_list (get_identifier ("no_sanitize_undefined"),
1073 cplus_decl_attributes (&fn, attrs, 0);
1076 add_method (type, fn, NULL_TREE);
1079 push_function_context ();
1081 /* Still increment function_depth so that we don't GC in the
1082 middle of an expression. */
1085 /* Generate the body of the thunk. */
1087 start_preparsed_function (statfn, NULL_TREE,
1088 SF_PRE_PARSED | SF_INCLASS_INLINE);
1089 if (DECL_ONE_ONLY (statfn))
1091 /* Put the thunk in the same comdat group as the call op. */
1092 cgraph_node::get_create (statfn)->add_to_same_comdat_group
1093 (cgraph_node::get_create (callop));
1095 tree body = begin_function_body ();
1096 tree compound_stmt = begin_compound_stmt (0);
1097 if (!generic_lambda_p)
1099 set_flags_from_callee (call);
1100 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
1101 call = build_cplus_new (TREE_TYPE (call), call, tf_warning_or_error);
1103 call = convert_from_reference (call);
1104 finish_return_stmt (call);
1106 finish_compound_stmt (compound_stmt);
1107 finish_function_body (body);
1109 fn = finish_function (/*inline*/2);
1110 if (!generic_lambda_p)
1111 expand_or_defer_fn (fn);
1113 /* Generate the body of the conversion op. */
1115 start_preparsed_function (convfn, NULL_TREE,
1116 SF_PRE_PARSED | SF_INCLASS_INLINE);
1117 body = begin_function_body ();
1118 compound_stmt = begin_compound_stmt (0);
1120 /* decl_needed_p needs to see that it's used. */
1121 TREE_USED (statfn) = 1;
1122 finish_return_stmt (decay_conversion (statfn, tf_warning_or_error));
1124 finish_compound_stmt (compound_stmt);
1125 finish_function_body (body);
1127 fn = finish_function (/*inline*/2);
1128 if (!generic_lambda_p)
1129 expand_or_defer_fn (fn);
1132 pop_function_context ();
1137 /* Returns true iff VAL is a lambda-related declaration which should
1138 be ignored by unqualified lookup. */
1141 is_lambda_ignored_entity (tree val)
1143 /* In unevaluated context, look past normal capture proxies. */
1144 if (cp_unevaluated_operand && is_normal_capture_proxy (val))
1147 /* Always ignore lambda fields, their names are only for debugging. */
1148 if (TREE_CODE (val) == FIELD_DECL
1149 && CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (val)))
1152 /* None of the lookups that use qualify_lookup want the op() from the
1153 lambda; they want the one from the enclosing class. */
1154 if (TREE_CODE (val) == FUNCTION_DECL && LAMBDA_FUNCTION_P (val))