PR c++/55879
[official-gcc.git] / gcc / cp / semantics.c
blob46c2e6438067a39dda90a6b0cc2256cc35b053dc
1 /* Perform the semantic phase of 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-2013 Free Software Foundation, Inc.
7 Written by Mark Mitchell (mmitchell@usa.net) based on code found
8 formerly in parse.y and pt.c.
10 This file is part of GCC.
12 GCC is free software; you can redistribute it and/or modify it
13 under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 3, or (at your option)
15 any later version.
17 GCC is distributed in the hope that it will be useful, but
18 WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with GCC; see the file COPYING3. If not see
24 <http://www.gnu.org/licenses/>. */
26 #include "config.h"
27 #include "system.h"
28 #include "coretypes.h"
29 #include "tm.h"
30 #include "tree.h"
31 #include "cp-tree.h"
32 #include "c-family/c-common.h"
33 #include "c-family/c-objc.h"
34 #include "tree-inline.h"
35 #include "intl.h"
36 #include "toplev.h"
37 #include "flags.h"
38 #include "timevar.h"
39 #include "diagnostic.h"
40 #include "cgraph.h"
41 #include "tree-iterator.h"
42 #include "vec.h"
43 #include "target.h"
44 #include "gimple.h"
45 #include "bitmap.h"
46 #include "hash-table.h"
48 static bool verify_constant (tree, bool, bool *, bool *);
49 #define VERIFY_CONSTANT(X) \
50 do { \
51 if (verify_constant ((X), allow_non_constant, non_constant_p, overflow_p)) \
52 return t; \
53 } while (0)
55 /* There routines provide a modular interface to perform many parsing
56 operations. They may therefore be used during actual parsing, or
57 during template instantiation, which may be regarded as a
58 degenerate form of parsing. */
60 static tree maybe_convert_cond (tree);
61 static tree finalize_nrv_r (tree *, int *, void *);
62 static tree capture_decltype (tree);
65 /* Deferred Access Checking Overview
66 ---------------------------------
68 Most C++ expressions and declarations require access checking
69 to be performed during parsing. However, in several cases,
70 this has to be treated differently.
72 For member declarations, access checking has to be deferred
73 until more information about the declaration is known. For
74 example:
76 class A {
77 typedef int X;
78 public:
79 X f();
82 A::X A::f();
83 A::X g();
85 When we are parsing the function return type `A::X', we don't
86 really know if this is allowed until we parse the function name.
88 Furthermore, some contexts require that access checking is
89 never performed at all. These include class heads, and template
90 instantiations.
92 Typical use of access checking functions is described here:
94 1. When we enter a context that requires certain access checking
95 mode, the function `push_deferring_access_checks' is called with
96 DEFERRING argument specifying the desired mode. Access checking
97 may be performed immediately (dk_no_deferred), deferred
98 (dk_deferred), or not performed (dk_no_check).
100 2. When a declaration such as a type, or a variable, is encountered,
101 the function `perform_or_defer_access_check' is called. It
102 maintains a vector of all deferred checks.
104 3. The global `current_class_type' or `current_function_decl' is then
105 setup by the parser. `enforce_access' relies on these information
106 to check access.
108 4. Upon exiting the context mentioned in step 1,
109 `perform_deferred_access_checks' is called to check all declaration
110 stored in the vector. `pop_deferring_access_checks' is then
111 called to restore the previous access checking mode.
113 In case of parsing error, we simply call `pop_deferring_access_checks'
114 without `perform_deferred_access_checks'. */
116 typedef struct GTY(()) deferred_access {
117 /* A vector representing name-lookups for which we have deferred
118 checking access controls. We cannot check the accessibility of
119 names used in a decl-specifier-seq until we know what is being
120 declared because code like:
122 class A {
123 class B {};
124 B* f();
127 A::B* A::f() { return 0; }
129 is valid, even though `A::B' is not generally accessible. */
130 vec<deferred_access_check, va_gc> * GTY(()) deferred_access_checks;
132 /* The current mode of access checks. */
133 enum deferring_kind deferring_access_checks_kind;
135 } deferred_access;
137 /* Data for deferred access checking. */
138 static GTY(()) vec<deferred_access, va_gc> *deferred_access_stack;
139 static GTY(()) unsigned deferred_access_no_check;
141 /* Save the current deferred access states and start deferred
142 access checking iff DEFER_P is true. */
144 void
145 push_deferring_access_checks (deferring_kind deferring)
147 /* For context like template instantiation, access checking
148 disabling applies to all nested context. */
149 if (deferred_access_no_check || deferring == dk_no_check)
150 deferred_access_no_check++;
151 else
153 deferred_access e = {NULL, deferring};
154 vec_safe_push (deferred_access_stack, e);
158 /* Resume deferring access checks again after we stopped doing
159 this previously. */
161 void
162 resume_deferring_access_checks (void)
164 if (!deferred_access_no_check)
165 deferred_access_stack->last().deferring_access_checks_kind = dk_deferred;
168 /* Stop deferring access checks. */
170 void
171 stop_deferring_access_checks (void)
173 if (!deferred_access_no_check)
174 deferred_access_stack->last().deferring_access_checks_kind = dk_no_deferred;
177 /* Discard the current deferred access checks and restore the
178 previous states. */
180 void
181 pop_deferring_access_checks (void)
183 if (deferred_access_no_check)
184 deferred_access_no_check--;
185 else
186 deferred_access_stack->pop ();
189 /* Returns a TREE_LIST representing the deferred checks.
190 The TREE_PURPOSE of each node is the type through which the
191 access occurred; the TREE_VALUE is the declaration named.
194 vec<deferred_access_check, va_gc> *
195 get_deferred_access_checks (void)
197 if (deferred_access_no_check)
198 return NULL;
199 else
200 return (deferred_access_stack->last().deferred_access_checks);
203 /* Take current deferred checks and combine with the
204 previous states if we also defer checks previously.
205 Otherwise perform checks now. */
207 void
208 pop_to_parent_deferring_access_checks (void)
210 if (deferred_access_no_check)
211 deferred_access_no_check--;
212 else
214 vec<deferred_access_check, va_gc> *checks;
215 deferred_access *ptr;
217 checks = (deferred_access_stack->last ().deferred_access_checks);
219 deferred_access_stack->pop ();
220 ptr = &deferred_access_stack->last ();
221 if (ptr->deferring_access_checks_kind == dk_no_deferred)
223 /* Check access. */
224 perform_access_checks (checks, tf_warning_or_error);
226 else
228 /* Merge with parent. */
229 int i, j;
230 deferred_access_check *chk, *probe;
232 FOR_EACH_VEC_SAFE_ELT (checks, i, chk)
234 FOR_EACH_VEC_SAFE_ELT (ptr->deferred_access_checks, j, probe)
236 if (probe->binfo == chk->binfo &&
237 probe->decl == chk->decl &&
238 probe->diag_decl == chk->diag_decl)
239 goto found;
241 /* Insert into parent's checks. */
242 vec_safe_push (ptr->deferred_access_checks, *chk);
243 found:;
249 /* Perform the access checks in CHECKS. The TREE_PURPOSE of each node
250 is the BINFO indicating the qualifying scope used to access the
251 DECL node stored in the TREE_VALUE of the node. If CHECKS is empty
252 or we aren't in SFINAE context or all the checks succeed return TRUE,
253 otherwise FALSE. */
255 bool
256 perform_access_checks (vec<deferred_access_check, va_gc> *checks,
257 tsubst_flags_t complain)
259 int i;
260 deferred_access_check *chk;
261 location_t loc = input_location;
262 bool ok = true;
264 if (!checks)
265 return true;
267 FOR_EACH_VEC_SAFE_ELT (checks, i, chk)
269 input_location = chk->loc;
270 ok &= enforce_access (chk->binfo, chk->decl, chk->diag_decl, complain);
273 input_location = loc;
274 return (complain & tf_error) ? true : ok;
277 /* Perform the deferred access checks.
279 After performing the checks, we still have to keep the list
280 `deferred_access_stack->deferred_access_checks' since we may want
281 to check access for them again later in a different context.
282 For example:
284 class A {
285 typedef int X;
286 static X a;
288 A::X A::a, x; // No error for `A::a', error for `x'
290 We have to perform deferred access of `A::X', first with `A::a',
291 next with `x'. Return value like perform_access_checks above. */
293 bool
294 perform_deferred_access_checks (tsubst_flags_t complain)
296 return perform_access_checks (get_deferred_access_checks (), complain);
299 /* Defer checking the accessibility of DECL, when looked up in
300 BINFO. DIAG_DECL is the declaration to use to print diagnostics.
301 Return value like perform_access_checks above. */
303 bool
304 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl,
305 tsubst_flags_t complain)
307 int i;
308 deferred_access *ptr;
309 deferred_access_check *chk;
312 /* Exit if we are in a context that no access checking is performed.
314 if (deferred_access_no_check)
315 return true;
317 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
319 ptr = &deferred_access_stack->last ();
321 /* If we are not supposed to defer access checks, just check now. */
322 if (ptr->deferring_access_checks_kind == dk_no_deferred)
324 bool ok = enforce_access (binfo, decl, diag_decl, complain);
325 return (complain & tf_error) ? true : ok;
328 /* See if we are already going to perform this check. */
329 FOR_EACH_VEC_SAFE_ELT (ptr->deferred_access_checks, i, chk)
331 if (chk->decl == decl && chk->binfo == binfo &&
332 chk->diag_decl == diag_decl)
334 return true;
337 /* If not, record the check. */
338 deferred_access_check new_access = {binfo, decl, diag_decl, input_location};
339 vec_safe_push (ptr->deferred_access_checks, new_access);
341 return true;
344 /* Returns nonzero if the current statement is a full expression,
345 i.e. temporaries created during that statement should be destroyed
346 at the end of the statement. */
349 stmts_are_full_exprs_p (void)
351 return current_stmt_tree ()->stmts_are_full_exprs_p;
354 /* T is a statement. Add it to the statement-tree. This is the C++
355 version. The C/ObjC frontends have a slightly different version of
356 this function. */
358 tree
359 add_stmt (tree t)
361 enum tree_code code = TREE_CODE (t);
363 if (EXPR_P (t) && code != LABEL_EXPR)
365 if (!EXPR_HAS_LOCATION (t))
366 SET_EXPR_LOCATION (t, input_location);
368 /* When we expand a statement-tree, we must know whether or not the
369 statements are full-expressions. We record that fact here. */
370 STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
373 /* Add T to the statement-tree. Non-side-effect statements need to be
374 recorded during statement expressions. */
375 gcc_checking_assert (!stmt_list_stack->is_empty ());
376 append_to_statement_list_force (t, &cur_stmt_list);
378 return t;
381 /* Returns the stmt_tree to which statements are currently being added. */
383 stmt_tree
384 current_stmt_tree (void)
386 return (cfun
387 ? &cfun->language->base.x_stmt_tree
388 : &scope_chain->x_stmt_tree);
391 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
393 static tree
394 maybe_cleanup_point_expr (tree expr)
396 if (!processing_template_decl && stmts_are_full_exprs_p ())
397 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
398 return expr;
401 /* Like maybe_cleanup_point_expr except have the type of the new expression be
402 void so we don't need to create a temporary variable to hold the inner
403 expression. The reason why we do this is because the original type might be
404 an aggregate and we cannot create a temporary variable for that type. */
406 tree
407 maybe_cleanup_point_expr_void (tree expr)
409 if (!processing_template_decl && stmts_are_full_exprs_p ())
410 expr = fold_build_cleanup_point_expr (void_type_node, expr);
411 return expr;
416 /* Create a declaration statement for the declaration given by the DECL. */
418 void
419 add_decl_expr (tree decl)
421 tree r = build_stmt (input_location, DECL_EXPR, decl);
422 if (DECL_INITIAL (decl)
423 || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
424 r = maybe_cleanup_point_expr_void (r);
425 add_stmt (r);
428 /* Finish a scope. */
430 tree
431 do_poplevel (tree stmt_list)
433 tree block = NULL;
435 if (stmts_are_full_exprs_p ())
436 block = poplevel (kept_level_p (), 1, 0);
438 stmt_list = pop_stmt_list (stmt_list);
440 if (!processing_template_decl)
442 stmt_list = c_build_bind_expr (input_location, block, stmt_list);
443 /* ??? See c_end_compound_stmt re statement expressions. */
446 return stmt_list;
449 /* Begin a new scope. */
451 static tree
452 do_pushlevel (scope_kind sk)
454 tree ret = push_stmt_list ();
455 if (stmts_are_full_exprs_p ())
456 begin_scope (sk, NULL);
457 return ret;
460 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
461 when the current scope is exited. EH_ONLY is true when this is not
462 meant to apply to normal control flow transfer. */
464 void
465 push_cleanup (tree decl, tree cleanup, bool eh_only)
467 tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
468 CLEANUP_EH_ONLY (stmt) = eh_only;
469 add_stmt (stmt);
470 CLEANUP_BODY (stmt) = push_stmt_list ();
473 /* Begin a conditional that might contain a declaration. When generating
474 normal code, we want the declaration to appear before the statement
475 containing the conditional. When generating template code, we want the
476 conditional to be rendered as the raw DECL_EXPR. */
478 static void
479 begin_cond (tree *cond_p)
481 if (processing_template_decl)
482 *cond_p = push_stmt_list ();
485 /* Finish such a conditional. */
487 static void
488 finish_cond (tree *cond_p, tree expr)
490 if (processing_template_decl)
492 tree cond = pop_stmt_list (*cond_p);
494 if (expr == NULL_TREE)
495 /* Empty condition in 'for'. */
496 gcc_assert (empty_expr_stmt_p (cond));
497 else if (check_for_bare_parameter_packs (expr))
498 expr = error_mark_node;
499 else if (!empty_expr_stmt_p (cond))
500 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), cond, expr);
502 *cond_p = expr;
505 /* If *COND_P specifies a conditional with a declaration, transform the
506 loop such that
507 while (A x = 42) { }
508 for (; A x = 42;) { }
509 becomes
510 while (true) { A x = 42; if (!x) break; }
511 for (;;) { A x = 42; if (!x) break; }
512 The statement list for BODY will be empty if the conditional did
513 not declare anything. */
515 static void
516 simplify_loop_decl_cond (tree *cond_p, tree body)
518 tree cond, if_stmt;
520 if (!TREE_SIDE_EFFECTS (body))
521 return;
523 cond = *cond_p;
524 *cond_p = boolean_true_node;
526 if_stmt = begin_if_stmt ();
527 cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
528 finish_if_stmt_cond (cond, if_stmt);
529 finish_break_stmt ();
530 finish_then_clause (if_stmt);
531 finish_if_stmt (if_stmt);
534 /* Finish a goto-statement. */
536 tree
537 finish_goto_stmt (tree destination)
539 if (TREE_CODE (destination) == IDENTIFIER_NODE)
540 destination = lookup_label (destination);
542 /* We warn about unused labels with -Wunused. That means we have to
543 mark the used labels as used. */
544 if (TREE_CODE (destination) == LABEL_DECL)
545 TREE_USED (destination) = 1;
546 else
548 destination = mark_rvalue_use (destination);
549 if (!processing_template_decl)
551 destination = cp_convert (ptr_type_node, destination,
552 tf_warning_or_error);
553 if (error_operand_p (destination))
554 return NULL_TREE;
555 destination
556 = fold_build_cleanup_point_expr (TREE_TYPE (destination),
557 destination);
561 check_goto (destination);
563 return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
566 /* COND is the condition-expression for an if, while, etc.,
567 statement. Convert it to a boolean value, if appropriate.
568 In addition, verify sequence points if -Wsequence-point is enabled. */
570 static tree
571 maybe_convert_cond (tree cond)
573 /* Empty conditions remain empty. */
574 if (!cond)
575 return NULL_TREE;
577 /* Wait until we instantiate templates before doing conversion. */
578 if (processing_template_decl)
579 return cond;
581 if (warn_sequence_point)
582 verify_sequence_points (cond);
584 /* Do the conversion. */
585 cond = convert_from_reference (cond);
587 if (TREE_CODE (cond) == MODIFY_EXPR
588 && !TREE_NO_WARNING (cond)
589 && warn_parentheses)
591 warning (OPT_Wparentheses,
592 "suggest parentheses around assignment used as truth value");
593 TREE_NO_WARNING (cond) = 1;
596 return condition_conversion (cond);
599 /* Finish an expression-statement, whose EXPRESSION is as indicated. */
601 tree
602 finish_expr_stmt (tree expr)
604 tree r = NULL_TREE;
606 if (expr != NULL_TREE)
608 if (!processing_template_decl)
610 if (warn_sequence_point)
611 verify_sequence_points (expr);
612 expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
614 else if (!type_dependent_expression_p (expr))
615 convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT,
616 tf_warning_or_error);
618 if (check_for_bare_parameter_packs (expr))
619 expr = error_mark_node;
621 /* Simplification of inner statement expressions, compound exprs,
622 etc can result in us already having an EXPR_STMT. */
623 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
625 if (TREE_CODE (expr) != EXPR_STMT)
626 expr = build_stmt (input_location, EXPR_STMT, expr);
627 expr = maybe_cleanup_point_expr_void (expr);
630 r = add_stmt (expr);
633 finish_stmt ();
635 return r;
639 /* Begin an if-statement. Returns a newly created IF_STMT if
640 appropriate. */
642 tree
643 begin_if_stmt (void)
645 tree r, scope;
646 scope = do_pushlevel (sk_cond);
647 r = build_stmt (input_location, IF_STMT, NULL_TREE,
648 NULL_TREE, NULL_TREE, scope);
649 begin_cond (&IF_COND (r));
650 return r;
653 /* Process the COND of an if-statement, which may be given by
654 IF_STMT. */
656 void
657 finish_if_stmt_cond (tree cond, tree if_stmt)
659 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
660 add_stmt (if_stmt);
661 THEN_CLAUSE (if_stmt) = push_stmt_list ();
664 /* Finish the then-clause of an if-statement, which may be given by
665 IF_STMT. */
667 tree
668 finish_then_clause (tree if_stmt)
670 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
671 return if_stmt;
674 /* Begin the else-clause of an if-statement. */
676 void
677 begin_else_clause (tree if_stmt)
679 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
682 /* Finish the else-clause of an if-statement, which may be given by
683 IF_STMT. */
685 void
686 finish_else_clause (tree if_stmt)
688 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
691 /* Finish an if-statement. */
693 void
694 finish_if_stmt (tree if_stmt)
696 tree scope = IF_SCOPE (if_stmt);
697 IF_SCOPE (if_stmt) = NULL;
698 add_stmt (do_poplevel (scope));
699 finish_stmt ();
702 /* Begin a while-statement. Returns a newly created WHILE_STMT if
703 appropriate. */
705 tree
706 begin_while_stmt (void)
708 tree r;
709 r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
710 add_stmt (r);
711 WHILE_BODY (r) = do_pushlevel (sk_block);
712 begin_cond (&WHILE_COND (r));
713 return r;
716 /* Process the COND of a while-statement, which may be given by
717 WHILE_STMT. */
719 void
720 finish_while_stmt_cond (tree cond, tree while_stmt)
722 finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
723 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
726 /* Finish a while-statement, which may be given by WHILE_STMT. */
728 void
729 finish_while_stmt (tree while_stmt)
731 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
732 finish_stmt ();
735 /* Begin a do-statement. Returns a newly created DO_STMT if
736 appropriate. */
738 tree
739 begin_do_stmt (void)
741 tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
742 add_stmt (r);
743 DO_BODY (r) = push_stmt_list ();
744 return r;
747 /* Finish the body of a do-statement, which may be given by DO_STMT. */
749 void
750 finish_do_body (tree do_stmt)
752 tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
754 if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
755 body = STATEMENT_LIST_TAIL (body)->stmt;
757 if (IS_EMPTY_STMT (body))
758 warning (OPT_Wempty_body,
759 "suggest explicit braces around empty body in %<do%> statement");
762 /* Finish a do-statement, which may be given by DO_STMT, and whose
763 COND is as indicated. */
765 void
766 finish_do_stmt (tree cond, tree do_stmt)
768 cond = maybe_convert_cond (cond);
769 DO_COND (do_stmt) = cond;
770 finish_stmt ();
773 /* Finish a return-statement. The EXPRESSION returned, if any, is as
774 indicated. */
776 tree
777 finish_return_stmt (tree expr)
779 tree r;
780 bool no_warning;
782 expr = check_return_expr (expr, &no_warning);
784 if (flag_openmp && !check_omp_return ())
785 return error_mark_node;
786 if (!processing_template_decl)
788 if (warn_sequence_point)
789 verify_sequence_points (expr);
791 if (DECL_DESTRUCTOR_P (current_function_decl)
792 || (DECL_CONSTRUCTOR_P (current_function_decl)
793 && targetm.cxx.cdtor_returns_this ()))
795 /* Similarly, all destructors must run destructors for
796 base-classes before returning. So, all returns in a
797 destructor get sent to the DTOR_LABEL; finish_function emits
798 code to return a value there. */
799 return finish_goto_stmt (cdtor_label);
803 r = build_stmt (input_location, RETURN_EXPR, expr);
804 TREE_NO_WARNING (r) |= no_warning;
805 r = maybe_cleanup_point_expr_void (r);
806 r = add_stmt (r);
807 finish_stmt ();
809 return r;
812 /* Begin the scope of a for-statement or a range-for-statement.
813 Both the returned trees are to be used in a call to
814 begin_for_stmt or begin_range_for_stmt. */
816 tree
817 begin_for_scope (tree *init)
819 tree scope = NULL_TREE;
820 if (flag_new_for_scope > 0)
821 scope = do_pushlevel (sk_for);
823 if (processing_template_decl)
824 *init = push_stmt_list ();
825 else
826 *init = NULL_TREE;
828 return scope;
831 /* Begin a for-statement. Returns a new FOR_STMT.
832 SCOPE and INIT should be the return of begin_for_scope,
833 or both NULL_TREE */
835 tree
836 begin_for_stmt (tree scope, tree init)
838 tree r;
840 r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
841 NULL_TREE, NULL_TREE, NULL_TREE);
843 if (scope == NULL_TREE)
845 gcc_assert (!init || !(flag_new_for_scope > 0));
846 if (!init)
847 scope = begin_for_scope (&init);
849 FOR_INIT_STMT (r) = init;
850 FOR_SCOPE (r) = scope;
852 return r;
855 /* Finish the for-init-statement of a for-statement, which may be
856 given by FOR_STMT. */
858 void
859 finish_for_init_stmt (tree for_stmt)
861 if (processing_template_decl)
862 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
863 add_stmt (for_stmt);
864 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
865 begin_cond (&FOR_COND (for_stmt));
868 /* Finish the COND of a for-statement, which may be given by
869 FOR_STMT. */
871 void
872 finish_for_cond (tree cond, tree for_stmt)
874 finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
875 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
878 /* Finish the increment-EXPRESSION in a for-statement, which may be
879 given by FOR_STMT. */
881 void
882 finish_for_expr (tree expr, tree for_stmt)
884 if (!expr)
885 return;
886 /* If EXPR is an overloaded function, issue an error; there is no
887 context available to use to perform overload resolution. */
888 if (type_unknown_p (expr))
890 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
891 expr = error_mark_node;
893 if (!processing_template_decl)
895 if (warn_sequence_point)
896 verify_sequence_points (expr);
897 expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
898 tf_warning_or_error);
900 else if (!type_dependent_expression_p (expr))
901 convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
902 tf_warning_or_error);
903 expr = maybe_cleanup_point_expr_void (expr);
904 if (check_for_bare_parameter_packs (expr))
905 expr = error_mark_node;
906 FOR_EXPR (for_stmt) = expr;
909 /* Finish the body of a for-statement, which may be given by
910 FOR_STMT. The increment-EXPR for the loop must be
911 provided.
912 It can also finish RANGE_FOR_STMT. */
914 void
915 finish_for_stmt (tree for_stmt)
917 if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
918 RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
919 else
920 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
922 /* Pop the scope for the body of the loop. */
923 if (flag_new_for_scope > 0)
925 tree scope;
926 tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT
927 ? &RANGE_FOR_SCOPE (for_stmt)
928 : &FOR_SCOPE (for_stmt));
929 scope = *scope_ptr;
930 *scope_ptr = NULL;
931 add_stmt (do_poplevel (scope));
934 finish_stmt ();
937 /* Begin a range-for-statement. Returns a new RANGE_FOR_STMT.
938 SCOPE and INIT should be the return of begin_for_scope,
939 or both NULL_TREE .
940 To finish it call finish_for_stmt(). */
942 tree
943 begin_range_for_stmt (tree scope, tree init)
945 tree r;
947 r = build_stmt (input_location, RANGE_FOR_STMT,
948 NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
950 if (scope == NULL_TREE)
952 gcc_assert (!init || !(flag_new_for_scope > 0));
953 if (!init)
954 scope = begin_for_scope (&init);
957 /* RANGE_FOR_STMTs do not use nor save the init tree, so we
958 pop it now. */
959 if (init)
960 pop_stmt_list (init);
961 RANGE_FOR_SCOPE (r) = scope;
963 return r;
966 /* Finish the head of a range-based for statement, which may
967 be given by RANGE_FOR_STMT. DECL must be the declaration
968 and EXPR must be the loop expression. */
970 void
971 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
973 RANGE_FOR_DECL (range_for_stmt) = decl;
974 RANGE_FOR_EXPR (range_for_stmt) = expr;
975 add_stmt (range_for_stmt);
976 RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
979 /* Finish a break-statement. */
981 tree
982 finish_break_stmt (void)
984 /* In switch statements break is sometimes stylistically used after
985 a return statement. This can lead to spurious warnings about
986 control reaching the end of a non-void function when it is
987 inlined. Note that we are calling block_may_fallthru with
988 language specific tree nodes; this works because
989 block_may_fallthru returns true when given something it does not
990 understand. */
991 if (!block_may_fallthru (cur_stmt_list))
992 return void_zero_node;
993 return add_stmt (build_stmt (input_location, BREAK_STMT));
996 /* Finish a continue-statement. */
998 tree
999 finish_continue_stmt (void)
1001 return add_stmt (build_stmt (input_location, CONTINUE_STMT));
1004 /* Begin a switch-statement. Returns a new SWITCH_STMT if
1005 appropriate. */
1007 tree
1008 begin_switch_stmt (void)
1010 tree r, scope;
1012 scope = do_pushlevel (sk_cond);
1013 r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE, scope);
1015 begin_cond (&SWITCH_STMT_COND (r));
1017 return r;
1020 /* Finish the cond of a switch-statement. */
1022 void
1023 finish_switch_cond (tree cond, tree switch_stmt)
1025 tree orig_type = NULL;
1026 if (!processing_template_decl)
1028 /* Convert the condition to an integer or enumeration type. */
1029 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
1030 if (cond == NULL_TREE)
1032 error ("switch quantity not an integer");
1033 cond = error_mark_node;
1035 orig_type = TREE_TYPE (cond);
1036 if (cond != error_mark_node)
1038 /* [stmt.switch]
1040 Integral promotions are performed. */
1041 cond = perform_integral_promotions (cond);
1042 cond = maybe_cleanup_point_expr (cond);
1045 if (check_for_bare_parameter_packs (cond))
1046 cond = error_mark_node;
1047 else if (!processing_template_decl && warn_sequence_point)
1048 verify_sequence_points (cond);
1050 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
1051 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
1052 add_stmt (switch_stmt);
1053 push_switch (switch_stmt);
1054 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1057 /* Finish the body of a switch-statement, which may be given by
1058 SWITCH_STMT. The COND to switch on is indicated. */
1060 void
1061 finish_switch_stmt (tree switch_stmt)
1063 tree scope;
1065 SWITCH_STMT_BODY (switch_stmt) =
1066 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1067 pop_switch ();
1068 finish_stmt ();
1070 scope = SWITCH_STMT_SCOPE (switch_stmt);
1071 SWITCH_STMT_SCOPE (switch_stmt) = NULL;
1072 add_stmt (do_poplevel (scope));
1075 /* Begin a try-block. Returns a newly-created TRY_BLOCK if
1076 appropriate. */
1078 tree
1079 begin_try_block (void)
1081 tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1082 add_stmt (r);
1083 TRY_STMTS (r) = push_stmt_list ();
1084 return r;
1087 /* Likewise, for a function-try-block. The block returned in
1088 *COMPOUND_STMT is an artificial outer scope, containing the
1089 function-try-block. */
1091 tree
1092 begin_function_try_block (tree *compound_stmt)
1094 tree r;
1095 /* This outer scope does not exist in the C++ standard, but we need
1096 a place to put __FUNCTION__ and similar variables. */
1097 *compound_stmt = begin_compound_stmt (0);
1098 r = begin_try_block ();
1099 FN_TRY_BLOCK_P (r) = 1;
1100 return r;
1103 /* Finish a try-block, which may be given by TRY_BLOCK. */
1105 void
1106 finish_try_block (tree try_block)
1108 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1109 TRY_HANDLERS (try_block) = push_stmt_list ();
1112 /* Finish the body of a cleanup try-block, which may be given by
1113 TRY_BLOCK. */
1115 void
1116 finish_cleanup_try_block (tree try_block)
1118 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1121 /* Finish an implicitly generated try-block, with a cleanup is given
1122 by CLEANUP. */
1124 void
1125 finish_cleanup (tree cleanup, tree try_block)
1127 TRY_HANDLERS (try_block) = cleanup;
1128 CLEANUP_P (try_block) = 1;
1131 /* Likewise, for a function-try-block. */
1133 void
1134 finish_function_try_block (tree try_block)
1136 finish_try_block (try_block);
1137 /* FIXME : something queer about CTOR_INITIALIZER somehow following
1138 the try block, but moving it inside. */
1139 in_function_try_handler = 1;
1142 /* Finish a handler-sequence for a try-block, which may be given by
1143 TRY_BLOCK. */
1145 void
1146 finish_handler_sequence (tree try_block)
1148 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1149 check_handlers (TRY_HANDLERS (try_block));
1152 /* Finish the handler-seq for a function-try-block, given by
1153 TRY_BLOCK. COMPOUND_STMT is the outer block created by
1154 begin_function_try_block. */
1156 void
1157 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1159 in_function_try_handler = 0;
1160 finish_handler_sequence (try_block);
1161 finish_compound_stmt (compound_stmt);
1164 /* Begin a handler. Returns a HANDLER if appropriate. */
1166 tree
1167 begin_handler (void)
1169 tree r;
1171 r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1172 add_stmt (r);
1174 /* Create a binding level for the eh_info and the exception object
1175 cleanup. */
1176 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1178 return r;
1181 /* Finish the handler-parameters for a handler, which may be given by
1182 HANDLER. DECL is the declaration for the catch parameter, or NULL
1183 if this is a `catch (...)' clause. */
1185 void
1186 finish_handler_parms (tree decl, tree handler)
1188 tree type = NULL_TREE;
1189 if (processing_template_decl)
1191 if (decl)
1193 decl = pushdecl (decl);
1194 decl = push_template_decl (decl);
1195 HANDLER_PARMS (handler) = decl;
1196 type = TREE_TYPE (decl);
1199 else
1200 type = expand_start_catch_block (decl);
1201 HANDLER_TYPE (handler) = type;
1202 if (!processing_template_decl && type)
1203 mark_used (eh_type_info (type));
1206 /* Finish a handler, which may be given by HANDLER. The BLOCKs are
1207 the return value from the matching call to finish_handler_parms. */
1209 void
1210 finish_handler (tree handler)
1212 if (!processing_template_decl)
1213 expand_end_catch_block ();
1214 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1217 /* Begin a compound statement. FLAGS contains some bits that control the
1218 behavior and context. If BCS_NO_SCOPE is set, the compound statement
1219 does not define a scope. If BCS_FN_BODY is set, this is the outermost
1220 block of a function. If BCS_TRY_BLOCK is set, this is the block
1221 created on behalf of a TRY statement. Returns a token to be passed to
1222 finish_compound_stmt. */
1224 tree
1225 begin_compound_stmt (unsigned int flags)
1227 tree r;
1229 if (flags & BCS_NO_SCOPE)
1231 r = push_stmt_list ();
1232 STATEMENT_LIST_NO_SCOPE (r) = 1;
1234 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1235 But, if it's a statement-expression with a scopeless block, there's
1236 nothing to keep, and we don't want to accidentally keep a block
1237 *inside* the scopeless block. */
1238 keep_next_level (false);
1240 else
1241 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1243 /* When processing a template, we need to remember where the braces were,
1244 so that we can set up identical scopes when instantiating the template
1245 later. BIND_EXPR is a handy candidate for this.
1246 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1247 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1248 processing templates. */
1249 if (processing_template_decl)
1251 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1252 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1253 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1254 TREE_SIDE_EFFECTS (r) = 1;
1257 return r;
1260 /* Finish a compound-statement, which is given by STMT. */
1262 void
1263 finish_compound_stmt (tree stmt)
1265 if (TREE_CODE (stmt) == BIND_EXPR)
1267 tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1268 /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1269 discard the BIND_EXPR so it can be merged with the containing
1270 STATEMENT_LIST. */
1271 if (TREE_CODE (body) == STATEMENT_LIST
1272 && STATEMENT_LIST_HEAD (body) == NULL
1273 && !BIND_EXPR_BODY_BLOCK (stmt)
1274 && !BIND_EXPR_TRY_BLOCK (stmt))
1275 stmt = body;
1276 else
1277 BIND_EXPR_BODY (stmt) = body;
1279 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1280 stmt = pop_stmt_list (stmt);
1281 else
1283 /* Destroy any ObjC "super" receivers that may have been
1284 created. */
1285 objc_clear_super_receiver ();
1287 stmt = do_poplevel (stmt);
1290 /* ??? See c_end_compound_stmt wrt statement expressions. */
1291 add_stmt (stmt);
1292 finish_stmt ();
1295 /* Finish an asm-statement, whose components are a STRING, some
1296 OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1297 LABELS. Also note whether the asm-statement should be
1298 considered volatile. */
1300 tree
1301 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1302 tree input_operands, tree clobbers, tree labels)
1304 tree r;
1305 tree t;
1306 int ninputs = list_length (input_operands);
1307 int noutputs = list_length (output_operands);
1309 if (!processing_template_decl)
1311 const char *constraint;
1312 const char **oconstraints;
1313 bool allows_mem, allows_reg, is_inout;
1314 tree operand;
1315 int i;
1317 oconstraints = XALLOCAVEC (const char *, noutputs);
1319 string = resolve_asm_operand_names (string, output_operands,
1320 input_operands, labels);
1322 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1324 operand = TREE_VALUE (t);
1326 /* ??? Really, this should not be here. Users should be using a
1327 proper lvalue, dammit. But there's a long history of using
1328 casts in the output operands. In cases like longlong.h, this
1329 becomes a primitive form of typechecking -- if the cast can be
1330 removed, then the output operand had a type of the proper width;
1331 otherwise we'll get an error. Gross, but ... */
1332 STRIP_NOPS (operand);
1334 operand = mark_lvalue_use (operand);
1336 if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1337 operand = error_mark_node;
1339 if (operand != error_mark_node
1340 && (TREE_READONLY (operand)
1341 || CP_TYPE_CONST_P (TREE_TYPE (operand))
1342 /* Functions are not modifiable, even though they are
1343 lvalues. */
1344 || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1345 || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1346 /* If it's an aggregate and any field is const, then it is
1347 effectively const. */
1348 || (CLASS_TYPE_P (TREE_TYPE (operand))
1349 && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1350 cxx_readonly_error (operand, lv_asm);
1352 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1353 oconstraints[i] = constraint;
1355 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1356 &allows_mem, &allows_reg, &is_inout))
1358 /* If the operand is going to end up in memory,
1359 mark it addressable. */
1360 if (!allows_reg && !cxx_mark_addressable (operand))
1361 operand = error_mark_node;
1363 else
1364 operand = error_mark_node;
1366 TREE_VALUE (t) = operand;
1369 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1371 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1372 bool constraint_parsed
1373 = parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1374 oconstraints, &allows_mem, &allows_reg);
1375 /* If the operand is going to end up in memory, don't call
1376 decay_conversion. */
1377 if (constraint_parsed && !allows_reg && allows_mem)
1378 operand = mark_lvalue_use (TREE_VALUE (t));
1379 else
1380 operand = decay_conversion (TREE_VALUE (t), tf_warning_or_error);
1382 /* If the type of the operand hasn't been determined (e.g.,
1383 because it involves an overloaded function), then issue
1384 an error message. There's no context available to
1385 resolve the overloading. */
1386 if (TREE_TYPE (operand) == unknown_type_node)
1388 error ("type of asm operand %qE could not be determined",
1389 TREE_VALUE (t));
1390 operand = error_mark_node;
1393 if (constraint_parsed)
1395 /* If the operand is going to end up in memory,
1396 mark it addressable. */
1397 if (!allows_reg && allows_mem)
1399 /* Strip the nops as we allow this case. FIXME, this really
1400 should be rejected or made deprecated. */
1401 STRIP_NOPS (operand);
1402 if (!cxx_mark_addressable (operand))
1403 operand = error_mark_node;
1405 else if (!allows_reg && !allows_mem)
1407 /* If constraint allows neither register nor memory,
1408 try harder to get a constant. */
1409 tree constop = maybe_constant_value (operand);
1410 if (TREE_CONSTANT (constop))
1411 operand = constop;
1414 else
1415 operand = error_mark_node;
1417 TREE_VALUE (t) = operand;
1421 r = build_stmt (input_location, ASM_EXPR, string,
1422 output_operands, input_operands,
1423 clobbers, labels);
1424 ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1425 r = maybe_cleanup_point_expr_void (r);
1426 return add_stmt (r);
1429 /* Finish a label with the indicated NAME. Returns the new label. */
1431 tree
1432 finish_label_stmt (tree name)
1434 tree decl = define_label (input_location, name);
1436 if (decl == error_mark_node)
1437 return error_mark_node;
1439 add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1441 return decl;
1444 /* Finish a series of declarations for local labels. G++ allows users
1445 to declare "local" labels, i.e., labels with scope. This extension
1446 is useful when writing code involving statement-expressions. */
1448 void
1449 finish_label_decl (tree name)
1451 if (!at_function_scope_p ())
1453 error ("__label__ declarations are only allowed in function scopes");
1454 return;
1457 add_decl_expr (declare_local_label (name));
1460 /* When DECL goes out of scope, make sure that CLEANUP is executed. */
1462 void
1463 finish_decl_cleanup (tree decl, tree cleanup)
1465 push_cleanup (decl, cleanup, false);
1468 /* If the current scope exits with an exception, run CLEANUP. */
1470 void
1471 finish_eh_cleanup (tree cleanup)
1473 push_cleanup (NULL, cleanup, true);
1476 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1477 order they were written by the user. Each node is as for
1478 emit_mem_initializers. */
1480 void
1481 finish_mem_initializers (tree mem_inits)
1483 /* Reorder the MEM_INITS so that they are in the order they appeared
1484 in the source program. */
1485 mem_inits = nreverse (mem_inits);
1487 if (processing_template_decl)
1489 tree mem;
1491 for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1493 /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1494 check for bare parameter packs in the TREE_VALUE, because
1495 any parameter packs in the TREE_VALUE have already been
1496 bound as part of the TREE_PURPOSE. See
1497 make_pack_expansion for more information. */
1498 if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1499 && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1500 TREE_VALUE (mem) = error_mark_node;
1503 add_stmt (build_min_nt_loc (UNKNOWN_LOCATION,
1504 CTOR_INITIALIZER, mem_inits));
1506 else
1507 emit_mem_initializers (mem_inits);
1510 /* Finish a parenthesized expression EXPR. */
1512 tree
1513 finish_parenthesized_expr (tree expr)
1515 if (EXPR_P (expr))
1516 /* This inhibits warnings in c_common_truthvalue_conversion. */
1517 TREE_NO_WARNING (expr) = 1;
1519 if (TREE_CODE (expr) == OFFSET_REF
1520 || TREE_CODE (expr) == SCOPE_REF)
1521 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1522 enclosed in parentheses. */
1523 PTRMEM_OK_P (expr) = 0;
1525 if (TREE_CODE (expr) == STRING_CST)
1526 PAREN_STRING_LITERAL_P (expr) = 1;
1528 return expr;
1531 /* Finish a reference to a non-static data member (DECL) that is not
1532 preceded by `.' or `->'. */
1534 tree
1535 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1537 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1539 if (!object)
1541 tree scope = qualifying_scope;
1542 if (scope == NULL_TREE)
1543 scope = context_for_name_lookup (decl);
1544 object = maybe_dummy_object (scope, NULL);
1547 if (object == error_mark_node)
1548 return error_mark_node;
1550 /* DR 613: Can use non-static data members without an associated
1551 object in sizeof/decltype/alignof. */
1552 if (is_dummy_object (object) && cp_unevaluated_operand == 0
1553 && (!processing_template_decl || !current_class_ref))
1555 if (current_function_decl
1556 && DECL_STATIC_FUNCTION_P (current_function_decl))
1557 error ("invalid use of member %q+D in static member function", decl);
1558 else
1559 error ("invalid use of non-static data member %q+D", decl);
1560 error ("from this location");
1562 return error_mark_node;
1565 if (current_class_ptr)
1566 TREE_USED (current_class_ptr) = 1;
1567 if (processing_template_decl && !qualifying_scope)
1569 tree type = TREE_TYPE (decl);
1571 if (TREE_CODE (type) == REFERENCE_TYPE)
1572 /* Quals on the object don't matter. */;
1573 else
1575 /* Set the cv qualifiers. */
1576 int quals = (current_class_ref
1577 ? cp_type_quals (TREE_TYPE (current_class_ref))
1578 : TYPE_UNQUALIFIED);
1580 if (DECL_MUTABLE_P (decl))
1581 quals &= ~TYPE_QUAL_CONST;
1583 quals |= cp_type_quals (TREE_TYPE (decl));
1584 type = cp_build_qualified_type (type, quals);
1587 return (convert_from_reference
1588 (build_min (COMPONENT_REF, type, object, decl, NULL_TREE)));
1590 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1591 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1592 for now. */
1593 else if (processing_template_decl)
1594 return build_qualified_name (TREE_TYPE (decl),
1595 qualifying_scope,
1596 decl,
1597 /*template_p=*/false);
1598 else
1600 tree access_type = TREE_TYPE (object);
1602 perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1603 decl, tf_warning_or_error);
1605 /* If the data member was named `C::M', convert `*this' to `C'
1606 first. */
1607 if (qualifying_scope)
1609 tree binfo = NULL_TREE;
1610 object = build_scoped_ref (object, qualifying_scope,
1611 &binfo);
1614 return build_class_member_access_expr (object, decl,
1615 /*access_path=*/NULL_TREE,
1616 /*preserve_reference=*/false,
1617 tf_warning_or_error);
1621 /* If we are currently parsing a template and we encountered a typedef
1622 TYPEDEF_DECL that is being accessed though CONTEXT, this function
1623 adds the typedef to a list tied to the current template.
1624 At template instantiation time, that list is walked and access check
1625 performed for each typedef.
1626 LOCATION is the location of the usage point of TYPEDEF_DECL. */
1628 void
1629 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1630 tree context,
1631 location_t location)
1633 tree template_info = NULL;
1634 tree cs = current_scope ();
1636 if (!is_typedef_decl (typedef_decl)
1637 || !context
1638 || !CLASS_TYPE_P (context)
1639 || !cs)
1640 return;
1642 if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1643 template_info = get_template_info (cs);
1645 if (template_info
1646 && TI_TEMPLATE (template_info)
1647 && !currently_open_class (context))
1648 append_type_to_template_for_access_check (cs, typedef_decl,
1649 context, location);
1652 /* DECL was the declaration to which a qualified-id resolved. Issue
1653 an error message if it is not accessible. If OBJECT_TYPE is
1654 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1655 type of `*x', or `x', respectively. If the DECL was named as
1656 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1658 void
1659 check_accessibility_of_qualified_id (tree decl,
1660 tree object_type,
1661 tree nested_name_specifier)
1663 tree scope;
1664 tree qualifying_type = NULL_TREE;
1666 /* If we are parsing a template declaration and if decl is a typedef,
1667 add it to a list tied to the template.
1668 At template instantiation time, that list will be walked and
1669 access check performed. */
1670 add_typedef_to_current_template_for_access_check (decl,
1671 nested_name_specifier
1672 ? nested_name_specifier
1673 : DECL_CONTEXT (decl),
1674 input_location);
1676 /* If we're not checking, return immediately. */
1677 if (deferred_access_no_check)
1678 return;
1680 /* Determine the SCOPE of DECL. */
1681 scope = context_for_name_lookup (decl);
1682 /* If the SCOPE is not a type, then DECL is not a member. */
1683 if (!TYPE_P (scope))
1684 return;
1685 /* Compute the scope through which DECL is being accessed. */
1686 if (object_type
1687 /* OBJECT_TYPE might not be a class type; consider:
1689 class A { typedef int I; };
1690 I *p;
1691 p->A::I::~I();
1693 In this case, we will have "A::I" as the DECL, but "I" as the
1694 OBJECT_TYPE. */
1695 && CLASS_TYPE_P (object_type)
1696 && DERIVED_FROM_P (scope, object_type))
1697 /* If we are processing a `->' or `.' expression, use the type of the
1698 left-hand side. */
1699 qualifying_type = object_type;
1700 else if (nested_name_specifier)
1702 /* If the reference is to a non-static member of the
1703 current class, treat it as if it were referenced through
1704 `this'. */
1705 if (DECL_NONSTATIC_MEMBER_P (decl)
1706 && current_class_ptr
1707 && DERIVED_FROM_P (scope, current_class_type))
1708 qualifying_type = current_class_type;
1709 /* Otherwise, use the type indicated by the
1710 nested-name-specifier. */
1711 else
1712 qualifying_type = nested_name_specifier;
1714 else
1715 /* Otherwise, the name must be from the current class or one of
1716 its bases. */
1717 qualifying_type = currently_open_derived_class (scope);
1719 if (qualifying_type
1720 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1721 or similar in a default argument value. */
1722 && CLASS_TYPE_P (qualifying_type)
1723 && !dependent_type_p (qualifying_type))
1724 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1725 decl, tf_warning_or_error);
1728 /* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1729 class named to the left of the "::" operator. DONE is true if this
1730 expression is a complete postfix-expression; it is false if this
1731 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
1732 iff this expression is the operand of '&'. TEMPLATE_P is true iff
1733 the qualified-id was of the form "A::template B". TEMPLATE_ARG_P
1734 is true iff this qualified name appears as a template argument. */
1736 tree
1737 finish_qualified_id_expr (tree qualifying_class,
1738 tree expr,
1739 bool done,
1740 bool address_p,
1741 bool template_p,
1742 bool template_arg_p)
1744 gcc_assert (TYPE_P (qualifying_class));
1746 if (error_operand_p (expr))
1747 return error_mark_node;
1749 if (DECL_P (expr) || BASELINK_P (expr))
1750 mark_used (expr);
1752 if (template_p)
1753 check_template_keyword (expr);
1755 /* If EXPR occurs as the operand of '&', use special handling that
1756 permits a pointer-to-member. */
1757 if (address_p && done)
1759 if (TREE_CODE (expr) == SCOPE_REF)
1760 expr = TREE_OPERAND (expr, 1);
1761 expr = build_offset_ref (qualifying_class, expr,
1762 /*address_p=*/true);
1763 return expr;
1766 /* Within the scope of a class, turn references to non-static
1767 members into expression of the form "this->...". */
1768 if (template_arg_p)
1769 /* But, within a template argument, we do not want make the
1770 transformation, as there is no "this" pointer. */
1772 else if (TREE_CODE (expr) == FIELD_DECL)
1774 push_deferring_access_checks (dk_no_check);
1775 expr = finish_non_static_data_member (expr, NULL_TREE,
1776 qualifying_class);
1777 pop_deferring_access_checks ();
1779 else if (BASELINK_P (expr) && !processing_template_decl)
1781 tree ob;
1783 /* See if any of the functions are non-static members. */
1784 /* If so, the expression may be relative to 'this'. */
1785 if (!shared_member_p (expr)
1786 && (ob = maybe_dummy_object (qualifying_class, NULL),
1787 !is_dummy_object (ob)))
1788 expr = (build_class_member_access_expr
1789 (ob,
1790 expr,
1791 BASELINK_ACCESS_BINFO (expr),
1792 /*preserve_reference=*/false,
1793 tf_warning_or_error));
1794 else if (done)
1795 /* The expression is a qualified name whose address is not
1796 being taken. */
1797 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1799 else if (BASELINK_P (expr))
1801 else
1803 /* In a template, return a SCOPE_REF for most qualified-ids
1804 so that we can check access at instantiation time. But if
1805 we're looking at a member of the current instantiation, we
1806 know we have access and building up the SCOPE_REF confuses
1807 non-type template argument handling. */
1808 if (processing_template_decl
1809 && !currently_open_class (qualifying_class))
1810 expr = build_qualified_name (TREE_TYPE (expr),
1811 qualifying_class, expr,
1812 template_p);
1814 expr = convert_from_reference (expr);
1817 return expr;
1820 /* Begin a statement-expression. The value returned must be passed to
1821 finish_stmt_expr. */
1823 tree
1824 begin_stmt_expr (void)
1826 return push_stmt_list ();
1829 /* Process the final expression of a statement expression. EXPR can be
1830 NULL, if the final expression is empty. Return a STATEMENT_LIST
1831 containing all the statements in the statement-expression, or
1832 ERROR_MARK_NODE if there was an error. */
1834 tree
1835 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1837 if (error_operand_p (expr))
1839 /* The type of the statement-expression is the type of the last
1840 expression. */
1841 TREE_TYPE (stmt_expr) = error_mark_node;
1842 return error_mark_node;
1845 /* If the last statement does not have "void" type, then the value
1846 of the last statement is the value of the entire expression. */
1847 if (expr)
1849 tree type = TREE_TYPE (expr);
1851 if (processing_template_decl)
1853 expr = build_stmt (input_location, EXPR_STMT, expr);
1854 expr = add_stmt (expr);
1855 /* Mark the last statement so that we can recognize it as such at
1856 template-instantiation time. */
1857 EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1859 else if (VOID_TYPE_P (type))
1861 /* Just treat this like an ordinary statement. */
1862 expr = finish_expr_stmt (expr);
1864 else
1866 /* It actually has a value we need to deal with. First, force it
1867 to be an rvalue so that we won't need to build up a copy
1868 constructor call later when we try to assign it to something. */
1869 expr = force_rvalue (expr, tf_warning_or_error);
1870 if (error_operand_p (expr))
1871 return error_mark_node;
1873 /* Update for array-to-pointer decay. */
1874 type = TREE_TYPE (expr);
1876 /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1877 normal statement, but don't convert to void or actually add
1878 the EXPR_STMT. */
1879 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1880 expr = maybe_cleanup_point_expr (expr);
1881 add_stmt (expr);
1884 /* The type of the statement-expression is the type of the last
1885 expression. */
1886 TREE_TYPE (stmt_expr) = type;
1889 return stmt_expr;
1892 /* Finish a statement-expression. EXPR should be the value returned
1893 by the previous begin_stmt_expr. Returns an expression
1894 representing the statement-expression. */
1896 tree
1897 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1899 tree type;
1900 tree result;
1902 if (error_operand_p (stmt_expr))
1904 pop_stmt_list (stmt_expr);
1905 return error_mark_node;
1908 gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1910 type = TREE_TYPE (stmt_expr);
1911 result = pop_stmt_list (stmt_expr);
1912 TREE_TYPE (result) = type;
1914 if (processing_template_decl)
1916 result = build_min (STMT_EXPR, type, result);
1917 TREE_SIDE_EFFECTS (result) = 1;
1918 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1920 else if (CLASS_TYPE_P (type))
1922 /* Wrap the statement-expression in a TARGET_EXPR so that the
1923 temporary object created by the final expression is destroyed at
1924 the end of the full-expression containing the
1925 statement-expression. */
1926 result = force_target_expr (type, result, tf_warning_or_error);
1929 return result;
1932 /* Returns the expression which provides the value of STMT_EXPR. */
1934 tree
1935 stmt_expr_value_expr (tree stmt_expr)
1937 tree t = STMT_EXPR_STMT (stmt_expr);
1939 if (TREE_CODE (t) == BIND_EXPR)
1940 t = BIND_EXPR_BODY (t);
1942 if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1943 t = STATEMENT_LIST_TAIL (t)->stmt;
1945 if (TREE_CODE (t) == EXPR_STMT)
1946 t = EXPR_STMT_EXPR (t);
1948 return t;
1951 /* Return TRUE iff EXPR_STMT is an empty list of
1952 expression statements. */
1954 bool
1955 empty_expr_stmt_p (tree expr_stmt)
1957 tree body = NULL_TREE;
1959 if (expr_stmt == void_zero_node)
1960 return true;
1962 if (expr_stmt)
1964 if (TREE_CODE (expr_stmt) == EXPR_STMT)
1965 body = EXPR_STMT_EXPR (expr_stmt);
1966 else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1967 body = expr_stmt;
1970 if (body)
1972 if (TREE_CODE (body) == STATEMENT_LIST)
1973 return tsi_end_p (tsi_start (body));
1974 else
1975 return empty_expr_stmt_p (body);
1977 return false;
1980 /* Perform Koenig lookup. FN is the postfix-expression representing
1981 the function (or functions) to call; ARGS are the arguments to the
1982 call; if INCLUDE_STD then the `std' namespace is automatically
1983 considered an associated namespace (used in range-based for loops).
1984 Returns the functions to be considered by overload resolution. */
1986 tree
1987 perform_koenig_lookup (tree fn, vec<tree, va_gc> *args, bool include_std,
1988 tsubst_flags_t complain)
1990 tree identifier = NULL_TREE;
1991 tree functions = NULL_TREE;
1992 tree tmpl_args = NULL_TREE;
1993 bool template_id = false;
1995 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1997 /* Use a separate flag to handle null args. */
1998 template_id = true;
1999 tmpl_args = TREE_OPERAND (fn, 1);
2000 fn = TREE_OPERAND (fn, 0);
2003 /* Find the name of the overloaded function. */
2004 if (TREE_CODE (fn) == IDENTIFIER_NODE)
2005 identifier = fn;
2006 else if (is_overloaded_fn (fn))
2008 functions = fn;
2009 identifier = DECL_NAME (get_first_fn (functions));
2011 else if (DECL_P (fn))
2013 functions = fn;
2014 identifier = DECL_NAME (fn);
2017 /* A call to a namespace-scope function using an unqualified name.
2019 Do Koenig lookup -- unless any of the arguments are
2020 type-dependent. */
2021 if (!any_type_dependent_arguments_p (args)
2022 && !any_dependent_template_arguments_p (tmpl_args))
2024 fn = lookup_arg_dependent (identifier, functions, args, include_std);
2025 if (!fn)
2027 /* The unqualified name could not be resolved. */
2028 if (complain)
2029 fn = unqualified_fn_lookup_error (identifier);
2030 else
2031 fn = identifier;
2035 if (fn && template_id)
2036 fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
2038 return fn;
2041 /* Generate an expression for `FN (ARGS)'. This may change the
2042 contents of ARGS.
2044 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
2045 as a virtual call, even if FN is virtual. (This flag is set when
2046 encountering an expression where the function name is explicitly
2047 qualified. For example a call to `X::f' never generates a virtual
2048 call.)
2050 Returns code for the call. */
2052 tree
2053 finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual,
2054 bool koenig_p, tsubst_flags_t complain)
2056 tree result;
2057 tree orig_fn;
2058 vec<tree, va_gc> *orig_args = NULL;
2060 if (fn == error_mark_node)
2061 return error_mark_node;
2063 gcc_assert (!TYPE_P (fn));
2065 orig_fn = fn;
2067 if (processing_template_decl)
2069 /* If the call expression is dependent, build a CALL_EXPR node
2070 with no type; type_dependent_expression_p recognizes
2071 expressions with no type as being dependent. */
2072 if (type_dependent_expression_p (fn)
2073 || any_type_dependent_arguments_p (*args)
2074 /* For a non-static member function that doesn't have an
2075 explicit object argument, we need to specifically
2076 test the type dependency of the "this" pointer because it
2077 is not included in *ARGS even though it is considered to
2078 be part of the list of arguments. Note that this is
2079 related to CWG issues 515 and 1005. */
2080 || (TREE_CODE (fn) != COMPONENT_REF
2081 && non_static_member_function_p (fn)
2082 && current_class_ref
2083 && type_dependent_expression_p (current_class_ref)))
2085 result = build_nt_call_vec (fn, *args);
2086 SET_EXPR_LOCATION (result, EXPR_LOC_OR_HERE (fn));
2087 KOENIG_LOOKUP_P (result) = koenig_p;
2088 if (cfun)
2092 tree fndecl = OVL_CURRENT (fn);
2093 if (TREE_CODE (fndecl) != FUNCTION_DECL
2094 || !TREE_THIS_VOLATILE (fndecl))
2095 break;
2096 fn = OVL_NEXT (fn);
2098 while (fn);
2099 if (!fn)
2100 current_function_returns_abnormally = 1;
2102 return result;
2104 orig_args = make_tree_vector_copy (*args);
2105 if (!BASELINK_P (fn)
2106 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
2107 && TREE_TYPE (fn) != unknown_type_node)
2108 fn = build_non_dependent_expr (fn);
2109 make_args_non_dependent (*args);
2112 if (TREE_CODE (fn) == COMPONENT_REF)
2114 tree member = TREE_OPERAND (fn, 1);
2115 if (BASELINK_P (member))
2117 tree object = TREE_OPERAND (fn, 0);
2118 return build_new_method_call (object, member,
2119 args, NULL_TREE,
2120 (disallow_virtual
2121 ? LOOKUP_NORMAL | LOOKUP_NONVIRTUAL
2122 : LOOKUP_NORMAL),
2123 /*fn_p=*/NULL,
2124 complain);
2128 if (is_overloaded_fn (fn))
2129 fn = baselink_for_fns (fn);
2131 result = NULL_TREE;
2132 if (BASELINK_P (fn))
2134 tree object;
2136 /* A call to a member function. From [over.call.func]:
2138 If the keyword this is in scope and refers to the class of
2139 that member function, or a derived class thereof, then the
2140 function call is transformed into a qualified function call
2141 using (*this) as the postfix-expression to the left of the
2142 . operator.... [Otherwise] a contrived object of type T
2143 becomes the implied object argument.
2145 In this situation:
2147 struct A { void f(); };
2148 struct B : public A {};
2149 struct C : public A { void g() { B::f(); }};
2151 "the class of that member function" refers to `A'. But 11.2
2152 [class.access.base] says that we need to convert 'this' to B* as
2153 part of the access, so we pass 'B' to maybe_dummy_object. */
2155 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2156 NULL);
2158 if (processing_template_decl)
2160 if (type_dependent_expression_p (object))
2162 tree ret = build_nt_call_vec (orig_fn, orig_args);
2163 release_tree_vector (orig_args);
2164 return ret;
2166 object = build_non_dependent_expr (object);
2169 result = build_new_method_call (object, fn, args, NULL_TREE,
2170 (disallow_virtual
2171 ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
2172 : LOOKUP_NORMAL),
2173 /*fn_p=*/NULL,
2174 complain);
2176 else if (is_overloaded_fn (fn))
2178 /* If the function is an overloaded builtin, resolve it. */
2179 if (TREE_CODE (fn) == FUNCTION_DECL
2180 && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2181 || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2182 result = resolve_overloaded_builtin (input_location, fn, *args);
2184 if (!result)
2186 if (warn_sizeof_pointer_memaccess
2187 && !vec_safe_is_empty (*args)
2188 && !processing_template_decl)
2190 location_t sizeof_arg_loc[3];
2191 tree sizeof_arg[3];
2192 unsigned int i;
2193 for (i = 0; i < 3; i++)
2195 tree t;
2197 sizeof_arg_loc[i] = UNKNOWN_LOCATION;
2198 sizeof_arg[i] = NULL_TREE;
2199 if (i >= (*args)->length ())
2200 continue;
2201 t = (**args)[i];
2202 if (TREE_CODE (t) != SIZEOF_EXPR)
2203 continue;
2204 if (SIZEOF_EXPR_TYPE_P (t))
2205 sizeof_arg[i] = TREE_TYPE (TREE_OPERAND (t, 0));
2206 else
2207 sizeof_arg[i] = TREE_OPERAND (t, 0);
2208 sizeof_arg_loc[i] = EXPR_LOCATION (t);
2210 sizeof_pointer_memaccess_warning
2211 (sizeof_arg_loc, fn, *args,
2212 sizeof_arg, same_type_ignoring_top_level_qualifiers_p);
2215 /* A call to a namespace-scope function. */
2216 result = build_new_function_call (fn, args, koenig_p, complain);
2219 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2221 if (!vec_safe_is_empty (*args))
2222 error ("arguments to destructor are not allowed");
2223 /* Mark the pseudo-destructor call as having side-effects so
2224 that we do not issue warnings about its use. */
2225 result = build1 (NOP_EXPR,
2226 void_type_node,
2227 TREE_OPERAND (fn, 0));
2228 TREE_SIDE_EFFECTS (result) = 1;
2230 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2231 /* If the "function" is really an object of class type, it might
2232 have an overloaded `operator ()'. */
2233 result = build_op_call (fn, args, complain);
2235 if (!result)
2236 /* A call where the function is unknown. */
2237 result = cp_build_function_call_vec (fn, args, complain);
2239 if (processing_template_decl && result != error_mark_node)
2241 if (TREE_CODE (result) == INDIRECT_REF)
2242 result = TREE_OPERAND (result, 0);
2243 result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2244 SET_EXPR_LOCATION (result, input_location);
2245 KOENIG_LOOKUP_P (result) = koenig_p;
2246 release_tree_vector (orig_args);
2247 result = convert_from_reference (result);
2250 if (koenig_p)
2252 /* Free garbage OVERLOADs from arg-dependent lookup. */
2253 tree next = NULL_TREE;
2254 for (fn = orig_fn;
2255 fn && TREE_CODE (fn) == OVERLOAD && OVL_ARG_DEPENDENT (fn);
2256 fn = next)
2258 if (processing_template_decl)
2259 /* In a template, we'll re-use them at instantiation time. */
2260 OVL_ARG_DEPENDENT (fn) = false;
2261 else
2263 next = OVL_CHAIN (fn);
2264 ggc_free (fn);
2269 return result;
2272 /* Finish a call to a postfix increment or decrement or EXPR. (Which
2273 is indicated by CODE, which should be POSTINCREMENT_EXPR or
2274 POSTDECREMENT_EXPR.) */
2276 tree
2277 finish_increment_expr (tree expr, enum tree_code code)
2279 return build_x_unary_op (input_location, code, expr, tf_warning_or_error);
2282 /* Finish a use of `this'. Returns an expression for `this'. */
2284 tree
2285 finish_this_expr (void)
2287 tree result;
2289 if (current_class_ptr)
2291 tree type = TREE_TYPE (current_class_ref);
2293 /* In a lambda expression, 'this' refers to the captured 'this'. */
2294 if (LAMBDA_TYPE_P (type))
2295 result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2296 else
2297 result = current_class_ptr;
2300 else if (current_function_decl
2301 && DECL_STATIC_FUNCTION_P (current_function_decl))
2303 error ("%<this%> is unavailable for static member functions");
2304 result = error_mark_node;
2306 else
2308 if (current_function_decl)
2309 error ("invalid use of %<this%> in non-member function");
2310 else
2311 error ("invalid use of %<this%> at top level");
2312 result = error_mark_node;
2315 return result;
2318 /* Finish a pseudo-destructor expression. If SCOPE is NULL, the
2319 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2320 the TYPE for the type given. If SCOPE is non-NULL, the expression
2321 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
2323 tree
2324 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2326 if (object == error_mark_node || destructor == error_mark_node)
2327 return error_mark_node;
2329 gcc_assert (TYPE_P (destructor));
2331 if (!processing_template_decl)
2333 if (scope == error_mark_node)
2335 error ("invalid qualifying scope in pseudo-destructor name");
2336 return error_mark_node;
2338 if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2340 error ("qualified type %qT does not match destructor name ~%qT",
2341 scope, destructor);
2342 return error_mark_node;
2346 /* [expr.pseudo] says both:
2348 The type designated by the pseudo-destructor-name shall be
2349 the same as the object type.
2351 and:
2353 The cv-unqualified versions of the object type and of the
2354 type designated by the pseudo-destructor-name shall be the
2355 same type.
2357 We implement the more generous second sentence, since that is
2358 what most other compilers do. */
2359 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2360 destructor))
2362 error ("%qE is not of type %qT", object, destructor);
2363 return error_mark_node;
2367 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2370 /* Finish an expression of the form CODE EXPR. */
2372 tree
2373 finish_unary_op_expr (location_t loc, enum tree_code code, tree expr)
2375 tree result = build_x_unary_op (loc, code, expr, tf_warning_or_error);
2376 if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2377 overflow_warning (input_location, result);
2379 return result;
2382 /* Finish a compound-literal expression. TYPE is the type to which
2383 the CONSTRUCTOR in COMPOUND_LITERAL is being cast. */
2385 tree
2386 finish_compound_literal (tree type, tree compound_literal,
2387 tsubst_flags_t complain)
2389 if (type == error_mark_node)
2390 return error_mark_node;
2392 if (TREE_CODE (type) == REFERENCE_TYPE)
2394 compound_literal
2395 = finish_compound_literal (TREE_TYPE (type), compound_literal,
2396 complain);
2397 return cp_build_c_cast (type, compound_literal, complain);
2400 if (!TYPE_OBJ_P (type))
2402 if (complain & tf_error)
2403 error ("compound literal of non-object type %qT", type);
2404 return error_mark_node;
2407 if (processing_template_decl)
2409 TREE_TYPE (compound_literal) = type;
2410 /* Mark the expression as a compound literal. */
2411 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2412 return compound_literal;
2415 type = complete_type (type);
2417 if (TYPE_NON_AGGREGATE_CLASS (type))
2419 /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2420 everywhere that deals with function arguments would be a pain, so
2421 just wrap it in a TREE_LIST. The parser set a flag so we know
2422 that it came from T{} rather than T({}). */
2423 CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2424 compound_literal = build_tree_list (NULL_TREE, compound_literal);
2425 return build_functional_cast (type, compound_literal, complain);
2428 if (TREE_CODE (type) == ARRAY_TYPE
2429 && check_array_initializer (NULL_TREE, type, compound_literal))
2430 return error_mark_node;
2431 compound_literal = reshape_init (type, compound_literal, complain);
2432 if (SCALAR_TYPE_P (type)
2433 && !BRACE_ENCLOSED_INITIALIZER_P (compound_literal)
2434 && (complain & tf_warning_or_error))
2435 check_narrowing (type, compound_literal);
2436 if (TREE_CODE (type) == ARRAY_TYPE
2437 && TYPE_DOMAIN (type) == NULL_TREE)
2439 cp_complete_array_type_or_error (&type, compound_literal,
2440 false, complain);
2441 if (type == error_mark_node)
2442 return error_mark_node;
2444 compound_literal = digest_init (type, compound_literal, complain);
2445 if (TREE_CODE (compound_literal) == CONSTRUCTOR)
2446 TREE_HAS_CONSTRUCTOR (compound_literal) = true;
2447 /* Put static/constant array temporaries in static variables, but always
2448 represent class temporaries with TARGET_EXPR so we elide copies. */
2449 if ((!at_function_scope_p () || CP_TYPE_CONST_P (type))
2450 && TREE_CODE (type) == ARRAY_TYPE
2451 && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2452 && initializer_constant_valid_p (compound_literal, type))
2454 tree decl = create_temporary_var (type);
2455 DECL_INITIAL (decl) = compound_literal;
2456 TREE_STATIC (decl) = 1;
2457 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
2459 /* 5.19 says that a constant expression can include an
2460 lvalue-rvalue conversion applied to "a glvalue of literal type
2461 that refers to a non-volatile temporary object initialized
2462 with a constant expression". Rather than try to communicate
2463 that this VAR_DECL is a temporary, just mark it constexpr. */
2464 DECL_DECLARED_CONSTEXPR_P (decl) = true;
2465 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
2466 TREE_CONSTANT (decl) = true;
2468 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
2469 decl = pushdecl_top_level (decl);
2470 DECL_NAME (decl) = make_anon_name ();
2471 SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2472 return decl;
2474 else
2475 return get_target_expr_sfinae (compound_literal, complain);
2478 /* Return the declaration for the function-name variable indicated by
2479 ID. */
2481 tree
2482 finish_fname (tree id)
2484 tree decl;
2486 decl = fname_decl (input_location, C_RID_CODE (id), id);
2487 if (processing_template_decl && current_function_decl)
2488 decl = DECL_NAME (decl);
2489 return decl;
2492 /* Finish a translation unit. */
2494 void
2495 finish_translation_unit (void)
2497 /* In case there were missing closebraces,
2498 get us back to the global binding level. */
2499 pop_everything ();
2500 while (current_namespace != global_namespace)
2501 pop_namespace ();
2503 /* Do file scope __FUNCTION__ et al. */
2504 finish_fname_decls ();
2507 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2508 Returns the parameter. */
2510 tree
2511 finish_template_type_parm (tree aggr, tree identifier)
2513 if (aggr != class_type_node)
2515 permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2516 aggr = class_type_node;
2519 return build_tree_list (aggr, identifier);
2522 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2523 Returns the parameter. */
2525 tree
2526 finish_template_template_parm (tree aggr, tree identifier)
2528 tree decl = build_decl (input_location,
2529 TYPE_DECL, identifier, NULL_TREE);
2530 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2531 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2532 DECL_TEMPLATE_RESULT (tmpl) = decl;
2533 DECL_ARTIFICIAL (decl) = 1;
2534 end_template_decl ();
2536 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2538 check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2539 /*is_primary=*/true, /*is_partial=*/false,
2540 /*is_friend=*/0);
2542 return finish_template_type_parm (aggr, tmpl);
2545 /* ARGUMENT is the default-argument value for a template template
2546 parameter. If ARGUMENT is invalid, issue error messages and return
2547 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2549 tree
2550 check_template_template_default_arg (tree argument)
2552 if (TREE_CODE (argument) != TEMPLATE_DECL
2553 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2554 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2556 if (TREE_CODE (argument) == TYPE_DECL)
2557 error ("invalid use of type %qT as a default value for a template "
2558 "template-parameter", TREE_TYPE (argument));
2559 else
2560 error ("invalid default argument for a template template parameter");
2561 return error_mark_node;
2564 return argument;
2567 /* Begin a class definition, as indicated by T. */
2569 tree
2570 begin_class_definition (tree t)
2572 if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2573 return error_mark_node;
2575 if (processing_template_parmlist)
2577 error ("definition of %q#T inside template parameter list", t);
2578 return error_mark_node;
2581 /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2582 are passed the same as decimal scalar types. */
2583 if (TREE_CODE (t) == RECORD_TYPE
2584 && !processing_template_decl)
2586 tree ns = TYPE_CONTEXT (t);
2587 if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2588 && DECL_CONTEXT (ns) == std_node
2589 && DECL_NAME (ns)
2590 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2592 const char *n = TYPE_NAME_STRING (t);
2593 if ((strcmp (n, "decimal32") == 0)
2594 || (strcmp (n, "decimal64") == 0)
2595 || (strcmp (n, "decimal128") == 0))
2596 TYPE_TRANSPARENT_AGGR (t) = 1;
2600 /* A non-implicit typename comes from code like:
2602 template <typename T> struct A {
2603 template <typename U> struct A<T>::B ...
2605 This is erroneous. */
2606 else if (TREE_CODE (t) == TYPENAME_TYPE)
2608 error ("invalid definition of qualified type %qT", t);
2609 t = error_mark_node;
2612 if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2614 t = make_class_type (RECORD_TYPE);
2615 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2618 if (TYPE_BEING_DEFINED (t))
2620 t = make_class_type (TREE_CODE (t));
2621 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2623 maybe_process_partial_specialization (t);
2624 pushclass (t);
2625 TYPE_BEING_DEFINED (t) = 1;
2627 if (flag_pack_struct)
2629 tree v;
2630 TYPE_PACKED (t) = 1;
2631 /* Even though the type is being defined for the first time
2632 here, there might have been a forward declaration, so there
2633 might be cv-qualified variants of T. */
2634 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2635 TYPE_PACKED (v) = 1;
2637 /* Reset the interface data, at the earliest possible
2638 moment, as it might have been set via a class foo;
2639 before. */
2640 if (! TYPE_ANONYMOUS_P (t))
2642 struct c_fileinfo *finfo = get_fileinfo (input_filename);
2643 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2644 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2645 (t, finfo->interface_unknown);
2647 reset_specialization();
2649 /* Make a declaration for this class in its own scope. */
2650 build_self_reference ();
2652 return t;
2655 /* Finish the member declaration given by DECL. */
2657 void
2658 finish_member_declaration (tree decl)
2660 if (decl == error_mark_node || decl == NULL_TREE)
2661 return;
2663 if (decl == void_type_node)
2664 /* The COMPONENT was a friend, not a member, and so there's
2665 nothing for us to do. */
2666 return;
2668 /* We should see only one DECL at a time. */
2669 gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2671 /* Set up access control for DECL. */
2672 TREE_PRIVATE (decl)
2673 = (current_access_specifier == access_private_node);
2674 TREE_PROTECTED (decl)
2675 = (current_access_specifier == access_protected_node);
2676 if (TREE_CODE (decl) == TEMPLATE_DECL)
2678 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2679 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2682 /* Mark the DECL as a member of the current class, unless it's
2683 a member of an enumeration. */
2684 if (TREE_CODE (decl) != CONST_DECL)
2685 DECL_CONTEXT (decl) = current_class_type;
2687 /* Check for bare parameter packs in the member variable declaration. */
2688 if (TREE_CODE (decl) == FIELD_DECL)
2690 if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2691 TREE_TYPE (decl) = error_mark_node;
2692 if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2693 DECL_ATTRIBUTES (decl) = NULL_TREE;
2696 /* [dcl.link]
2698 A C language linkage is ignored for the names of class members
2699 and the member function type of class member functions. */
2700 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2701 SET_DECL_LANGUAGE (decl, lang_cplusplus);
2703 /* Put functions on the TYPE_METHODS list and everything else on the
2704 TYPE_FIELDS list. Note that these are built up in reverse order.
2705 We reverse them (to obtain declaration order) in finish_struct. */
2706 if (TREE_CODE (decl) == FUNCTION_DECL
2707 || DECL_FUNCTION_TEMPLATE_P (decl))
2709 /* We also need to add this function to the
2710 CLASSTYPE_METHOD_VEC. */
2711 if (add_method (current_class_type, decl, NULL_TREE))
2713 DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2714 TYPE_METHODS (current_class_type) = decl;
2716 maybe_add_class_template_decl_list (current_class_type, decl,
2717 /*friend_p=*/0);
2720 /* Enter the DECL into the scope of the class. */
2721 else if (pushdecl_class_level (decl))
2723 if (TREE_CODE (decl) == USING_DECL)
2725 /* For now, ignore class-scope USING_DECLS, so that
2726 debugging backends do not see them. */
2727 DECL_IGNORED_P (decl) = 1;
2730 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2731 go at the beginning. The reason is that lookup_field_1
2732 searches the list in order, and we want a field name to
2733 override a type name so that the "struct stat hack" will
2734 work. In particular:
2736 struct S { enum E { }; int E } s;
2737 s.E = 3;
2739 is valid. In addition, the FIELD_DECLs must be maintained in
2740 declaration order so that class layout works as expected.
2741 However, we don't need that order until class layout, so we
2742 save a little time by putting FIELD_DECLs on in reverse order
2743 here, and then reversing them in finish_struct_1. (We could
2744 also keep a pointer to the correct insertion points in the
2745 list.) */
2747 if (TREE_CODE (decl) == TYPE_DECL)
2748 TYPE_FIELDS (current_class_type)
2749 = chainon (TYPE_FIELDS (current_class_type), decl);
2750 else
2752 DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2753 TYPE_FIELDS (current_class_type) = decl;
2756 maybe_add_class_template_decl_list (current_class_type, decl,
2757 /*friend_p=*/0);
2760 if (pch_file)
2761 note_decl_for_pch (decl);
2764 /* DECL has been declared while we are building a PCH file. Perform
2765 actions that we might normally undertake lazily, but which can be
2766 performed now so that they do not have to be performed in
2767 translation units which include the PCH file. */
2769 void
2770 note_decl_for_pch (tree decl)
2772 gcc_assert (pch_file);
2774 /* There's a good chance that we'll have to mangle names at some
2775 point, even if only for emission in debugging information. */
2776 if ((TREE_CODE (decl) == VAR_DECL
2777 || TREE_CODE (decl) == FUNCTION_DECL)
2778 && !processing_template_decl)
2779 mangle_decl (decl);
2782 /* Finish processing a complete template declaration. The PARMS are
2783 the template parameters. */
2785 void
2786 finish_template_decl (tree parms)
2788 if (parms)
2789 end_template_decl ();
2790 else
2791 end_specialization ();
2794 /* Finish processing a template-id (which names a type) of the form
2795 NAME < ARGS >. Return the TYPE_DECL for the type named by the
2796 template-id. If ENTERING_SCOPE is nonzero we are about to enter
2797 the scope of template-id indicated. */
2799 tree
2800 finish_template_type (tree name, tree args, int entering_scope)
2802 tree type;
2804 type = lookup_template_class (name, args,
2805 NULL_TREE, NULL_TREE, entering_scope,
2806 tf_warning_or_error | tf_user);
2807 if (type == error_mark_node)
2808 return type;
2809 else if (CLASS_TYPE_P (type) && !alias_type_or_template_p (type))
2810 return TYPE_STUB_DECL (type);
2811 else
2812 return TYPE_NAME (type);
2815 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2816 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2817 BASE_CLASS, or NULL_TREE if an error occurred. The
2818 ACCESS_SPECIFIER is one of
2819 access_{default,public,protected_private}_node. For a virtual base
2820 we set TREE_TYPE. */
2822 tree
2823 finish_base_specifier (tree base, tree access, bool virtual_p)
2825 tree result;
2827 if (base == error_mark_node)
2829 error ("invalid base-class specification");
2830 result = NULL_TREE;
2832 else if (! MAYBE_CLASS_TYPE_P (base))
2834 error ("%qT is not a class type", base);
2835 result = NULL_TREE;
2837 else
2839 if (cp_type_quals (base) != 0)
2841 /* DR 484: Can a base-specifier name a cv-qualified
2842 class type? */
2843 base = TYPE_MAIN_VARIANT (base);
2845 result = build_tree_list (access, base);
2846 if (virtual_p)
2847 TREE_TYPE (result) = integer_type_node;
2850 return result;
2853 /* If FNS is a member function, a set of member functions, or a
2854 template-id referring to one or more member functions, return a
2855 BASELINK for FNS, incorporating the current access context.
2856 Otherwise, return FNS unchanged. */
2858 tree
2859 baselink_for_fns (tree fns)
2861 tree scope;
2862 tree cl;
2864 if (BASELINK_P (fns)
2865 || error_operand_p (fns))
2866 return fns;
2868 scope = ovl_scope (fns);
2869 if (!CLASS_TYPE_P (scope))
2870 return fns;
2872 cl = currently_open_derived_class (scope);
2873 if (!cl)
2874 cl = scope;
2875 cl = TYPE_BINFO (cl);
2876 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2879 /* Returns true iff DECL is an automatic variable from a function outside
2880 the current one. */
2882 static bool
2883 outer_automatic_var_p (tree decl)
2885 return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2886 && DECL_FUNCTION_SCOPE_P (decl)
2887 && !TREE_STATIC (decl)
2888 && DECL_CONTEXT (decl) != current_function_decl);
2891 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2892 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2893 if non-NULL, is the type or namespace used to explicitly qualify
2894 ID_EXPRESSION. DECL is the entity to which that name has been
2895 resolved.
2897 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2898 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2899 be set to true if this expression isn't permitted in a
2900 constant-expression, but it is otherwise not set by this function.
2901 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2902 constant-expression, but a non-constant expression is also
2903 permissible.
2905 DONE is true if this expression is a complete postfix-expression;
2906 it is false if this expression is followed by '->', '[', '(', etc.
2907 ADDRESS_P is true iff this expression is the operand of '&'.
2908 TEMPLATE_P is true iff the qualified-id was of the form
2909 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2910 appears as a template argument.
2912 If an error occurs, and it is the kind of error that might cause
2913 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2914 is the caller's responsibility to issue the message. *ERROR_MSG
2915 will be a string with static storage duration, so the caller need
2916 not "free" it.
2918 Return an expression for the entity, after issuing appropriate
2919 diagnostics. This function is also responsible for transforming a
2920 reference to a non-static member into a COMPONENT_REF that makes
2921 the use of "this" explicit.
2923 Upon return, *IDK will be filled in appropriately. */
2924 tree
2925 finish_id_expression (tree id_expression,
2926 tree decl,
2927 tree scope,
2928 cp_id_kind *idk,
2929 bool integral_constant_expression_p,
2930 bool allow_non_integral_constant_expression_p,
2931 bool *non_integral_constant_expression_p,
2932 bool template_p,
2933 bool done,
2934 bool address_p,
2935 bool template_arg_p,
2936 const char **error_msg,
2937 location_t location)
2939 decl = strip_using_decl (decl);
2941 /* Initialize the output parameters. */
2942 *idk = CP_ID_KIND_NONE;
2943 *error_msg = NULL;
2945 if (id_expression == error_mark_node)
2946 return error_mark_node;
2947 /* If we have a template-id, then no further lookup is
2948 required. If the template-id was for a template-class, we
2949 will sometimes have a TYPE_DECL at this point. */
2950 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2951 || TREE_CODE (decl) == TYPE_DECL)
2953 /* Look up the name. */
2954 else
2956 if (decl == error_mark_node)
2958 /* Name lookup failed. */
2959 if (scope
2960 && (!TYPE_P (scope)
2961 || (!dependent_type_p (scope)
2962 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2963 && IDENTIFIER_TYPENAME_P (id_expression)
2964 && dependent_type_p (TREE_TYPE (id_expression))))))
2966 /* If the qualifying type is non-dependent (and the name
2967 does not name a conversion operator to a dependent
2968 type), issue an error. */
2969 qualified_name_lookup_error (scope, id_expression, decl, location);
2970 return error_mark_node;
2972 else if (!scope)
2974 /* It may be resolved via Koenig lookup. */
2975 *idk = CP_ID_KIND_UNQUALIFIED;
2976 return id_expression;
2978 else
2979 decl = id_expression;
2981 /* If DECL is a variable that would be out of scope under
2982 ANSI/ISO rules, but in scope in the ARM, name lookup
2983 will succeed. Issue a diagnostic here. */
2984 else
2985 decl = check_for_out_of_scope_variable (decl);
2987 /* Remember that the name was used in the definition of
2988 the current class so that we can check later to see if
2989 the meaning would have been different after the class
2990 was entirely defined. */
2991 if (!scope && decl != error_mark_node
2992 && TREE_CODE (id_expression) == IDENTIFIER_NODE)
2993 maybe_note_name_used_in_class (id_expression, decl);
2995 /* Disallow uses of local variables from containing functions, except
2996 within lambda-expressions. */
2997 if (outer_automatic_var_p (decl)
2998 /* It's not a use (3.2) if we're in an unevaluated context. */
2999 && !cp_unevaluated_operand)
3001 tree context = DECL_CONTEXT (decl);
3002 tree containing_function = current_function_decl;
3003 tree lambda_stack = NULL_TREE;
3004 tree lambda_expr = NULL_TREE;
3005 tree initializer = convert_from_reference (decl);
3007 /* Mark it as used now even if the use is ill-formed. */
3008 mark_used (decl);
3010 /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
3011 support for an approach in which a reference to a local
3012 [constant] automatic variable in a nested class or lambda body
3013 would enter the expression as an rvalue, which would reduce
3014 the complexity of the problem"
3016 FIXME update for final resolution of core issue 696. */
3017 if (decl_constant_var_p (decl))
3018 return integral_constant_value (decl);
3020 /* If we are in a lambda function, we can move out until we hit
3021 1. the context,
3022 2. a non-lambda function, or
3023 3. a non-default capturing lambda function. */
3024 while (context != containing_function
3025 && LAMBDA_FUNCTION_P (containing_function))
3027 lambda_expr = CLASSTYPE_LAMBDA_EXPR
3028 (DECL_CONTEXT (containing_function));
3030 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
3031 == CPLD_NONE)
3032 break;
3034 lambda_stack = tree_cons (NULL_TREE,
3035 lambda_expr,
3036 lambda_stack);
3038 containing_function
3039 = decl_function_context (containing_function);
3042 if (context == containing_function)
3044 decl = add_default_capture (lambda_stack,
3045 /*id=*/DECL_NAME (decl),
3046 initializer);
3048 else if (lambda_expr)
3050 error ("%qD is not captured", decl);
3051 return error_mark_node;
3053 else
3055 error (TREE_CODE (decl) == VAR_DECL
3056 ? G_("use of local variable with automatic storage from containing function")
3057 : G_("use of parameter from containing function"));
3058 error (" %q+#D declared here", decl);
3059 return error_mark_node;
3063 /* Also disallow uses of function parameters outside the function
3064 body, except inside an unevaluated context (i.e. decltype). */
3065 if (TREE_CODE (decl) == PARM_DECL
3066 && DECL_CONTEXT (decl) == NULL_TREE
3067 && !cp_unevaluated_operand)
3069 error ("use of parameter %qD outside function body", decl);
3070 return error_mark_node;
3074 /* If we didn't find anything, or what we found was a type,
3075 then this wasn't really an id-expression. */
3076 if (TREE_CODE (decl) == TEMPLATE_DECL
3077 && !DECL_FUNCTION_TEMPLATE_P (decl))
3079 *error_msg = "missing template arguments";
3080 return error_mark_node;
3082 else if (TREE_CODE (decl) == TYPE_DECL
3083 || TREE_CODE (decl) == NAMESPACE_DECL)
3085 *error_msg = "expected primary-expression";
3086 return error_mark_node;
3089 /* If the name resolved to a template parameter, there is no
3090 need to look it up again later. */
3091 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
3092 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3094 tree r;
3096 *idk = CP_ID_KIND_NONE;
3097 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3098 decl = TEMPLATE_PARM_DECL (decl);
3099 r = convert_from_reference (DECL_INITIAL (decl));
3101 if (integral_constant_expression_p
3102 && !dependent_type_p (TREE_TYPE (decl))
3103 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
3105 if (!allow_non_integral_constant_expression_p)
3106 error ("template parameter %qD of type %qT is not allowed in "
3107 "an integral constant expression because it is not of "
3108 "integral or enumeration type", decl, TREE_TYPE (decl));
3109 *non_integral_constant_expression_p = true;
3111 return r;
3113 else
3115 bool dependent_p;
3117 /* If the declaration was explicitly qualified indicate
3118 that. The semantics of `A::f(3)' are different than
3119 `f(3)' if `f' is virtual. */
3120 *idk = (scope
3121 ? CP_ID_KIND_QUALIFIED
3122 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3123 ? CP_ID_KIND_TEMPLATE_ID
3124 : CP_ID_KIND_UNQUALIFIED));
3127 /* [temp.dep.expr]
3129 An id-expression is type-dependent if it contains an
3130 identifier that was declared with a dependent type.
3132 The standard is not very specific about an id-expression that
3133 names a set of overloaded functions. What if some of them
3134 have dependent types and some of them do not? Presumably,
3135 such a name should be treated as a dependent name. */
3136 /* Assume the name is not dependent. */
3137 dependent_p = false;
3138 if (!processing_template_decl)
3139 /* No names are dependent outside a template. */
3141 else if (TREE_CODE (decl) == CONST_DECL)
3142 /* We don't want to treat enumerators as dependent. */
3144 /* A template-id where the name of the template was not resolved
3145 is definitely dependent. */
3146 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3147 && (TREE_CODE (TREE_OPERAND (decl, 0))
3148 == IDENTIFIER_NODE))
3149 dependent_p = true;
3150 /* For anything except an overloaded function, just check its
3151 type. */
3152 else if (!is_overloaded_fn (decl))
3153 dependent_p
3154 = dependent_type_p (TREE_TYPE (decl));
3155 /* For a set of overloaded functions, check each of the
3156 functions. */
3157 else
3159 tree fns = decl;
3161 if (BASELINK_P (fns))
3162 fns = BASELINK_FUNCTIONS (fns);
3164 /* For a template-id, check to see if the template
3165 arguments are dependent. */
3166 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3168 tree args = TREE_OPERAND (fns, 1);
3169 dependent_p = any_dependent_template_arguments_p (args);
3170 /* The functions are those referred to by the
3171 template-id. */
3172 fns = TREE_OPERAND (fns, 0);
3175 /* If there are no dependent template arguments, go through
3176 the overloaded functions. */
3177 while (fns && !dependent_p)
3179 tree fn = OVL_CURRENT (fns);
3181 /* Member functions of dependent classes are
3182 dependent. */
3183 if (TREE_CODE (fn) == FUNCTION_DECL
3184 && type_dependent_expression_p (fn))
3185 dependent_p = true;
3186 else if (TREE_CODE (fn) == TEMPLATE_DECL
3187 && dependent_template_p (fn))
3188 dependent_p = true;
3190 fns = OVL_NEXT (fns);
3194 /* If the name was dependent on a template parameter, we will
3195 resolve the name at instantiation time. */
3196 if (dependent_p)
3198 /* Create a SCOPE_REF for qualified names, if the scope is
3199 dependent. */
3200 if (scope)
3202 if (TYPE_P (scope))
3204 if (address_p && done)
3205 decl = finish_qualified_id_expr (scope, decl,
3206 done, address_p,
3207 template_p,
3208 template_arg_p);
3209 else
3211 tree type = NULL_TREE;
3212 if (DECL_P (decl) && !dependent_scope_p (scope))
3213 type = TREE_TYPE (decl);
3214 decl = build_qualified_name (type,
3215 scope,
3216 id_expression,
3217 template_p);
3220 if (TREE_TYPE (decl))
3221 decl = convert_from_reference (decl);
3222 return decl;
3224 /* A TEMPLATE_ID already contains all the information we
3225 need. */
3226 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3227 return id_expression;
3228 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3229 /* If we found a variable, then name lookup during the
3230 instantiation will always resolve to the same VAR_DECL
3231 (or an instantiation thereof). */
3232 if (TREE_CODE (decl) == VAR_DECL
3233 || TREE_CODE (decl) == PARM_DECL)
3235 mark_used (decl);
3236 return convert_from_reference (decl);
3238 /* The same is true for FIELD_DECL, but we also need to
3239 make sure that the syntax is correct. */
3240 else if (TREE_CODE (decl) == FIELD_DECL)
3242 /* Since SCOPE is NULL here, this is an unqualified name.
3243 Access checking has been performed during name lookup
3244 already. Turn off checking to avoid duplicate errors. */
3245 push_deferring_access_checks (dk_no_check);
3246 decl = finish_non_static_data_member
3247 (decl, NULL_TREE,
3248 /*qualifying_scope=*/NULL_TREE);
3249 pop_deferring_access_checks ();
3250 return decl;
3252 return id_expression;
3255 if (TREE_CODE (decl) == NAMESPACE_DECL)
3257 error ("use of namespace %qD as expression", decl);
3258 return error_mark_node;
3260 else if (DECL_CLASS_TEMPLATE_P (decl))
3262 error ("use of class template %qT as expression", decl);
3263 return error_mark_node;
3265 else if (TREE_CODE (decl) == TREE_LIST)
3267 /* Ambiguous reference to base members. */
3268 error ("request for member %qD is ambiguous in "
3269 "multiple inheritance lattice", id_expression);
3270 print_candidates (decl);
3271 return error_mark_node;
3274 /* Mark variable-like entities as used. Functions are similarly
3275 marked either below or after overload resolution. */
3276 if ((TREE_CODE (decl) == VAR_DECL
3277 || TREE_CODE (decl) == PARM_DECL
3278 || TREE_CODE (decl) == CONST_DECL
3279 || TREE_CODE (decl) == RESULT_DECL)
3280 && !mark_used (decl))
3281 return error_mark_node;
3283 /* Only certain kinds of names are allowed in constant
3284 expression. Template parameters have already
3285 been handled above. */
3286 if (! error_operand_p (decl)
3287 && integral_constant_expression_p
3288 && ! decl_constant_var_p (decl)
3289 && TREE_CODE (decl) != CONST_DECL
3290 && ! builtin_valid_in_constant_expr_p (decl))
3292 if (!allow_non_integral_constant_expression_p)
3294 error ("%qD cannot appear in a constant-expression", decl);
3295 return error_mark_node;
3297 *non_integral_constant_expression_p = true;
3300 tree wrap;
3301 if (TREE_CODE (decl) == VAR_DECL
3302 && !cp_unevaluated_operand
3303 && DECL_THREAD_LOCAL_P (decl)
3304 && (wrap = get_tls_wrapper_fn (decl)))
3306 /* Replace an evaluated use of the thread_local variable with
3307 a call to its wrapper. */
3308 decl = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
3310 else if (scope)
3312 decl = (adjust_result_of_qualified_name_lookup
3313 (decl, scope, current_nonlambda_class_type()));
3315 if (TREE_CODE (decl) == FUNCTION_DECL)
3316 mark_used (decl);
3318 if (TYPE_P (scope))
3319 decl = finish_qualified_id_expr (scope,
3320 decl,
3321 done,
3322 address_p,
3323 template_p,
3324 template_arg_p);
3325 else
3326 decl = convert_from_reference (decl);
3328 else if (TREE_CODE (decl) == FIELD_DECL)
3330 /* Since SCOPE is NULL here, this is an unqualified name.
3331 Access checking has been performed during name lookup
3332 already. Turn off checking to avoid duplicate errors. */
3333 push_deferring_access_checks (dk_no_check);
3334 decl = finish_non_static_data_member (decl, NULL_TREE,
3335 /*qualifying_scope=*/NULL_TREE);
3336 pop_deferring_access_checks ();
3338 else if (is_overloaded_fn (decl))
3340 tree first_fn;
3342 first_fn = get_first_fn (decl);
3343 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3344 first_fn = DECL_TEMPLATE_RESULT (first_fn);
3346 if (!really_overloaded_fn (decl)
3347 && !mark_used (first_fn))
3348 return error_mark_node;
3350 if (!template_arg_p
3351 && TREE_CODE (first_fn) == FUNCTION_DECL
3352 && DECL_FUNCTION_MEMBER_P (first_fn)
3353 && !shared_member_p (decl))
3355 /* A set of member functions. */
3356 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3357 return finish_class_member_access_expr (decl, id_expression,
3358 /*template_p=*/false,
3359 tf_warning_or_error);
3362 decl = baselink_for_fns (decl);
3364 else
3366 if (DECL_P (decl) && DECL_NONLOCAL (decl)
3367 && DECL_CLASS_SCOPE_P (decl))
3369 tree context = context_for_name_lookup (decl);
3370 if (context != current_class_type)
3372 tree path = currently_open_derived_class (context);
3373 perform_or_defer_access_check (TYPE_BINFO (path),
3374 decl, decl,
3375 tf_warning_or_error);
3379 decl = convert_from_reference (decl);
3383 if (TREE_DEPRECATED (decl))
3384 warn_deprecated_use (decl, NULL_TREE);
3386 return decl;
3389 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3390 use as a type-specifier. */
3392 tree
3393 finish_typeof (tree expr)
3395 tree type;
3397 if (type_dependent_expression_p (expr))
3399 type = cxx_make_type (TYPEOF_TYPE);
3400 TYPEOF_TYPE_EXPR (type) = expr;
3401 SET_TYPE_STRUCTURAL_EQUALITY (type);
3403 return type;
3406 expr = mark_type_use (expr);
3408 type = unlowered_expr_type (expr);
3410 if (!type || type == unknown_type_node)
3412 error ("type of %qE is unknown", expr);
3413 return error_mark_node;
3416 return type;
3419 /* Implement the __underlying_type keyword: Return the underlying
3420 type of TYPE, suitable for use as a type-specifier. */
3422 tree
3423 finish_underlying_type (tree type)
3425 tree underlying_type;
3427 if (processing_template_decl)
3429 underlying_type = cxx_make_type (UNDERLYING_TYPE);
3430 UNDERLYING_TYPE_TYPE (underlying_type) = type;
3431 SET_TYPE_STRUCTURAL_EQUALITY (underlying_type);
3433 return underlying_type;
3436 complete_type (type);
3438 if (TREE_CODE (type) != ENUMERAL_TYPE)
3440 error ("%qT is not an enumeration type", type);
3441 return error_mark_node;
3444 underlying_type = ENUM_UNDERLYING_TYPE (type);
3446 /* Fixup necessary in this case because ENUM_UNDERLYING_TYPE
3447 includes TYPE_MIN_VALUE and TYPE_MAX_VALUE information.
3448 See finish_enum_value_list for details. */
3449 if (!ENUM_FIXED_UNDERLYING_TYPE_P (type))
3450 underlying_type
3451 = c_common_type_for_mode (TYPE_MODE (underlying_type),
3452 TYPE_UNSIGNED (underlying_type));
3454 return underlying_type;
3457 /* Implement the __direct_bases keyword: Return the direct base classes
3458 of type */
3460 tree
3461 calculate_direct_bases (tree type)
3463 vec<tree, va_gc> *vector = make_tree_vector();
3464 tree bases_vec = NULL_TREE;
3465 vec<tree, va_gc> *base_binfos;
3466 tree binfo;
3467 unsigned i;
3469 complete_type (type);
3471 if (!NON_UNION_CLASS_TYPE_P (type))
3472 return make_tree_vec (0);
3474 base_binfos = BINFO_BASE_BINFOS (TYPE_BINFO (type));
3476 /* Virtual bases are initialized first */
3477 for (i = 0; base_binfos->iterate (i, &binfo); i++)
3479 if (BINFO_VIRTUAL_P (binfo))
3481 vec_safe_push (vector, binfo);
3485 /* Now non-virtuals */
3486 for (i = 0; base_binfos->iterate (i, &binfo); i++)
3488 if (!BINFO_VIRTUAL_P (binfo))
3490 vec_safe_push (vector, binfo);
3495 bases_vec = make_tree_vec (vector->length ());
3497 for (i = 0; i < vector->length (); ++i)
3499 TREE_VEC_ELT (bases_vec, i) = BINFO_TYPE ((*vector)[i]);
3501 return bases_vec;
3504 /* Implement the __bases keyword: Return the base classes
3505 of type */
3507 /* Find morally non-virtual base classes by walking binfo hierarchy */
3508 /* Virtual base classes are handled separately in finish_bases */
3510 static tree
3511 dfs_calculate_bases_pre (tree binfo, void * /*data_*/)
3513 /* Don't walk bases of virtual bases */
3514 return BINFO_VIRTUAL_P (binfo) ? dfs_skip_bases : NULL_TREE;
3517 static tree
3518 dfs_calculate_bases_post (tree binfo, void *data_)
3520 vec<tree, va_gc> **data = ((vec<tree, va_gc> **) data_);
3521 if (!BINFO_VIRTUAL_P (binfo))
3523 vec_safe_push (*data, BINFO_TYPE (binfo));
3525 return NULL_TREE;
3528 /* Calculates the morally non-virtual base classes of a class */
3529 static vec<tree, va_gc> *
3530 calculate_bases_helper (tree type)
3532 vec<tree, va_gc> *vector = make_tree_vector();
3534 /* Now add non-virtual base classes in order of construction */
3535 dfs_walk_all (TYPE_BINFO (type),
3536 dfs_calculate_bases_pre, dfs_calculate_bases_post, &vector);
3537 return vector;
3540 tree
3541 calculate_bases (tree type)
3543 vec<tree, va_gc> *vector = make_tree_vector();
3544 tree bases_vec = NULL_TREE;
3545 unsigned i;
3546 vec<tree, va_gc> *vbases;
3547 vec<tree, va_gc> *nonvbases;
3548 tree binfo;
3550 complete_type (type);
3552 if (!NON_UNION_CLASS_TYPE_P (type))
3553 return make_tree_vec (0);
3555 /* First go through virtual base classes */
3556 for (vbases = CLASSTYPE_VBASECLASSES (type), i = 0;
3557 vec_safe_iterate (vbases, i, &binfo); i++)
3559 vec<tree, va_gc> *vbase_bases;
3560 vbase_bases = calculate_bases_helper (BINFO_TYPE (binfo));
3561 vec_safe_splice (vector, vbase_bases);
3562 release_tree_vector (vbase_bases);
3565 /* Now for the non-virtual bases */
3566 nonvbases = calculate_bases_helper (type);
3567 vec_safe_splice (vector, nonvbases);
3568 release_tree_vector (nonvbases);
3570 /* Last element is entire class, so don't copy */
3571 bases_vec = make_tree_vec (vector->length () - 1);
3573 for (i = 0; i < vector->length () - 1; ++i)
3575 TREE_VEC_ELT (bases_vec, i) = (*vector)[i];
3577 release_tree_vector (vector);
3578 return bases_vec;
3581 tree
3582 finish_bases (tree type, bool direct)
3584 tree bases = NULL_TREE;
3586 if (!processing_template_decl)
3588 /* Parameter packs can only be used in templates */
3589 error ("Parameter pack __bases only valid in template declaration");
3590 return error_mark_node;
3593 bases = cxx_make_type (BASES);
3594 BASES_TYPE (bases) = type;
3595 BASES_DIRECT (bases) = direct;
3596 SET_TYPE_STRUCTURAL_EQUALITY (bases);
3598 return bases;
3601 /* Perform C++-specific checks for __builtin_offsetof before calling
3602 fold_offsetof. */
3604 tree
3605 finish_offsetof (tree expr)
3607 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3609 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3610 TREE_OPERAND (expr, 2));
3611 return error_mark_node;
3613 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3614 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3615 || TREE_TYPE (expr) == unknown_type_node)
3617 if (TREE_CODE (expr) == COMPONENT_REF
3618 || TREE_CODE (expr) == COMPOUND_EXPR)
3619 expr = TREE_OPERAND (expr, 1);
3620 error ("cannot apply %<offsetof%> to member function %qD", expr);
3621 return error_mark_node;
3623 if (REFERENCE_REF_P (expr))
3624 expr = TREE_OPERAND (expr, 0);
3625 if (TREE_CODE (expr) == COMPONENT_REF)
3627 tree object = TREE_OPERAND (expr, 0);
3628 if (!complete_type_or_else (TREE_TYPE (object), object))
3629 return error_mark_node;
3631 return fold_offsetof (expr);
3634 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3635 function is broken out from the above for the benefit of the tree-ssa
3636 project. */
3638 void
3639 simplify_aggr_init_expr (tree *tp)
3641 tree aggr_init_expr = *tp;
3643 /* Form an appropriate CALL_EXPR. */
3644 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3645 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3646 tree type = TREE_TYPE (slot);
3648 tree call_expr;
3649 enum style_t { ctor, arg, pcc } style;
3651 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3652 style = ctor;
3653 #ifdef PCC_STATIC_STRUCT_RETURN
3654 else if (1)
3655 style = pcc;
3656 #endif
3657 else
3659 gcc_assert (TREE_ADDRESSABLE (type));
3660 style = arg;
3663 call_expr = build_call_array_loc (input_location,
3664 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3666 aggr_init_expr_nargs (aggr_init_expr),
3667 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3668 TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3670 if (style == ctor)
3672 /* Replace the first argument to the ctor with the address of the
3673 slot. */
3674 cxx_mark_addressable (slot);
3675 CALL_EXPR_ARG (call_expr, 0) =
3676 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3678 else if (style == arg)
3680 /* Just mark it addressable here, and leave the rest to
3681 expand_call{,_inline}. */
3682 cxx_mark_addressable (slot);
3683 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3684 call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3686 else if (style == pcc)
3688 /* If we're using the non-reentrant PCC calling convention, then we
3689 need to copy the returned value out of the static buffer into the
3690 SLOT. */
3691 push_deferring_access_checks (dk_no_check);
3692 call_expr = build_aggr_init (slot, call_expr,
3693 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3694 tf_warning_or_error);
3695 pop_deferring_access_checks ();
3696 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3699 if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3701 tree init = build_zero_init (type, NULL_TREE,
3702 /*static_storage_p=*/false);
3703 init = build2 (INIT_EXPR, void_type_node, slot, init);
3704 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3705 init, call_expr);
3708 *tp = call_expr;
3711 /* Emit all thunks to FN that should be emitted when FN is emitted. */
3713 void
3714 emit_associated_thunks (tree fn)
3716 /* When we use vcall offsets, we emit thunks with the virtual
3717 functions to which they thunk. The whole point of vcall offsets
3718 is so that you can know statically the entire set of thunks that
3719 will ever be needed for a given virtual function, thereby
3720 enabling you to output all the thunks with the function itself. */
3721 if (DECL_VIRTUAL_P (fn)
3722 /* Do not emit thunks for extern template instantiations. */
3723 && ! DECL_REALLY_EXTERN (fn))
3725 tree thunk;
3727 for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3729 if (!THUNK_ALIAS (thunk))
3731 use_thunk (thunk, /*emit_p=*/1);
3732 if (DECL_RESULT_THUNK_P (thunk))
3734 tree probe;
3736 for (probe = DECL_THUNKS (thunk);
3737 probe; probe = DECL_CHAIN (probe))
3738 use_thunk (probe, /*emit_p=*/1);
3741 else
3742 gcc_assert (!DECL_THUNKS (thunk));
3747 /* Returns true iff FUN is an instantiation of a constexpr function
3748 template. */
3750 static inline bool
3751 is_instantiation_of_constexpr (tree fun)
3753 return (DECL_TEMPLOID_INSTANTIATION (fun)
3754 && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
3755 (DECL_TI_TEMPLATE (fun))));
3758 /* Generate RTL for FN. */
3760 bool
3761 expand_or_defer_fn_1 (tree fn)
3763 /* When the parser calls us after finishing the body of a template
3764 function, we don't really want to expand the body. */
3765 if (processing_template_decl)
3767 /* Normally, collection only occurs in rest_of_compilation. So,
3768 if we don't collect here, we never collect junk generated
3769 during the processing of templates until we hit a
3770 non-template function. It's not safe to do this inside a
3771 nested class, though, as the parser may have local state that
3772 is not a GC root. */
3773 if (!function_depth)
3774 ggc_collect ();
3775 return false;
3778 gcc_assert (DECL_SAVED_TREE (fn));
3780 /* If this is a constructor or destructor body, we have to clone
3781 it. */
3782 if (maybe_clone_body (fn))
3784 /* We don't want to process FN again, so pretend we've written
3785 it out, even though we haven't. */
3786 TREE_ASM_WRITTEN (fn) = 1;
3787 /* If this is an instantiation of a constexpr function, keep
3788 DECL_SAVED_TREE for explain_invalid_constexpr_fn. */
3789 if (!is_instantiation_of_constexpr (fn))
3790 DECL_SAVED_TREE (fn) = NULL_TREE;
3791 return false;
3794 /* We make a decision about linkage for these functions at the end
3795 of the compilation. Until that point, we do not want the back
3796 end to output them -- but we do want it to see the bodies of
3797 these functions so that it can inline them as appropriate. */
3798 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3800 if (DECL_INTERFACE_KNOWN (fn))
3801 /* We've already made a decision as to how this function will
3802 be handled. */;
3803 else if (!at_eof)
3805 DECL_EXTERNAL (fn) = 1;
3806 DECL_NOT_REALLY_EXTERN (fn) = 1;
3807 note_vague_linkage_fn (fn);
3808 /* A non-template inline function with external linkage will
3809 always be COMDAT. As we must eventually determine the
3810 linkage of all functions, and as that causes writes to
3811 the data mapped in from the PCH file, it's advantageous
3812 to mark the functions at this point. */
3813 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3815 /* This function must have external linkage, as
3816 otherwise DECL_INTERFACE_KNOWN would have been
3817 set. */
3818 gcc_assert (TREE_PUBLIC (fn));
3819 comdat_linkage (fn);
3820 DECL_INTERFACE_KNOWN (fn) = 1;
3823 else
3824 import_export_decl (fn);
3826 /* If the user wants us to keep all inline functions, then mark
3827 this function as needed so that finish_file will make sure to
3828 output it later. Similarly, all dllexport'd functions must
3829 be emitted; there may be callers in other DLLs. */
3830 if ((flag_keep_inline_functions
3831 && DECL_DECLARED_INLINE_P (fn)
3832 && !DECL_REALLY_EXTERN (fn))
3833 || (flag_keep_inline_dllexport
3834 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn))))
3836 mark_needed (fn);
3837 DECL_EXTERNAL (fn) = 0;
3841 /* There's no reason to do any of the work here if we're only doing
3842 semantic analysis; this code just generates RTL. */
3843 if (flag_syntax_only)
3844 return false;
3846 return true;
3849 void
3850 expand_or_defer_fn (tree fn)
3852 if (expand_or_defer_fn_1 (fn))
3854 function_depth++;
3856 /* Expand or defer, at the whim of the compilation unit manager. */
3857 cgraph_finalize_function (fn, function_depth > 1);
3858 emit_associated_thunks (fn);
3860 function_depth--;
3864 struct nrv_data
3866 tree var;
3867 tree result;
3868 hash_table <pointer_hash <tree_node> > visited;
3871 /* Helper function for walk_tree, used by finalize_nrv below. */
3873 static tree
3874 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3876 struct nrv_data *dp = (struct nrv_data *)data;
3877 tree_node **slot;
3879 /* No need to walk into types. There wouldn't be any need to walk into
3880 non-statements, except that we have to consider STMT_EXPRs. */
3881 if (TYPE_P (*tp))
3882 *walk_subtrees = 0;
3883 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3884 but differs from using NULL_TREE in that it indicates that we care
3885 about the value of the RESULT_DECL. */
3886 else if (TREE_CODE (*tp) == RETURN_EXPR)
3887 TREE_OPERAND (*tp, 0) = dp->result;
3888 /* Change all cleanups for the NRV to only run when an exception is
3889 thrown. */
3890 else if (TREE_CODE (*tp) == CLEANUP_STMT
3891 && CLEANUP_DECL (*tp) == dp->var)
3892 CLEANUP_EH_ONLY (*tp) = 1;
3893 /* Replace the DECL_EXPR for the NRV with an initialization of the
3894 RESULT_DECL, if needed. */
3895 else if (TREE_CODE (*tp) == DECL_EXPR
3896 && DECL_EXPR_DECL (*tp) == dp->var)
3898 tree init;
3899 if (DECL_INITIAL (dp->var)
3900 && DECL_INITIAL (dp->var) != error_mark_node)
3901 init = build2 (INIT_EXPR, void_type_node, dp->result,
3902 DECL_INITIAL (dp->var));
3903 else
3904 init = build_empty_stmt (EXPR_LOCATION (*tp));
3905 DECL_INITIAL (dp->var) = NULL_TREE;
3906 SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3907 *tp = init;
3909 /* And replace all uses of the NRV with the RESULT_DECL. */
3910 else if (*tp == dp->var)
3911 *tp = dp->result;
3913 /* Avoid walking into the same tree more than once. Unfortunately, we
3914 can't just use walk_tree_without duplicates because it would only call
3915 us for the first occurrence of dp->var in the function body. */
3916 slot = dp->visited.find_slot (*tp, INSERT);
3917 if (*slot)
3918 *walk_subtrees = 0;
3919 else
3920 *slot = *tp;
3922 /* Keep iterating. */
3923 return NULL_TREE;
3926 /* Called from finish_function to implement the named return value
3927 optimization by overriding all the RETURN_EXPRs and pertinent
3928 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3929 RESULT_DECL for the function. */
3931 void
3932 finalize_nrv (tree *tp, tree var, tree result)
3934 struct nrv_data data;
3936 /* Copy name from VAR to RESULT. */
3937 DECL_NAME (result) = DECL_NAME (var);
3938 /* Don't forget that we take its address. */
3939 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3940 /* Finally set DECL_VALUE_EXPR to avoid assigning
3941 a stack slot at -O0 for the original var and debug info
3942 uses RESULT location for VAR. */
3943 SET_DECL_VALUE_EXPR (var, result);
3944 DECL_HAS_VALUE_EXPR_P (var) = 1;
3946 data.var = var;
3947 data.result = result;
3948 data.visited.create (37);
3949 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3950 data.visited.dispose ();
3953 /* Create CP_OMP_CLAUSE_INFO for clause C. Returns true if it is invalid. */
3955 bool
3956 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3957 bool need_copy_ctor, bool need_copy_assignment)
3959 int save_errorcount = errorcount;
3960 tree info, t;
3962 /* Always allocate 3 elements for simplicity. These are the
3963 function decls for the ctor, dtor, and assignment op.
3964 This layout is known to the three lang hooks,
3965 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3966 and cxx_omp_clause_assign_op. */
3967 info = make_tree_vec (3);
3968 CP_OMP_CLAUSE_INFO (c) = info;
3970 if (need_default_ctor || need_copy_ctor)
3972 if (need_default_ctor)
3973 t = get_default_ctor (type);
3974 else
3975 t = get_copy_ctor (type, tf_warning_or_error);
3977 if (t && !trivial_fn_p (t))
3978 TREE_VEC_ELT (info, 0) = t;
3981 if ((need_default_ctor || need_copy_ctor)
3982 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3983 TREE_VEC_ELT (info, 1) = get_dtor (type, tf_warning_or_error);
3985 if (need_copy_assignment)
3987 t = get_copy_assign (type);
3989 if (t && !trivial_fn_p (t))
3990 TREE_VEC_ELT (info, 2) = t;
3993 return errorcount != save_errorcount;
3996 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3997 Remove any elements from the list that are invalid. */
3999 tree
4000 finish_omp_clauses (tree clauses)
4002 bitmap_head generic_head, firstprivate_head, lastprivate_head;
4003 tree c, t, *pc = &clauses;
4004 const char *name;
4006 bitmap_obstack_initialize (NULL);
4007 bitmap_initialize (&generic_head, &bitmap_default_obstack);
4008 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
4009 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
4011 for (pc = &clauses, c = clauses; c ; c = *pc)
4013 bool remove = false;
4015 switch (OMP_CLAUSE_CODE (c))
4017 case OMP_CLAUSE_SHARED:
4018 name = "shared";
4019 goto check_dup_generic;
4020 case OMP_CLAUSE_PRIVATE:
4021 name = "private";
4022 goto check_dup_generic;
4023 case OMP_CLAUSE_REDUCTION:
4024 name = "reduction";
4025 goto check_dup_generic;
4026 case OMP_CLAUSE_COPYPRIVATE:
4027 name = "copyprivate";
4028 goto check_dup_generic;
4029 case OMP_CLAUSE_COPYIN:
4030 name = "copyin";
4031 goto check_dup_generic;
4032 check_dup_generic:
4033 t = OMP_CLAUSE_DECL (c);
4034 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4036 if (processing_template_decl)
4037 break;
4038 if (DECL_P (t))
4039 error ("%qD is not a variable in clause %qs", t, name);
4040 else
4041 error ("%qE is not a variable in clause %qs", t, name);
4042 remove = true;
4044 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4045 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
4046 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
4048 error ("%qD appears more than once in data clauses", t);
4049 remove = true;
4051 else
4052 bitmap_set_bit (&generic_head, DECL_UID (t));
4053 break;
4055 case OMP_CLAUSE_FIRSTPRIVATE:
4056 t = OMP_CLAUSE_DECL (c);
4057 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4059 if (processing_template_decl)
4060 break;
4061 if (DECL_P (t))
4062 error ("%qD is not a variable in clause %<firstprivate%>", t);
4063 else
4064 error ("%qE is not a variable in clause %<firstprivate%>", t);
4065 remove = true;
4067 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4068 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
4070 error ("%qD appears more than once in data clauses", t);
4071 remove = true;
4073 else
4074 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
4075 break;
4077 case OMP_CLAUSE_LASTPRIVATE:
4078 t = OMP_CLAUSE_DECL (c);
4079 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4081 if (processing_template_decl)
4082 break;
4083 if (DECL_P (t))
4084 error ("%qD is not a variable in clause %<lastprivate%>", t);
4085 else
4086 error ("%qE is not a variable in clause %<lastprivate%>", t);
4087 remove = true;
4089 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4090 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
4092 error ("%qD appears more than once in data clauses", t);
4093 remove = true;
4095 else
4096 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
4097 break;
4099 case OMP_CLAUSE_IF:
4100 t = OMP_CLAUSE_IF_EXPR (c);
4101 t = maybe_convert_cond (t);
4102 if (t == error_mark_node)
4103 remove = true;
4104 else if (!processing_template_decl)
4105 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4106 OMP_CLAUSE_IF_EXPR (c) = t;
4107 break;
4109 case OMP_CLAUSE_FINAL:
4110 t = OMP_CLAUSE_FINAL_EXPR (c);
4111 t = maybe_convert_cond (t);
4112 if (t == error_mark_node)
4113 remove = true;
4114 else if (!processing_template_decl)
4115 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4116 OMP_CLAUSE_FINAL_EXPR (c) = t;
4117 break;
4119 case OMP_CLAUSE_NUM_THREADS:
4120 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
4121 if (t == error_mark_node)
4122 remove = true;
4123 else if (!type_dependent_expression_p (t)
4124 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
4126 error ("num_threads expression must be integral");
4127 remove = true;
4129 else
4131 t = mark_rvalue_use (t);
4132 if (!processing_template_decl)
4133 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4134 OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
4136 break;
4138 case OMP_CLAUSE_SCHEDULE:
4139 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
4140 if (t == NULL)
4142 else if (t == error_mark_node)
4143 remove = true;
4144 else if (!type_dependent_expression_p (t)
4145 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
4147 error ("schedule chunk size expression must be integral");
4148 remove = true;
4150 else
4152 t = mark_rvalue_use (t);
4153 if (!processing_template_decl)
4154 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4155 OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
4157 break;
4159 case OMP_CLAUSE_NOWAIT:
4160 case OMP_CLAUSE_ORDERED:
4161 case OMP_CLAUSE_DEFAULT:
4162 case OMP_CLAUSE_UNTIED:
4163 case OMP_CLAUSE_COLLAPSE:
4164 case OMP_CLAUSE_MERGEABLE:
4165 break;
4167 default:
4168 gcc_unreachable ();
4171 if (remove)
4172 *pc = OMP_CLAUSE_CHAIN (c);
4173 else
4174 pc = &OMP_CLAUSE_CHAIN (c);
4177 for (pc = &clauses, c = clauses; c ; c = *pc)
4179 enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
4180 bool remove = false;
4181 bool need_complete_non_reference = false;
4182 bool need_default_ctor = false;
4183 bool need_copy_ctor = false;
4184 bool need_copy_assignment = false;
4185 bool need_implicitly_determined = false;
4186 tree type, inner_type;
4188 switch (c_kind)
4190 case OMP_CLAUSE_SHARED:
4191 name = "shared";
4192 need_implicitly_determined = true;
4193 break;
4194 case OMP_CLAUSE_PRIVATE:
4195 name = "private";
4196 need_complete_non_reference = true;
4197 need_default_ctor = true;
4198 need_implicitly_determined = true;
4199 break;
4200 case OMP_CLAUSE_FIRSTPRIVATE:
4201 name = "firstprivate";
4202 need_complete_non_reference = true;
4203 need_copy_ctor = true;
4204 need_implicitly_determined = true;
4205 break;
4206 case OMP_CLAUSE_LASTPRIVATE:
4207 name = "lastprivate";
4208 need_complete_non_reference = true;
4209 need_copy_assignment = true;
4210 need_implicitly_determined = true;
4211 break;
4212 case OMP_CLAUSE_REDUCTION:
4213 name = "reduction";
4214 need_implicitly_determined = true;
4215 break;
4216 case OMP_CLAUSE_COPYPRIVATE:
4217 name = "copyprivate";
4218 need_copy_assignment = true;
4219 break;
4220 case OMP_CLAUSE_COPYIN:
4221 name = "copyin";
4222 need_copy_assignment = true;
4223 break;
4224 default:
4225 pc = &OMP_CLAUSE_CHAIN (c);
4226 continue;
4229 t = OMP_CLAUSE_DECL (c);
4230 if (processing_template_decl
4231 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4233 pc = &OMP_CLAUSE_CHAIN (c);
4234 continue;
4237 switch (c_kind)
4239 case OMP_CLAUSE_LASTPRIVATE:
4240 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
4241 need_default_ctor = true;
4242 break;
4244 case OMP_CLAUSE_REDUCTION:
4245 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
4246 || POINTER_TYPE_P (TREE_TYPE (t)))
4248 error ("%qE has invalid type for %<reduction%>", t);
4249 remove = true;
4251 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
4253 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
4254 switch (r_code)
4256 case PLUS_EXPR:
4257 case MULT_EXPR:
4258 case MINUS_EXPR:
4259 case MIN_EXPR:
4260 case MAX_EXPR:
4261 break;
4262 default:
4263 error ("%qE has invalid type for %<reduction(%s)%>",
4264 t, operator_name_info[r_code].name);
4265 remove = true;
4268 break;
4270 case OMP_CLAUSE_COPYIN:
4271 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
4273 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
4274 remove = true;
4276 break;
4278 default:
4279 break;
4282 if (need_complete_non_reference || need_copy_assignment)
4284 t = require_complete_type (t);
4285 if (t == error_mark_node)
4286 remove = true;
4287 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
4288 && need_complete_non_reference)
4290 error ("%qE has reference type for %qs", t, name);
4291 remove = true;
4294 if (need_implicitly_determined)
4296 const char *share_name = NULL;
4298 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
4299 share_name = "threadprivate";
4300 else switch (cxx_omp_predetermined_sharing (t))
4302 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
4303 break;
4304 case OMP_CLAUSE_DEFAULT_SHARED:
4305 /* const vars may be specified in firstprivate clause. */
4306 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
4307 && cxx_omp_const_qual_no_mutable (t))
4308 break;
4309 share_name = "shared";
4310 break;
4311 case OMP_CLAUSE_DEFAULT_PRIVATE:
4312 share_name = "private";
4313 break;
4314 default:
4315 gcc_unreachable ();
4317 if (share_name)
4319 error ("%qE is predetermined %qs for %qs",
4320 t, share_name, name);
4321 remove = true;
4325 /* We're interested in the base element, not arrays. */
4326 inner_type = type = TREE_TYPE (t);
4327 while (TREE_CODE (inner_type) == ARRAY_TYPE)
4328 inner_type = TREE_TYPE (inner_type);
4330 /* Check for special function availability by building a call to one.
4331 Save the results, because later we won't be in the right context
4332 for making these queries. */
4333 if (CLASS_TYPE_P (inner_type)
4334 && COMPLETE_TYPE_P (inner_type)
4335 && (need_default_ctor || need_copy_ctor || need_copy_assignment)
4336 && !type_dependent_expression_p (t)
4337 && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
4338 need_copy_ctor, need_copy_assignment))
4339 remove = true;
4341 if (remove)
4342 *pc = OMP_CLAUSE_CHAIN (c);
4343 else
4344 pc = &OMP_CLAUSE_CHAIN (c);
4347 bitmap_obstack_release (NULL);
4348 return clauses;
4351 /* For all variables in the tree_list VARS, mark them as thread local. */
4353 void
4354 finish_omp_threadprivate (tree vars)
4356 tree t;
4358 /* Mark every variable in VARS to be assigned thread local storage. */
4359 for (t = vars; t; t = TREE_CHAIN (t))
4361 tree v = TREE_PURPOSE (t);
4363 if (error_operand_p (v))
4365 else if (TREE_CODE (v) != VAR_DECL)
4366 error ("%<threadprivate%> %qD is not file, namespace "
4367 "or block scope variable", v);
4368 /* If V had already been marked threadprivate, it doesn't matter
4369 whether it had been used prior to this point. */
4370 else if (TREE_USED (v)
4371 && (DECL_LANG_SPECIFIC (v) == NULL
4372 || !CP_DECL_THREADPRIVATE_P (v)))
4373 error ("%qE declared %<threadprivate%> after first use", v);
4374 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
4375 error ("automatic variable %qE cannot be %<threadprivate%>", v);
4376 else if (! COMPLETE_TYPE_P (complete_type (TREE_TYPE (v))))
4377 error ("%<threadprivate%> %qE has incomplete type", v);
4378 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
4379 && CP_DECL_CONTEXT (v) != current_class_type)
4380 error ("%<threadprivate%> %qE directive not "
4381 "in %qT definition", v, CP_DECL_CONTEXT (v));
4382 else
4384 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
4385 if (DECL_LANG_SPECIFIC (v) == NULL)
4387 retrofit_lang_decl (v);
4389 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4390 after the allocation of the lang_decl structure. */
4391 if (DECL_DISCRIMINATOR_P (v))
4392 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
4395 if (! DECL_THREAD_LOCAL_P (v))
4397 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4398 /* If rtl has been already set for this var, call
4399 make_decl_rtl once again, so that encode_section_info
4400 has a chance to look at the new decl flags. */
4401 if (DECL_RTL_SET_P (v))
4402 make_decl_rtl (v);
4404 CP_DECL_THREADPRIVATE_P (v) = 1;
4409 /* Build an OpenMP structured block. */
4411 tree
4412 begin_omp_structured_block (void)
4414 return do_pushlevel (sk_omp);
4417 tree
4418 finish_omp_structured_block (tree block)
4420 return do_poplevel (block);
4423 /* Similarly, except force the retention of the BLOCK. */
4425 tree
4426 begin_omp_parallel (void)
4428 keep_next_level (true);
4429 return begin_omp_structured_block ();
4432 tree
4433 finish_omp_parallel (tree clauses, tree body)
4435 tree stmt;
4437 body = finish_omp_structured_block (body);
4439 stmt = make_node (OMP_PARALLEL);
4440 TREE_TYPE (stmt) = void_type_node;
4441 OMP_PARALLEL_CLAUSES (stmt) = clauses;
4442 OMP_PARALLEL_BODY (stmt) = body;
4444 return add_stmt (stmt);
4447 tree
4448 begin_omp_task (void)
4450 keep_next_level (true);
4451 return begin_omp_structured_block ();
4454 tree
4455 finish_omp_task (tree clauses, tree body)
4457 tree stmt;
4459 body = finish_omp_structured_block (body);
4461 stmt = make_node (OMP_TASK);
4462 TREE_TYPE (stmt) = void_type_node;
4463 OMP_TASK_CLAUSES (stmt) = clauses;
4464 OMP_TASK_BODY (stmt) = body;
4466 return add_stmt (stmt);
4469 /* Helper function for finish_omp_for. Convert Ith random access iterator
4470 into integral iterator. Return FALSE if successful. */
4472 static bool
4473 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4474 tree condv, tree incrv, tree *body,
4475 tree *pre_body, tree clauses)
4477 tree diff, iter_init, iter_incr = NULL, last;
4478 tree incr_var = NULL, orig_pre_body, orig_body, c;
4479 tree decl = TREE_VEC_ELT (declv, i);
4480 tree init = TREE_VEC_ELT (initv, i);
4481 tree cond = TREE_VEC_ELT (condv, i);
4482 tree incr = TREE_VEC_ELT (incrv, i);
4483 tree iter = decl;
4484 location_t elocus = locus;
4486 if (init && EXPR_HAS_LOCATION (init))
4487 elocus = EXPR_LOCATION (init);
4489 switch (TREE_CODE (cond))
4491 case GT_EXPR:
4492 case GE_EXPR:
4493 case LT_EXPR:
4494 case LE_EXPR:
4495 if (TREE_OPERAND (cond, 1) == iter)
4496 cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4497 TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4498 if (TREE_OPERAND (cond, 0) != iter)
4499 cond = error_mark_node;
4500 else
4502 tree tem = build_x_binary_op (EXPR_LOCATION (cond),
4503 TREE_CODE (cond),
4504 iter, ERROR_MARK,
4505 TREE_OPERAND (cond, 1), ERROR_MARK,
4506 NULL, tf_warning_or_error);
4507 if (error_operand_p (tem))
4508 return true;
4510 break;
4511 default:
4512 cond = error_mark_node;
4513 break;
4515 if (cond == error_mark_node)
4517 error_at (elocus, "invalid controlling predicate");
4518 return true;
4520 diff = build_x_binary_op (elocus, MINUS_EXPR, TREE_OPERAND (cond, 1),
4521 ERROR_MARK, iter, ERROR_MARK, NULL,
4522 tf_warning_or_error);
4523 if (error_operand_p (diff))
4524 return true;
4525 if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4527 error_at (elocus, "difference between %qE and %qD does not have integer type",
4528 TREE_OPERAND (cond, 1), iter);
4529 return true;
4532 switch (TREE_CODE (incr))
4534 case PREINCREMENT_EXPR:
4535 case PREDECREMENT_EXPR:
4536 case POSTINCREMENT_EXPR:
4537 case POSTDECREMENT_EXPR:
4538 if (TREE_OPERAND (incr, 0) != iter)
4540 incr = error_mark_node;
4541 break;
4543 iter_incr = build_x_unary_op (EXPR_LOCATION (incr),
4544 TREE_CODE (incr), iter,
4545 tf_warning_or_error);
4546 if (error_operand_p (iter_incr))
4547 return true;
4548 else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4549 || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4550 incr = integer_one_node;
4551 else
4552 incr = integer_minus_one_node;
4553 break;
4554 case MODIFY_EXPR:
4555 if (TREE_OPERAND (incr, 0) != iter)
4556 incr = error_mark_node;
4557 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4558 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4560 tree rhs = TREE_OPERAND (incr, 1);
4561 if (TREE_OPERAND (rhs, 0) == iter)
4563 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4564 != INTEGER_TYPE)
4565 incr = error_mark_node;
4566 else
4568 iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
4569 iter, TREE_CODE (rhs),
4570 TREE_OPERAND (rhs, 1),
4571 tf_warning_or_error);
4572 if (error_operand_p (iter_incr))
4573 return true;
4574 incr = TREE_OPERAND (rhs, 1);
4575 incr = cp_convert (TREE_TYPE (diff), incr,
4576 tf_warning_or_error);
4577 if (TREE_CODE (rhs) == MINUS_EXPR)
4579 incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4580 incr = fold_if_not_in_template (incr);
4582 if (TREE_CODE (incr) != INTEGER_CST
4583 && (TREE_CODE (incr) != NOP_EXPR
4584 || (TREE_CODE (TREE_OPERAND (incr, 0))
4585 != INTEGER_CST)))
4586 iter_incr = NULL;
4589 else if (TREE_OPERAND (rhs, 1) == iter)
4591 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4592 || TREE_CODE (rhs) != PLUS_EXPR)
4593 incr = error_mark_node;
4594 else
4596 iter_incr = build_x_binary_op (EXPR_LOCATION (rhs),
4597 PLUS_EXPR,
4598 TREE_OPERAND (rhs, 0),
4599 ERROR_MARK, iter,
4600 ERROR_MARK, NULL,
4601 tf_warning_or_error);
4602 if (error_operand_p (iter_incr))
4603 return true;
4604 iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
4605 iter, NOP_EXPR,
4606 iter_incr,
4607 tf_warning_or_error);
4608 if (error_operand_p (iter_incr))
4609 return true;
4610 incr = TREE_OPERAND (rhs, 0);
4611 iter_incr = NULL;
4614 else
4615 incr = error_mark_node;
4617 else
4618 incr = error_mark_node;
4619 break;
4620 default:
4621 incr = error_mark_node;
4622 break;
4625 if (incr == error_mark_node)
4627 error_at (elocus, "invalid increment expression");
4628 return true;
4631 incr = cp_convert (TREE_TYPE (diff), incr, tf_warning_or_error);
4632 for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4633 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4634 && OMP_CLAUSE_DECL (c) == iter)
4635 break;
4637 decl = create_temporary_var (TREE_TYPE (diff));
4638 pushdecl (decl);
4639 add_decl_expr (decl);
4640 last = create_temporary_var (TREE_TYPE (diff));
4641 pushdecl (last);
4642 add_decl_expr (last);
4643 if (c && iter_incr == NULL)
4645 incr_var = create_temporary_var (TREE_TYPE (diff));
4646 pushdecl (incr_var);
4647 add_decl_expr (incr_var);
4649 gcc_assert (stmts_are_full_exprs_p ());
4651 orig_pre_body = *pre_body;
4652 *pre_body = push_stmt_list ();
4653 if (orig_pre_body)
4654 add_stmt (orig_pre_body);
4655 if (init != NULL)
4656 finish_expr_stmt (build_x_modify_expr (elocus,
4657 iter, NOP_EXPR, init,
4658 tf_warning_or_error));
4659 init = build_int_cst (TREE_TYPE (diff), 0);
4660 if (c && iter_incr == NULL)
4662 finish_expr_stmt (build_x_modify_expr (elocus,
4663 incr_var, NOP_EXPR,
4664 incr, tf_warning_or_error));
4665 incr = incr_var;
4666 iter_incr = build_x_modify_expr (elocus,
4667 iter, PLUS_EXPR, incr,
4668 tf_warning_or_error);
4670 finish_expr_stmt (build_x_modify_expr (elocus,
4671 last, NOP_EXPR, init,
4672 tf_warning_or_error));
4673 *pre_body = pop_stmt_list (*pre_body);
4675 cond = cp_build_binary_op (elocus,
4676 TREE_CODE (cond), decl, diff,
4677 tf_warning_or_error);
4678 incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4679 elocus, incr, NULL_TREE);
4681 orig_body = *body;
4682 *body = push_stmt_list ();
4683 iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4684 iter_init = build_x_modify_expr (elocus,
4685 iter, PLUS_EXPR, iter_init,
4686 tf_warning_or_error);
4687 iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4688 finish_expr_stmt (iter_init);
4689 finish_expr_stmt (build_x_modify_expr (elocus,
4690 last, NOP_EXPR, decl,
4691 tf_warning_or_error));
4692 add_stmt (orig_body);
4693 *body = pop_stmt_list (*body);
4695 if (c)
4697 OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4698 finish_expr_stmt (iter_incr);
4699 OMP_CLAUSE_LASTPRIVATE_STMT (c)
4700 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4703 TREE_VEC_ELT (declv, i) = decl;
4704 TREE_VEC_ELT (initv, i) = init;
4705 TREE_VEC_ELT (condv, i) = cond;
4706 TREE_VEC_ELT (incrv, i) = incr;
4708 return false;
4711 /* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
4712 are directly for their associated operands in the statement. DECL
4713 and INIT are a combo; if DECL is NULL then INIT ought to be a
4714 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
4715 optional statements that need to go before the loop into its
4716 sk_omp scope. */
4718 tree
4719 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4720 tree incrv, tree body, tree pre_body, tree clauses)
4722 tree omp_for = NULL, orig_incr = NULL;
4723 tree decl, init, cond, incr;
4724 location_t elocus;
4725 int i;
4727 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4728 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4729 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4730 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4732 decl = TREE_VEC_ELT (declv, i);
4733 init = TREE_VEC_ELT (initv, i);
4734 cond = TREE_VEC_ELT (condv, i);
4735 incr = TREE_VEC_ELT (incrv, i);
4736 elocus = locus;
4738 if (decl == NULL)
4740 if (init != NULL)
4741 switch (TREE_CODE (init))
4743 case MODIFY_EXPR:
4744 decl = TREE_OPERAND (init, 0);
4745 init = TREE_OPERAND (init, 1);
4746 break;
4747 case MODOP_EXPR:
4748 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4750 decl = TREE_OPERAND (init, 0);
4751 init = TREE_OPERAND (init, 2);
4753 break;
4754 default:
4755 break;
4758 if (decl == NULL)
4760 error_at (locus,
4761 "expected iteration declaration or initialization");
4762 return NULL;
4766 if (init && EXPR_HAS_LOCATION (init))
4767 elocus = EXPR_LOCATION (init);
4769 if (cond == NULL)
4771 error_at (elocus, "missing controlling predicate");
4772 return NULL;
4775 if (incr == NULL)
4777 error_at (elocus, "missing increment expression");
4778 return NULL;
4781 TREE_VEC_ELT (declv, i) = decl;
4782 TREE_VEC_ELT (initv, i) = init;
4785 if (dependent_omp_for_p (declv, initv, condv, incrv))
4787 tree stmt;
4789 stmt = make_node (OMP_FOR);
4791 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4793 /* This is really just a place-holder. We'll be decomposing this
4794 again and going through the cp_build_modify_expr path below when
4795 we instantiate the thing. */
4796 TREE_VEC_ELT (initv, i)
4797 = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4798 TREE_VEC_ELT (initv, i));
4801 TREE_TYPE (stmt) = void_type_node;
4802 OMP_FOR_INIT (stmt) = initv;
4803 OMP_FOR_COND (stmt) = condv;
4804 OMP_FOR_INCR (stmt) = incrv;
4805 OMP_FOR_BODY (stmt) = body;
4806 OMP_FOR_PRE_BODY (stmt) = pre_body;
4807 OMP_FOR_CLAUSES (stmt) = clauses;
4809 SET_EXPR_LOCATION (stmt, locus);
4810 return add_stmt (stmt);
4813 if (processing_template_decl)
4814 orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4816 for (i = 0; i < TREE_VEC_LENGTH (declv); )
4818 decl = TREE_VEC_ELT (declv, i);
4819 init = TREE_VEC_ELT (initv, i);
4820 cond = TREE_VEC_ELT (condv, i);
4821 incr = TREE_VEC_ELT (incrv, i);
4822 if (orig_incr)
4823 TREE_VEC_ELT (orig_incr, i) = incr;
4824 elocus = locus;
4826 if (init && EXPR_HAS_LOCATION (init))
4827 elocus = EXPR_LOCATION (init);
4829 if (!DECL_P (decl))
4831 error_at (elocus, "expected iteration declaration or initialization");
4832 return NULL;
4835 if (incr && TREE_CODE (incr) == MODOP_EXPR)
4837 if (orig_incr)
4838 TREE_VEC_ELT (orig_incr, i) = incr;
4839 incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4840 TREE_CODE (TREE_OPERAND (incr, 1)),
4841 TREE_OPERAND (incr, 2),
4842 tf_warning_or_error);
4845 if (CLASS_TYPE_P (TREE_TYPE (decl)))
4847 if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4848 incrv, &body, &pre_body, clauses))
4849 return NULL;
4850 continue;
4853 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4854 && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4856 error_at (elocus, "invalid type for iteration variable %qE", decl);
4857 return NULL;
4860 if (!processing_template_decl)
4862 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4863 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4865 else
4866 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4867 if (cond
4868 && TREE_SIDE_EFFECTS (cond)
4869 && COMPARISON_CLASS_P (cond)
4870 && !processing_template_decl)
4872 tree t = TREE_OPERAND (cond, 0);
4873 if (TREE_SIDE_EFFECTS (t)
4874 && t != decl
4875 && (TREE_CODE (t) != NOP_EXPR
4876 || TREE_OPERAND (t, 0) != decl))
4877 TREE_OPERAND (cond, 0)
4878 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4880 t = TREE_OPERAND (cond, 1);
4881 if (TREE_SIDE_EFFECTS (t)
4882 && t != decl
4883 && (TREE_CODE (t) != NOP_EXPR
4884 || TREE_OPERAND (t, 0) != decl))
4885 TREE_OPERAND (cond, 1)
4886 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4888 if (decl == error_mark_node || init == error_mark_node)
4889 return NULL;
4891 TREE_VEC_ELT (declv, i) = decl;
4892 TREE_VEC_ELT (initv, i) = init;
4893 TREE_VEC_ELT (condv, i) = cond;
4894 TREE_VEC_ELT (incrv, i) = incr;
4895 i++;
4898 if (IS_EMPTY_STMT (pre_body))
4899 pre_body = NULL;
4901 omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4902 body, pre_body);
4904 if (omp_for == NULL)
4905 return NULL;
4907 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4909 decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4910 incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4912 if (TREE_CODE (incr) != MODIFY_EXPR)
4913 continue;
4915 if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4916 && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4917 && !processing_template_decl)
4919 tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4920 if (TREE_SIDE_EFFECTS (t)
4921 && t != decl
4922 && (TREE_CODE (t) != NOP_EXPR
4923 || TREE_OPERAND (t, 0) != decl))
4924 TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4925 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4927 t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4928 if (TREE_SIDE_EFFECTS (t)
4929 && t != decl
4930 && (TREE_CODE (t) != NOP_EXPR
4931 || TREE_OPERAND (t, 0) != decl))
4932 TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4933 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4936 if (orig_incr)
4937 TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4939 if (omp_for != NULL)
4940 OMP_FOR_CLAUSES (omp_for) = clauses;
4941 return omp_for;
4944 void
4945 finish_omp_atomic (enum tree_code code, enum tree_code opcode, tree lhs,
4946 tree rhs, tree v, tree lhs1, tree rhs1)
4948 tree orig_lhs;
4949 tree orig_rhs;
4950 tree orig_v;
4951 tree orig_lhs1;
4952 tree orig_rhs1;
4953 bool dependent_p;
4954 tree stmt;
4956 orig_lhs = lhs;
4957 orig_rhs = rhs;
4958 orig_v = v;
4959 orig_lhs1 = lhs1;
4960 orig_rhs1 = rhs1;
4961 dependent_p = false;
4962 stmt = NULL_TREE;
4964 /* Even in a template, we can detect invalid uses of the atomic
4965 pragma if neither LHS nor RHS is type-dependent. */
4966 if (processing_template_decl)
4968 dependent_p = (type_dependent_expression_p (lhs)
4969 || (rhs && type_dependent_expression_p (rhs))
4970 || (v && type_dependent_expression_p (v))
4971 || (lhs1 && type_dependent_expression_p (lhs1))
4972 || (rhs1 && type_dependent_expression_p (rhs1)));
4973 if (!dependent_p)
4975 lhs = build_non_dependent_expr (lhs);
4976 if (rhs)
4977 rhs = build_non_dependent_expr (rhs);
4978 if (v)
4979 v = build_non_dependent_expr (v);
4980 if (lhs1)
4981 lhs1 = build_non_dependent_expr (lhs1);
4982 if (rhs1)
4983 rhs1 = build_non_dependent_expr (rhs1);
4986 if (!dependent_p)
4988 stmt = c_finish_omp_atomic (input_location, code, opcode, lhs, rhs,
4989 v, lhs1, rhs1);
4990 if (stmt == error_mark_node)
4991 return;
4993 if (processing_template_decl)
4995 if (code == OMP_ATOMIC_READ)
4997 stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs),
4998 OMP_ATOMIC_READ, orig_lhs);
4999 stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
5001 else
5003 if (opcode == NOP_EXPR)
5004 stmt = build2 (MODIFY_EXPR, void_type_node, orig_lhs, orig_rhs);
5005 else
5006 stmt = build2 (opcode, void_type_node, orig_lhs, orig_rhs);
5007 if (orig_rhs1)
5008 stmt = build_min_nt_loc (EXPR_LOCATION (orig_rhs1),
5009 COMPOUND_EXPR, orig_rhs1, stmt);
5010 if (code != OMP_ATOMIC)
5012 stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs1),
5013 code, orig_lhs1, stmt);
5014 stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
5017 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
5019 add_stmt (stmt);
5022 void
5023 finish_omp_barrier (void)
5025 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
5026 vec<tree, va_gc> *vec = make_tree_vector ();
5027 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
5028 release_tree_vector (vec);
5029 finish_expr_stmt (stmt);
5032 void
5033 finish_omp_flush (void)
5035 tree fn = builtin_decl_explicit (BUILT_IN_SYNC_SYNCHRONIZE);
5036 vec<tree, va_gc> *vec = make_tree_vector ();
5037 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
5038 release_tree_vector (vec);
5039 finish_expr_stmt (stmt);
5042 void
5043 finish_omp_taskwait (void)
5045 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKWAIT);
5046 vec<tree, va_gc> *vec = make_tree_vector ();
5047 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
5048 release_tree_vector (vec);
5049 finish_expr_stmt (stmt);
5052 void
5053 finish_omp_taskyield (void)
5055 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKYIELD);
5056 vec<tree, va_gc> *vec = make_tree_vector ();
5057 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
5058 release_tree_vector (vec);
5059 finish_expr_stmt (stmt);
5062 /* Begin a __transaction_atomic or __transaction_relaxed statement.
5063 If PCOMPOUND is non-null, this is for a function-transaction-block, and we
5064 should create an extra compound stmt. */
5066 tree
5067 begin_transaction_stmt (location_t loc, tree *pcompound, int flags)
5069 tree r;
5071 if (pcompound)
5072 *pcompound = begin_compound_stmt (0);
5074 r = build_stmt (loc, TRANSACTION_EXPR, NULL_TREE);
5076 /* Only add the statement to the function if support enabled. */
5077 if (flag_tm)
5078 add_stmt (r);
5079 else
5080 error_at (loc, ((flags & TM_STMT_ATTR_RELAXED) != 0
5081 ? G_("%<__transaction_relaxed%> without "
5082 "transactional memory support enabled")
5083 : G_("%<__transaction_atomic%> without "
5084 "transactional memory support enabled")));
5086 TRANSACTION_EXPR_BODY (r) = push_stmt_list ();
5087 return r;
5090 /* End a __transaction_atomic or __transaction_relaxed statement.
5091 If COMPOUND_STMT is non-null, this is for a function-transaction-block,
5092 and we should end the compound. If NOEX is non-NULL, we wrap the body in
5093 a MUST_NOT_THROW_EXPR with NOEX as condition. */
5095 void
5096 finish_transaction_stmt (tree stmt, tree compound_stmt, int flags, tree noex)
5098 TRANSACTION_EXPR_BODY (stmt) = pop_stmt_list (TRANSACTION_EXPR_BODY (stmt));
5099 TRANSACTION_EXPR_OUTER (stmt) = (flags & TM_STMT_ATTR_OUTER) != 0;
5100 TRANSACTION_EXPR_RELAXED (stmt) = (flags & TM_STMT_ATTR_RELAXED) != 0;
5101 TRANSACTION_EXPR_IS_STMT (stmt) = 1;
5103 /* noexcept specifications are not allowed for function transactions. */
5104 gcc_assert (!(noex && compound_stmt));
5105 if (noex)
5107 tree body = build_must_not_throw_expr (TRANSACTION_EXPR_BODY (stmt),
5108 noex);
5109 SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt)));
5110 TREE_SIDE_EFFECTS (body) = 1;
5111 TRANSACTION_EXPR_BODY (stmt) = body;
5114 if (compound_stmt)
5115 finish_compound_stmt (compound_stmt);
5116 finish_stmt ();
5119 /* Build a __transaction_atomic or __transaction_relaxed expression. If
5120 NOEX is non-NULL, we wrap the body in a MUST_NOT_THROW_EXPR with NOEX as
5121 condition. */
5123 tree
5124 build_transaction_expr (location_t loc, tree expr, int flags, tree noex)
5126 tree ret;
5127 if (noex)
5129 expr = build_must_not_throw_expr (expr, noex);
5130 SET_EXPR_LOCATION (expr, loc);
5131 TREE_SIDE_EFFECTS (expr) = 1;
5133 ret = build1 (TRANSACTION_EXPR, TREE_TYPE (expr), expr);
5134 if (flags & TM_STMT_ATTR_RELAXED)
5135 TRANSACTION_EXPR_RELAXED (ret) = 1;
5136 SET_EXPR_LOCATION (ret, loc);
5137 return ret;
5140 void
5141 init_cp_semantics (void)
5145 /* Build a STATIC_ASSERT for a static assertion with the condition
5146 CONDITION and the message text MESSAGE. LOCATION is the location
5147 of the static assertion in the source code. When MEMBER_P, this
5148 static assertion is a member of a class. */
5149 void
5150 finish_static_assert (tree condition, tree message, location_t location,
5151 bool member_p)
5153 if (message == NULL_TREE
5154 || message == error_mark_node
5155 || condition == NULL_TREE
5156 || condition == error_mark_node)
5157 return;
5159 if (check_for_bare_parameter_packs (condition))
5160 condition = error_mark_node;
5162 if (type_dependent_expression_p (condition)
5163 || value_dependent_expression_p (condition))
5165 /* We're in a template; build a STATIC_ASSERT and put it in
5166 the right place. */
5167 tree assertion;
5169 assertion = make_node (STATIC_ASSERT);
5170 STATIC_ASSERT_CONDITION (assertion) = condition;
5171 STATIC_ASSERT_MESSAGE (assertion) = message;
5172 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
5174 if (member_p)
5175 maybe_add_class_template_decl_list (current_class_type,
5176 assertion,
5177 /*friend_p=*/0);
5178 else
5179 add_stmt (assertion);
5181 return;
5184 /* Fold the expression and convert it to a boolean value. */
5185 condition = fold_non_dependent_expr (condition);
5186 condition = cp_convert (boolean_type_node, condition, tf_warning_or_error);
5187 condition = maybe_constant_value (condition);
5189 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
5190 /* Do nothing; the condition is satisfied. */
5192 else
5194 location_t saved_loc = input_location;
5196 input_location = location;
5197 if (TREE_CODE (condition) == INTEGER_CST
5198 && integer_zerop (condition))
5199 /* Report the error. */
5200 error ("static assertion failed: %s", TREE_STRING_POINTER (message));
5201 else if (condition && condition != error_mark_node)
5203 error ("non-constant condition for static assertion");
5204 cxx_constant_value (condition);
5206 input_location = saved_loc;
5210 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
5211 suitable for use as a type-specifier.
5213 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
5214 id-expression or a class member access, FALSE when it was parsed as
5215 a full expression. */
5217 tree
5218 finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
5219 tsubst_flags_t complain)
5221 tree type = NULL_TREE;
5223 if (!expr || error_operand_p (expr))
5224 return error_mark_node;
5226 if (TYPE_P (expr)
5227 || TREE_CODE (expr) == TYPE_DECL
5228 || (TREE_CODE (expr) == BIT_NOT_EXPR
5229 && TYPE_P (TREE_OPERAND (expr, 0))))
5231 if (complain & tf_error)
5232 error ("argument to decltype must be an expression");
5233 return error_mark_node;
5236 /* Depending on the resolution of DR 1172, we may later need to distinguish
5237 instantiation-dependent but not type-dependent expressions so that, say,
5238 A<decltype(sizeof(T))>::U doesn't require 'typename'. */
5239 if (instantiation_dependent_expression_p (expr))
5241 type = cxx_make_type (DECLTYPE_TYPE);
5242 DECLTYPE_TYPE_EXPR (type) = expr;
5243 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
5244 = id_expression_or_member_access_p;
5245 SET_TYPE_STRUCTURAL_EQUALITY (type);
5247 return type;
5250 /* The type denoted by decltype(e) is defined as follows: */
5252 expr = resolve_nondeduced_context (expr);
5254 if (type_unknown_p (expr))
5256 if (complain & tf_error)
5257 error ("decltype cannot resolve address of overloaded function");
5258 return error_mark_node;
5261 if (invalid_nonstatic_memfn_p (expr, complain))
5262 return error_mark_node;
5264 /* To get the size of a static data member declared as an array of
5265 unknown bound, we need to instantiate it. */
5266 if (TREE_CODE (expr) == VAR_DECL
5267 && VAR_HAD_UNKNOWN_BOUND (expr)
5268 && DECL_TEMPLATE_INSTANTIATION (expr))
5269 instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
5271 if (id_expression_or_member_access_p)
5273 /* If e is an id-expression or a class member access (5.2.5
5274 [expr.ref]), decltype(e) is defined as the type of the entity
5275 named by e. If there is no such entity, or e names a set of
5276 overloaded functions, the program is ill-formed. */
5277 if (TREE_CODE (expr) == IDENTIFIER_NODE)
5278 expr = lookup_name (expr);
5280 if (TREE_CODE (expr) == INDIRECT_REF)
5281 /* This can happen when the expression is, e.g., "a.b". Just
5282 look at the underlying operand. */
5283 expr = TREE_OPERAND (expr, 0);
5285 if (TREE_CODE (expr) == OFFSET_REF
5286 || TREE_CODE (expr) == MEMBER_REF
5287 || TREE_CODE (expr) == SCOPE_REF)
5288 /* We're only interested in the field itself. If it is a
5289 BASELINK, we will need to see through it in the next
5290 step. */
5291 expr = TREE_OPERAND (expr, 1);
5293 if (BASELINK_P (expr))
5294 /* See through BASELINK nodes to the underlying function. */
5295 expr = BASELINK_FUNCTIONS (expr);
5297 switch (TREE_CODE (expr))
5299 case FIELD_DECL:
5300 if (DECL_BIT_FIELD_TYPE (expr))
5302 type = DECL_BIT_FIELD_TYPE (expr);
5303 break;
5305 /* Fall through for fields that aren't bitfields. */
5307 case FUNCTION_DECL:
5308 case VAR_DECL:
5309 case CONST_DECL:
5310 case PARM_DECL:
5311 case RESULT_DECL:
5312 case TEMPLATE_PARM_INDEX:
5313 expr = mark_type_use (expr);
5314 type = TREE_TYPE (expr);
5315 break;
5317 case ERROR_MARK:
5318 type = error_mark_node;
5319 break;
5321 case COMPONENT_REF:
5322 mark_type_use (expr);
5323 type = is_bitfield_expr_with_lowered_type (expr);
5324 if (!type)
5325 type = TREE_TYPE (TREE_OPERAND (expr, 1));
5326 break;
5328 case BIT_FIELD_REF:
5329 gcc_unreachable ();
5331 case INTEGER_CST:
5332 case PTRMEM_CST:
5333 /* We can get here when the id-expression refers to an
5334 enumerator or non-type template parameter. */
5335 type = TREE_TYPE (expr);
5336 break;
5338 default:
5339 gcc_unreachable ();
5340 return error_mark_node;
5343 else
5345 /* Within a lambda-expression:
5347 Every occurrence of decltype((x)) where x is a possibly
5348 parenthesized id-expression that names an entity of
5349 automatic storage duration is treated as if x were
5350 transformed into an access to a corresponding data member
5351 of the closure type that would have been declared if x
5352 were a use of the denoted entity. */
5353 if (outer_automatic_var_p (expr)
5354 && current_function_decl
5355 && LAMBDA_FUNCTION_P (current_function_decl))
5356 type = capture_decltype (expr);
5357 else if (error_operand_p (expr))
5358 type = error_mark_node;
5359 else if (expr == current_class_ptr)
5360 /* If the expression is just "this", we want the
5361 cv-unqualified pointer for the "this" type. */
5362 type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
5363 else
5365 /* Otherwise, where T is the type of e, if e is an lvalue,
5366 decltype(e) is defined as T&; if an xvalue, T&&; otherwise, T. */
5367 cp_lvalue_kind clk = lvalue_kind (expr);
5368 type = unlowered_expr_type (expr);
5369 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5371 /* For vector types, pick a non-opaque variant. */
5372 if (TREE_CODE (type) == VECTOR_TYPE)
5373 type = strip_typedefs (type);
5375 if (clk != clk_none && !(clk & clk_class))
5376 type = cp_build_reference_type (type, (clk & clk_rvalueref));
5380 return type;
5383 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or
5384 __has_nothrow_copy, depending on assign_p. */
5386 static bool
5387 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
5389 tree fns;
5391 if (assign_p)
5393 int ix;
5394 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5395 if (ix < 0)
5396 return false;
5397 fns = (*CLASSTYPE_METHOD_VEC (type))[ix];
5399 else if (TYPE_HAS_COPY_CTOR (type))
5401 /* If construction of the copy constructor was postponed, create
5402 it now. */
5403 if (CLASSTYPE_LAZY_COPY_CTOR (type))
5404 lazily_declare_fn (sfk_copy_constructor, type);
5405 if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5406 lazily_declare_fn (sfk_move_constructor, type);
5407 fns = CLASSTYPE_CONSTRUCTORS (type);
5409 else
5410 return false;
5412 for (; fns; fns = OVL_NEXT (fns))
5414 tree fn = OVL_CURRENT (fns);
5416 if (assign_p)
5418 if (copy_fn_p (fn) == 0)
5419 continue;
5421 else if (copy_fn_p (fn) <= 0)
5422 continue;
5424 maybe_instantiate_noexcept (fn);
5425 if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5426 return false;
5429 return true;
5432 /* Actually evaluates the trait. */
5434 static bool
5435 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5437 enum tree_code type_code1;
5438 tree t;
5440 type_code1 = TREE_CODE (type1);
5442 switch (kind)
5444 case CPTK_HAS_NOTHROW_ASSIGN:
5445 type1 = strip_array_types (type1);
5446 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5447 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5448 || (CLASS_TYPE_P (type1)
5449 && classtype_has_nothrow_assign_or_copy_p (type1,
5450 true))));
5452 case CPTK_HAS_TRIVIAL_ASSIGN:
5453 /* ??? The standard seems to be missing the "or array of such a class
5454 type" wording for this trait. */
5455 type1 = strip_array_types (type1);
5456 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5457 && (trivial_type_p (type1)
5458 || (CLASS_TYPE_P (type1)
5459 && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5461 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5462 type1 = strip_array_types (type1);
5463 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5464 || (CLASS_TYPE_P (type1)
5465 && (t = locate_ctor (type1))
5466 && (maybe_instantiate_noexcept (t),
5467 TYPE_NOTHROW_P (TREE_TYPE (t)))));
5469 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5470 type1 = strip_array_types (type1);
5471 return (trivial_type_p (type1)
5472 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5474 case CPTK_HAS_NOTHROW_COPY:
5475 type1 = strip_array_types (type1);
5476 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5477 || (CLASS_TYPE_P (type1)
5478 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5480 case CPTK_HAS_TRIVIAL_COPY:
5481 /* ??? The standard seems to be missing the "or array of such a class
5482 type" wording for this trait. */
5483 type1 = strip_array_types (type1);
5484 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5485 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5487 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5488 type1 = strip_array_types (type1);
5489 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5490 || (CLASS_TYPE_P (type1)
5491 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5493 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5494 return type_has_virtual_destructor (type1);
5496 case CPTK_IS_ABSTRACT:
5497 return (ABSTRACT_CLASS_TYPE_P (type1));
5499 case CPTK_IS_BASE_OF:
5500 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5501 && DERIVED_FROM_P (type1, type2));
5503 case CPTK_IS_CLASS:
5504 return (NON_UNION_CLASS_TYPE_P (type1));
5506 case CPTK_IS_CONVERTIBLE_TO:
5507 /* TODO */
5508 return false;
5510 case CPTK_IS_EMPTY:
5511 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5513 case CPTK_IS_ENUM:
5514 return (type_code1 == ENUMERAL_TYPE);
5516 case CPTK_IS_FINAL:
5517 return (CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1));
5519 case CPTK_IS_LITERAL_TYPE:
5520 return (literal_type_p (type1));
5522 case CPTK_IS_POD:
5523 return (pod_type_p (type1));
5525 case CPTK_IS_POLYMORPHIC:
5526 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5528 case CPTK_IS_STD_LAYOUT:
5529 return (std_layout_type_p (type1));
5531 case CPTK_IS_TRIVIAL:
5532 return (trivial_type_p (type1));
5534 case CPTK_IS_UNION:
5535 return (type_code1 == UNION_TYPE);
5537 default:
5538 gcc_unreachable ();
5539 return false;
5543 /* If TYPE is an array of unknown bound, or (possibly cv-qualified)
5544 void, or a complete type, returns it, otherwise NULL_TREE. */
5546 static tree
5547 check_trait_type (tree type)
5549 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5550 && COMPLETE_TYPE_P (TREE_TYPE (type)))
5551 return type;
5553 if (VOID_TYPE_P (type))
5554 return type;
5556 return complete_type_or_else (strip_array_types (type), NULL_TREE);
5559 /* Process a trait expression. */
5561 tree
5562 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5564 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5565 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5566 || kind == CPTK_HAS_NOTHROW_COPY
5567 || kind == CPTK_HAS_TRIVIAL_ASSIGN
5568 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5569 || kind == CPTK_HAS_TRIVIAL_COPY
5570 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5571 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5572 || kind == CPTK_IS_ABSTRACT
5573 || kind == CPTK_IS_BASE_OF
5574 || kind == CPTK_IS_CLASS
5575 || kind == CPTK_IS_CONVERTIBLE_TO
5576 || kind == CPTK_IS_EMPTY
5577 || kind == CPTK_IS_ENUM
5578 || kind == CPTK_IS_FINAL
5579 || kind == CPTK_IS_LITERAL_TYPE
5580 || kind == CPTK_IS_POD
5581 || kind == CPTK_IS_POLYMORPHIC
5582 || kind == CPTK_IS_STD_LAYOUT
5583 || kind == CPTK_IS_TRIVIAL
5584 || kind == CPTK_IS_UNION);
5586 if (kind == CPTK_IS_CONVERTIBLE_TO)
5588 sorry ("__is_convertible_to");
5589 return error_mark_node;
5592 if (type1 == error_mark_node
5593 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5594 && type2 == error_mark_node))
5595 return error_mark_node;
5597 if (processing_template_decl)
5599 tree trait_expr = make_node (TRAIT_EXPR);
5600 TREE_TYPE (trait_expr) = boolean_type_node;
5601 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5602 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5603 TRAIT_EXPR_KIND (trait_expr) = kind;
5604 return trait_expr;
5607 switch (kind)
5609 case CPTK_HAS_NOTHROW_ASSIGN:
5610 case CPTK_HAS_TRIVIAL_ASSIGN:
5611 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5612 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5613 case CPTK_HAS_NOTHROW_COPY:
5614 case CPTK_HAS_TRIVIAL_COPY:
5615 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5616 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5617 case CPTK_IS_ABSTRACT:
5618 case CPTK_IS_EMPTY:
5619 case CPTK_IS_FINAL:
5620 case CPTK_IS_LITERAL_TYPE:
5621 case CPTK_IS_POD:
5622 case CPTK_IS_POLYMORPHIC:
5623 case CPTK_IS_STD_LAYOUT:
5624 case CPTK_IS_TRIVIAL:
5625 if (!check_trait_type (type1))
5626 return error_mark_node;
5627 break;
5629 case CPTK_IS_BASE_OF:
5630 if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5631 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5632 && !complete_type_or_else (type2, NULL_TREE))
5633 /* We already issued an error. */
5634 return error_mark_node;
5635 break;
5637 case CPTK_IS_CLASS:
5638 case CPTK_IS_ENUM:
5639 case CPTK_IS_UNION:
5640 break;
5642 case CPTK_IS_CONVERTIBLE_TO:
5643 default:
5644 gcc_unreachable ();
5647 return (trait_expr_value (kind, type1, type2)
5648 ? boolean_true_node : boolean_false_node);
5651 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5652 which is ignored for C++. */
5654 void
5655 set_float_const_decimal64 (void)
5659 void
5660 clear_float_const_decimal64 (void)
5664 bool
5665 float_const_decimal64_p (void)
5667 return 0;
5671 /* Return true if T is a literal type. */
5673 bool
5674 literal_type_p (tree t)
5676 if (SCALAR_TYPE_P (t)
5677 || TREE_CODE (t) == VECTOR_TYPE
5678 || TREE_CODE (t) == REFERENCE_TYPE)
5679 return true;
5680 if (CLASS_TYPE_P (t))
5682 t = complete_type (t);
5683 gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
5684 return CLASSTYPE_LITERAL_P (t);
5686 if (TREE_CODE (t) == ARRAY_TYPE)
5687 return literal_type_p (strip_array_types (t));
5688 return false;
5691 /* If DECL is a variable declared `constexpr', require its type
5692 be literal. Return the DECL if OK, otherwise NULL. */
5694 tree
5695 ensure_literal_type_for_constexpr_object (tree decl)
5697 tree type = TREE_TYPE (decl);
5698 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5699 && !processing_template_decl)
5701 if (CLASS_TYPE_P (type) && !COMPLETE_TYPE_P (complete_type (type)))
5702 /* Don't complain here, we'll complain about incompleteness
5703 when we try to initialize the variable. */;
5704 else if (!literal_type_p (type))
5706 error ("the type %qT of constexpr variable %qD is not literal",
5707 type, decl);
5708 explain_non_literal_class (type);
5709 return NULL;
5712 return decl;
5715 /* Representation of entries in the constexpr function definition table. */
5717 typedef struct GTY(()) constexpr_fundef {
5718 tree decl;
5719 tree body;
5720 } constexpr_fundef;
5722 /* This table holds all constexpr function definitions seen in
5723 the current translation unit. */
5725 static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
5727 /* Utility function used for managing the constexpr function table.
5728 Return true if the entries pointed to by P and Q are for the
5729 same constexpr function. */
5731 static inline int
5732 constexpr_fundef_equal (const void *p, const void *q)
5734 const constexpr_fundef *lhs = (const constexpr_fundef *) p;
5735 const constexpr_fundef *rhs = (const constexpr_fundef *) q;
5736 return lhs->decl == rhs->decl;
5739 /* Utility function used for managing the constexpr function table.
5740 Return a hash value for the entry pointed to by Q. */
5742 static inline hashval_t
5743 constexpr_fundef_hash (const void *p)
5745 const constexpr_fundef *fundef = (const constexpr_fundef *) p;
5746 return DECL_UID (fundef->decl);
5749 /* Return a previously saved definition of function FUN. */
5751 static constexpr_fundef *
5752 retrieve_constexpr_fundef (tree fun)
5754 constexpr_fundef fundef = { NULL, NULL };
5755 if (constexpr_fundef_table == NULL)
5756 return NULL;
5758 fundef.decl = fun;
5759 return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
5762 /* Check whether the parameter and return types of FUN are valid for a
5763 constexpr function, and complain if COMPLAIN. */
5765 static bool
5766 is_valid_constexpr_fn (tree fun, bool complain)
5768 tree parm = FUNCTION_FIRST_USER_PARM (fun);
5769 bool ret = true;
5770 for (; parm != NULL; parm = TREE_CHAIN (parm))
5771 if (!literal_type_p (TREE_TYPE (parm)))
5773 ret = false;
5774 if (complain)
5776 error ("invalid type for parameter %d of constexpr "
5777 "function %q+#D", DECL_PARM_INDEX (parm), fun);
5778 explain_non_literal_class (TREE_TYPE (parm));
5782 if (!DECL_CONSTRUCTOR_P (fun))
5784 tree rettype = TREE_TYPE (TREE_TYPE (fun));
5785 if (!literal_type_p (rettype))
5787 ret = false;
5788 if (complain)
5790 error ("invalid return type %qT of constexpr function %q+D",
5791 rettype, fun);
5792 explain_non_literal_class (rettype);
5796 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5797 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
5799 ret = false;
5800 if (complain)
5802 error ("enclosing class of constexpr non-static member "
5803 "function %q+#D is not a literal type", fun);
5804 explain_non_literal_class (DECL_CONTEXT (fun));
5808 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
5810 ret = false;
5811 if (complain)
5812 error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
5815 return ret;
5818 /* Subroutine of build_constexpr_constructor_member_initializers.
5819 The expression tree T represents a data member initialization
5820 in a (constexpr) constructor definition. Build a pairing of
5821 the data member with its initializer, and prepend that pair
5822 to the existing initialization pair INITS. */
5824 static bool
5825 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
5827 tree member, init;
5828 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
5829 t = TREE_OPERAND (t, 0);
5830 if (TREE_CODE (t) == EXPR_STMT)
5831 t = TREE_OPERAND (t, 0);
5832 if (t == error_mark_node)
5833 return false;
5834 if (TREE_CODE (t) == STATEMENT_LIST)
5836 tree_stmt_iterator i;
5837 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5839 if (! build_data_member_initialization (tsi_stmt (i), vec))
5840 return false;
5842 return true;
5844 if (TREE_CODE (t) == CLEANUP_STMT)
5846 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
5847 but we can in a constexpr constructor for a non-literal class. Just
5848 ignore it; either all the initialization will be constant, in which
5849 case the cleanup can't run, or it can't be constexpr.
5850 Still recurse into CLEANUP_BODY. */
5851 return build_data_member_initialization (CLEANUP_BODY (t), vec);
5853 if (TREE_CODE (t) == CONVERT_EXPR)
5854 t = TREE_OPERAND (t, 0);
5855 if (TREE_CODE (t) == INIT_EXPR
5856 || TREE_CODE (t) == MODIFY_EXPR)
5858 member = TREE_OPERAND (t, 0);
5859 init = unshare_expr (TREE_OPERAND (t, 1));
5861 else if (TREE_CODE (t) == CALL_EXPR)
5863 member = CALL_EXPR_ARG (t, 0);
5864 /* We don't use build_cplus_new here because it complains about
5865 abstract bases. Leaving the call unwrapped means that it has the
5866 wrong type, but cxx_eval_constant_expression doesn't care. */
5867 init = unshare_expr (t);
5869 else if (TREE_CODE (t) == DECL_EXPR)
5870 /* Declaring a temporary, don't add it to the CONSTRUCTOR. */
5871 return true;
5872 else
5873 gcc_unreachable ();
5874 if (TREE_CODE (member) == INDIRECT_REF)
5875 member = TREE_OPERAND (member, 0);
5876 if (TREE_CODE (member) == NOP_EXPR)
5878 tree op = member;
5879 STRIP_NOPS (op);
5880 if (TREE_CODE (op) == ADDR_EXPR)
5882 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5883 (TREE_TYPE (TREE_TYPE (op)),
5884 TREE_TYPE (TREE_TYPE (member))));
5885 /* Initializing a cv-qualified member; we need to look through
5886 the const_cast. */
5887 member = op;
5889 else if (op == current_class_ptr
5890 && (same_type_ignoring_top_level_qualifiers_p
5891 (TREE_TYPE (TREE_TYPE (member)),
5892 current_class_type)))
5893 /* Delegating constructor. */
5894 member = op;
5895 else
5897 /* This is an initializer for an empty base; keep it for now so
5898 we can check it in cxx_eval_bare_aggregate. */
5899 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
5902 if (TREE_CODE (member) == ADDR_EXPR)
5903 member = TREE_OPERAND (member, 0);
5904 if (TREE_CODE (member) == COMPONENT_REF
5905 /* If we're initializing a member of a subaggregate, it's a vtable
5906 pointer. Leave it as COMPONENT_REF so we remember the path to get
5907 to the vfield. */
5908 && TREE_CODE (TREE_OPERAND (member, 0)) != COMPONENT_REF)
5909 member = TREE_OPERAND (member, 1);
5910 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
5911 return true;
5914 /* Make sure that there are no statements after LAST in the constructor
5915 body represented by LIST. */
5917 bool
5918 check_constexpr_ctor_body (tree last, tree list)
5920 bool ok = true;
5921 if (TREE_CODE (list) == STATEMENT_LIST)
5923 tree_stmt_iterator i = tsi_last (list);
5924 for (; !tsi_end_p (i); tsi_prev (&i))
5926 tree t = tsi_stmt (i);
5927 if (t == last)
5928 break;
5929 if (TREE_CODE (t) == BIND_EXPR)
5931 if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
5932 return false;
5933 else
5934 continue;
5936 /* We currently allow typedefs and static_assert.
5937 FIXME allow them in the standard, too. */
5938 if (TREE_CODE (t) != STATIC_ASSERT)
5940 ok = false;
5941 break;
5945 else if (list != last
5946 && TREE_CODE (list) != STATIC_ASSERT)
5947 ok = false;
5948 if (!ok)
5950 error ("constexpr constructor does not have empty body");
5951 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
5953 return ok;
5956 /* V is a vector of constructor elements built up for the base and member
5957 initializers of a constructor for TYPE. They need to be in increasing
5958 offset order, which they might not be yet if TYPE has a primary base
5959 which is not first in the base-clause or a vptr and at least one base
5960 all of which are non-primary. */
5962 static vec<constructor_elt, va_gc> *
5963 sort_constexpr_mem_initializers (tree type, vec<constructor_elt, va_gc> *v)
5965 tree pri = CLASSTYPE_PRIMARY_BINFO (type);
5966 tree field_type;
5967 constructor_elt elt;
5968 int i;
5970 if (pri)
5971 field_type = BINFO_TYPE (pri);
5972 else if (TYPE_CONTAINS_VPTR_P (type))
5973 field_type = vtbl_ptr_type_node;
5974 else
5975 return v;
5977 /* Find the element for the primary base or vptr and move it to the
5978 beginning of the vec. */
5979 vec<constructor_elt, va_gc> &vref = *v;
5980 for (i = 0; ; ++i)
5981 if (TREE_TYPE (vref[i].index) == field_type)
5982 break;
5984 if (i > 0)
5986 elt = vref[i];
5987 for (; i > 0; --i)
5988 vref[i] = vref[i-1];
5989 vref[0] = elt;
5992 return v;
5995 /* Build compile-time evalable representations of member-initializer list
5996 for a constexpr constructor. */
5998 static tree
5999 build_constexpr_constructor_member_initializers (tree type, tree body)
6001 vec<constructor_elt, va_gc> *vec = NULL;
6002 bool ok = true;
6003 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
6004 || TREE_CODE (body) == EH_SPEC_BLOCK)
6005 body = TREE_OPERAND (body, 0);
6006 if (TREE_CODE (body) == STATEMENT_LIST)
6007 body = STATEMENT_LIST_HEAD (body)->stmt;
6008 body = BIND_EXPR_BODY (body);
6009 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
6011 body = TREE_OPERAND (body, 0);
6012 if (TREE_CODE (body) == EXPR_STMT)
6013 body = TREE_OPERAND (body, 0);
6014 if (TREE_CODE (body) == INIT_EXPR
6015 && (same_type_ignoring_top_level_qualifiers_p
6016 (TREE_TYPE (TREE_OPERAND (body, 0)),
6017 current_class_type)))
6019 /* Trivial copy. */
6020 return TREE_OPERAND (body, 1);
6022 ok = build_data_member_initialization (body, &vec);
6024 else if (TREE_CODE (body) == STATEMENT_LIST)
6026 tree_stmt_iterator i;
6027 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
6029 ok = build_data_member_initialization (tsi_stmt (i), &vec);
6030 if (!ok)
6031 break;
6034 else if (TREE_CODE (body) == TRY_BLOCK)
6036 error ("body of %<constexpr%> constructor cannot be "
6037 "a function-try-block");
6038 return error_mark_node;
6040 else if (EXPR_P (body))
6041 ok = build_data_member_initialization (body, &vec);
6042 else
6043 gcc_assert (errorcount > 0);
6044 if (ok)
6046 if (vec_safe_length (vec) > 0)
6048 /* In a delegating constructor, return the target. */
6049 constructor_elt *ce = &(*vec)[0];
6050 if (ce->index == current_class_ptr)
6052 body = ce->value;
6053 vec_free (vec);
6054 return body;
6057 vec = sort_constexpr_mem_initializers (type, vec);
6058 return build_constructor (type, vec);
6060 else
6061 return error_mark_node;
6064 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
6065 declared to be constexpr, or a sub-statement thereof. Returns the
6066 return value if suitable, error_mark_node for a statement not allowed in
6067 a constexpr function, or NULL_TREE if no return value was found. */
6069 static tree
6070 constexpr_fn_retval (tree body)
6072 switch (TREE_CODE (body))
6074 case STATEMENT_LIST:
6076 tree_stmt_iterator i;
6077 tree expr = NULL_TREE;
6078 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
6080 tree s = constexpr_fn_retval (tsi_stmt (i));
6081 if (s == error_mark_node)
6082 return error_mark_node;
6083 else if (s == NULL_TREE)
6084 /* Keep iterating. */;
6085 else if (expr)
6086 /* Multiple return statements. */
6087 return error_mark_node;
6088 else
6089 expr = s;
6091 return expr;
6094 case RETURN_EXPR:
6095 return unshare_expr (TREE_OPERAND (body, 0));
6097 case DECL_EXPR:
6098 if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL)
6099 return NULL_TREE;
6100 return error_mark_node;
6102 case CLEANUP_POINT_EXPR:
6103 return constexpr_fn_retval (TREE_OPERAND (body, 0));
6105 case USING_STMT:
6106 return NULL_TREE;
6108 default:
6109 return error_mark_node;
6113 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
6114 FUN; do the necessary transformations to turn it into a single expression
6115 that we can store in the hash table. */
6117 static tree
6118 massage_constexpr_body (tree fun, tree body)
6120 if (DECL_CONSTRUCTOR_P (fun))
6121 body = build_constexpr_constructor_member_initializers
6122 (DECL_CONTEXT (fun), body);
6123 else
6125 if (TREE_CODE (body) == EH_SPEC_BLOCK)
6126 body = EH_SPEC_STMTS (body);
6127 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
6128 body = TREE_OPERAND (body, 0);
6129 if (TREE_CODE (body) == BIND_EXPR)
6130 body = BIND_EXPR_BODY (body);
6131 body = constexpr_fn_retval (body);
6133 return body;
6136 /* FUN is a constexpr constructor with massaged body BODY. Return true
6137 if some bases/fields are uninitialized, and complain if COMPLAIN. */
6139 static bool
6140 cx_check_missing_mem_inits (tree fun, tree body, bool complain)
6142 bool bad;
6143 tree field;
6144 unsigned i, nelts;
6145 tree ctype;
6147 if (TREE_CODE (body) != CONSTRUCTOR)
6148 return false;
6150 nelts = CONSTRUCTOR_NELTS (body);
6151 ctype = DECL_CONTEXT (fun);
6152 field = TYPE_FIELDS (ctype);
6154 if (TREE_CODE (ctype) == UNION_TYPE)
6156 if (nelts == 0 && next_initializable_field (field))
6158 if (complain)
6159 error ("%<constexpr%> constructor for union %qT must "
6160 "initialize exactly one non-static data member", ctype);
6161 return true;
6163 return false;
6166 bad = false;
6167 for (i = 0; i <= nelts; ++i)
6169 tree index;
6170 if (i == nelts)
6171 index = NULL_TREE;
6172 else
6174 index = CONSTRUCTOR_ELT (body, i)->index;
6175 /* Skip base and vtable inits. */
6176 if (TREE_CODE (index) != FIELD_DECL
6177 || DECL_ARTIFICIAL (index))
6178 continue;
6180 for (; field != index; field = DECL_CHAIN (field))
6182 tree ftype;
6183 if (TREE_CODE (field) != FIELD_DECL
6184 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
6185 || DECL_ARTIFICIAL (field))
6186 continue;
6187 ftype = strip_array_types (TREE_TYPE (field));
6188 if (type_has_constexpr_default_constructor (ftype))
6190 /* It's OK to skip a member with a trivial constexpr ctor.
6191 A constexpr ctor that isn't trivial should have been
6192 added in by now. */
6193 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
6194 || errorcount != 0);
6195 continue;
6197 if (!complain)
6198 return true;
6199 error ("uninitialized member %qD in %<constexpr%> constructor",
6200 field);
6201 bad = true;
6203 if (field == NULL_TREE)
6204 break;
6205 field = DECL_CHAIN (field);
6208 return bad;
6211 /* We are processing the definition of the constexpr function FUN.
6212 Check that its BODY fulfills the propriate requirements and
6213 enter it in the constexpr function definition table.
6214 For constructor BODY is actually the TREE_LIST of the
6215 member-initializer list. */
6217 tree
6218 register_constexpr_fundef (tree fun, tree body)
6220 constexpr_fundef entry;
6221 constexpr_fundef **slot;
6223 if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
6224 return NULL;
6226 body = massage_constexpr_body (fun, body);
6227 if (body == NULL_TREE || body == error_mark_node)
6229 if (!DECL_CONSTRUCTOR_P (fun))
6230 error ("body of constexpr function %qD not a return-statement", fun);
6231 return NULL;
6234 if (!potential_rvalue_constant_expression (body))
6236 if (!DECL_GENERATED_P (fun))
6237 require_potential_rvalue_constant_expression (body);
6238 return NULL;
6241 if (DECL_CONSTRUCTOR_P (fun)
6242 && cx_check_missing_mem_inits (fun, body, !DECL_GENERATED_P (fun)))
6243 return NULL;
6245 /* Create the constexpr function table if necessary. */
6246 if (constexpr_fundef_table == NULL)
6247 constexpr_fundef_table = htab_create_ggc (101,
6248 constexpr_fundef_hash,
6249 constexpr_fundef_equal,
6250 ggc_free);
6251 entry.decl = fun;
6252 entry.body = body;
6253 slot = (constexpr_fundef **)
6254 htab_find_slot (constexpr_fundef_table, &entry, INSERT);
6256 gcc_assert (*slot == NULL);
6257 *slot = ggc_alloc_constexpr_fundef ();
6258 **slot = entry;
6260 return fun;
6263 /* FUN is a non-constexpr function called in a context that requires a
6264 constant expression. If it comes from a constexpr template, explain why
6265 the instantiation isn't constexpr. */
6267 void
6268 explain_invalid_constexpr_fn (tree fun)
6270 static struct pointer_set_t *diagnosed;
6271 tree body;
6272 location_t save_loc;
6273 /* Only diagnose defaulted functions or instantiations. */
6274 if (!DECL_DEFAULTED_FN (fun)
6275 && !is_instantiation_of_constexpr (fun))
6276 return;
6277 if (diagnosed == NULL)
6278 diagnosed = pointer_set_create ();
6279 if (pointer_set_insert (diagnosed, fun) != 0)
6280 /* Already explained. */
6281 return;
6283 save_loc = input_location;
6284 input_location = DECL_SOURCE_LOCATION (fun);
6285 inform (0, "%q+D is not usable as a constexpr function because:", fun);
6286 /* First check the declaration. */
6287 if (is_valid_constexpr_fn (fun, true))
6289 /* Then if it's OK, the body. */
6290 if (DECL_DEFAULTED_FN (fun))
6291 explain_implicit_non_constexpr (fun);
6292 else
6294 body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
6295 require_potential_rvalue_constant_expression (body);
6296 if (DECL_CONSTRUCTOR_P (fun))
6297 cx_check_missing_mem_inits (fun, body, true);
6300 input_location = save_loc;
6303 /* Objects of this type represent calls to constexpr functions
6304 along with the bindings of parameters to their arguments, for
6305 the purpose of compile time evaluation. */
6307 typedef struct GTY(()) constexpr_call {
6308 /* Description of the constexpr function definition. */
6309 constexpr_fundef *fundef;
6310 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
6311 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
6312 Note: This arrangement is made to accomodate the use of
6313 iterative_hash_template_arg (see pt.c). If you change this
6314 representation, also change the hash calculation in
6315 cxx_eval_call_expression. */
6316 tree bindings;
6317 /* Result of the call.
6318 NULL means the call is being evaluated.
6319 error_mark_node means that the evaluation was erroneous;
6320 otherwise, the actuall value of the call. */
6321 tree result;
6322 /* The hash of this call; we remember it here to avoid having to
6323 recalculate it when expanding the hash table. */
6324 hashval_t hash;
6325 } constexpr_call;
6327 /* A table of all constexpr calls that have been evaluated by the
6328 compiler in this translation unit. */
6330 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
6332 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
6333 bool, bool, bool *, bool *);
6335 /* Compute a hash value for a constexpr call representation. */
6337 static hashval_t
6338 constexpr_call_hash (const void *p)
6340 const constexpr_call *info = (const constexpr_call *) p;
6341 return info->hash;
6344 /* Return 1 if the objects pointed to by P and Q represent calls
6345 to the same constexpr function with the same arguments.
6346 Otherwise, return 0. */
6348 static int
6349 constexpr_call_equal (const void *p, const void *q)
6351 const constexpr_call *lhs = (const constexpr_call *) p;
6352 const constexpr_call *rhs = (const constexpr_call *) q;
6353 tree lhs_bindings;
6354 tree rhs_bindings;
6355 if (lhs == rhs)
6356 return 1;
6357 if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
6358 return 0;
6359 lhs_bindings = lhs->bindings;
6360 rhs_bindings = rhs->bindings;
6361 while (lhs_bindings != NULL && rhs_bindings != NULL)
6363 tree lhs_arg = TREE_VALUE (lhs_bindings);
6364 tree rhs_arg = TREE_VALUE (rhs_bindings);
6365 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
6366 if (!cp_tree_equal (lhs_arg, rhs_arg))
6367 return 0;
6368 lhs_bindings = TREE_CHAIN (lhs_bindings);
6369 rhs_bindings = TREE_CHAIN (rhs_bindings);
6371 return lhs_bindings == rhs_bindings;
6374 /* Initialize the constexpr call table, if needed. */
6376 static void
6377 maybe_initialize_constexpr_call_table (void)
6379 if (constexpr_call_table == NULL)
6380 constexpr_call_table = htab_create_ggc (101,
6381 constexpr_call_hash,
6382 constexpr_call_equal,
6383 ggc_free);
6386 /* Return true if T designates the implied `this' parameter. */
6388 static inline bool
6389 is_this_parameter (tree t)
6391 return t == current_class_ptr;
6394 /* We have an expression tree T that represents a call, either CALL_EXPR
6395 or AGGR_INIT_EXPR. If the call is lexically to a named function,
6396 retrun the _DECL for that function. */
6398 static tree
6399 get_function_named_in_call (tree t)
6401 tree fun = NULL;
6402 switch (TREE_CODE (t))
6404 case CALL_EXPR:
6405 fun = CALL_EXPR_FN (t);
6406 break;
6408 case AGGR_INIT_EXPR:
6409 fun = AGGR_INIT_EXPR_FN (t);
6410 break;
6412 default:
6413 gcc_unreachable();
6414 break;
6416 if (TREE_CODE (fun) == ADDR_EXPR
6417 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
6418 fun = TREE_OPERAND (fun, 0);
6419 return fun;
6422 /* We have an expression tree T that represents a call, either CALL_EXPR
6423 or AGGR_INIT_EXPR. Return the Nth argument. */
6425 static inline tree
6426 get_nth_callarg (tree t, int n)
6428 switch (TREE_CODE (t))
6430 case CALL_EXPR:
6431 return CALL_EXPR_ARG (t, n);
6433 case AGGR_INIT_EXPR:
6434 return AGGR_INIT_EXPR_ARG (t, n);
6436 default:
6437 gcc_unreachable ();
6438 return NULL;
6442 /* Look up the binding of the function parameter T in a constexpr
6443 function call context CALL. */
6445 static tree
6446 lookup_parameter_binding (const constexpr_call *call, tree t)
6448 tree b = purpose_member (t, call->bindings);
6449 return TREE_VALUE (b);
6452 /* Attempt to evaluate T which represents a call to a builtin function.
6453 We assume here that all builtin functions evaluate to scalar types
6454 represented by _CST nodes. */
6456 static tree
6457 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
6458 bool allow_non_constant, bool addr,
6459 bool *non_constant_p, bool *overflow_p)
6461 const int nargs = call_expr_nargs (t);
6462 tree *args = (tree *) alloca (nargs * sizeof (tree));
6463 tree new_call;
6464 int i;
6465 for (i = 0; i < nargs; ++i)
6467 args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
6468 allow_non_constant, addr,
6469 non_constant_p, overflow_p);
6470 if (allow_non_constant && *non_constant_p)
6471 return t;
6473 if (*non_constant_p)
6474 return t;
6475 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
6476 CALL_EXPR_FN (t), nargs, args);
6477 new_call = fold (new_call);
6478 VERIFY_CONSTANT (new_call);
6479 return new_call;
6482 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
6483 the type of the value to match. */
6485 static tree
6486 adjust_temp_type (tree type, tree temp)
6488 if (TREE_TYPE (temp) == type)
6489 return temp;
6490 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
6491 if (TREE_CODE (temp) == CONSTRUCTOR)
6492 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
6493 gcc_assert (scalarish_type_p (type));
6494 return cp_fold_convert (type, temp);
6497 /* Subroutine of cxx_eval_call_expression.
6498 We are processing a call expression (either CALL_EXPR or
6499 AGGR_INIT_EXPR) in the call context of OLD_CALL. Evaluate
6500 all arguments and bind their values to correspondings
6501 parameters, making up the NEW_CALL context. */
6503 static void
6504 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
6505 constexpr_call *new_call,
6506 bool allow_non_constant,
6507 bool *non_constant_p, bool *overflow_p)
6509 const int nargs = call_expr_nargs (t);
6510 tree fun = new_call->fundef->decl;
6511 tree parms = DECL_ARGUMENTS (fun);
6512 int i;
6513 for (i = 0; i < nargs; ++i)
6515 tree x, arg;
6516 tree type = parms ? TREE_TYPE (parms) : void_type_node;
6517 /* For member function, the first argument is a pointer to the implied
6518 object. And for an object contruction, don't bind `this' before
6519 it is fully constructed. */
6520 if (i == 0 && DECL_CONSTRUCTOR_P (fun))
6521 goto next;
6522 x = get_nth_callarg (t, i);
6523 if (parms && DECL_BY_REFERENCE (parms))
6525 /* cp_genericize made this a reference for argument passing, but
6526 we don't want to treat it like one for constexpr evaluation. */
6527 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
6528 gcc_assert (TREE_CODE (TREE_TYPE (x)) == REFERENCE_TYPE);
6529 type = TREE_TYPE (type);
6530 x = convert_from_reference (x);
6532 arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
6533 TREE_CODE (type) == REFERENCE_TYPE,
6534 non_constant_p, overflow_p);
6535 /* Don't VERIFY_CONSTANT here. */
6536 if (*non_constant_p && allow_non_constant)
6537 return;
6538 /* Just discard ellipsis args after checking their constantitude. */
6539 if (!parms)
6540 continue;
6541 if (*non_constant_p)
6542 /* Don't try to adjust the type of non-constant args. */
6543 goto next;
6545 /* Make sure the binding has the same type as the parm. */
6546 if (TREE_CODE (type) != REFERENCE_TYPE)
6547 arg = adjust_temp_type (type, arg);
6548 new_call->bindings = tree_cons (parms, arg, new_call->bindings);
6549 next:
6550 parms = TREE_CHAIN (parms);
6554 /* Variables and functions to manage constexpr call expansion context.
6555 These do not need to be marked for PCH or GC. */
6557 /* FIXME remember and print actual constant arguments. */
6558 static vec<tree> call_stack = vNULL;
6559 static int call_stack_tick;
6560 static int last_cx_error_tick;
6562 static bool
6563 push_cx_call_context (tree call)
6565 ++call_stack_tick;
6566 if (!EXPR_HAS_LOCATION (call))
6567 SET_EXPR_LOCATION (call, input_location);
6568 call_stack.safe_push (call);
6569 if (call_stack.length () > (unsigned) max_constexpr_depth)
6570 return false;
6571 return true;
6574 static void
6575 pop_cx_call_context (void)
6577 ++call_stack_tick;
6578 call_stack.pop ();
6581 vec<tree>
6582 cx_error_context (void)
6584 vec<tree> r = vNULL;
6585 if (call_stack_tick != last_cx_error_tick
6586 && !call_stack.is_empty ())
6587 r = call_stack;
6588 last_cx_error_tick = call_stack_tick;
6589 return r;
6592 /* Subroutine of cxx_eval_constant_expression.
6593 Evaluate the call expression tree T in the context of OLD_CALL expression
6594 evaluation. */
6596 static tree
6597 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
6598 bool allow_non_constant, bool addr,
6599 bool *non_constant_p, bool *overflow_p)
6601 location_t loc = EXPR_LOC_OR_HERE (t);
6602 tree fun = get_function_named_in_call (t);
6603 tree result;
6604 constexpr_call new_call = { NULL, NULL, NULL, 0 };
6605 constexpr_call **slot;
6606 constexpr_call *entry;
6607 bool depth_ok;
6609 if (TREE_CODE (fun) != FUNCTION_DECL)
6611 /* Might be a constexpr function pointer. */
6612 fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
6613 /*addr*/false, non_constant_p, overflow_p);
6614 if (TREE_CODE (fun) == ADDR_EXPR)
6615 fun = TREE_OPERAND (fun, 0);
6617 if (TREE_CODE (fun) != FUNCTION_DECL)
6619 if (!allow_non_constant && !*non_constant_p)
6620 error_at (loc, "expression %qE does not designate a constexpr "
6621 "function", fun);
6622 *non_constant_p = true;
6623 return t;
6625 if (DECL_CLONED_FUNCTION_P (fun))
6626 fun = DECL_CLONED_FUNCTION (fun);
6627 if (is_builtin_fn (fun))
6628 return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
6629 addr, non_constant_p, overflow_p);
6630 if (!DECL_DECLARED_CONSTEXPR_P (fun))
6632 if (!allow_non_constant)
6634 error_at (loc, "call to non-constexpr function %qD", fun);
6635 explain_invalid_constexpr_fn (fun);
6637 *non_constant_p = true;
6638 return t;
6641 /* Shortcut trivial copy constructor/op=. */
6642 if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
6644 tree arg = convert_from_reference (get_nth_callarg (t, 1));
6645 return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
6646 addr, non_constant_p, overflow_p);
6649 /* If in direct recursive call, optimize definition search. */
6650 if (old_call != NULL && old_call->fundef->decl == fun)
6651 new_call.fundef = old_call->fundef;
6652 else
6654 new_call.fundef = retrieve_constexpr_fundef (fun);
6655 if (new_call.fundef == NULL || new_call.fundef->body == NULL)
6657 if (!allow_non_constant)
6659 if (DECL_INITIAL (fun))
6661 /* The definition of fun was somehow unsuitable. */
6662 error_at (loc, "%qD called in a constant expression", fun);
6663 explain_invalid_constexpr_fn (fun);
6665 else
6666 error_at (loc, "%qD used before its definition", fun);
6668 *non_constant_p = true;
6669 return t;
6672 cxx_bind_parameters_in_call (old_call, t, &new_call,
6673 allow_non_constant, non_constant_p, overflow_p);
6674 if (*non_constant_p)
6675 return t;
6677 depth_ok = push_cx_call_context (t);
6679 new_call.hash
6680 = iterative_hash_template_arg (new_call.bindings,
6681 constexpr_fundef_hash (new_call.fundef));
6683 /* If we have seen this call before, we are done. */
6684 maybe_initialize_constexpr_call_table ();
6685 slot = (constexpr_call **)
6686 htab_find_slot (constexpr_call_table, &new_call, INSERT);
6687 entry = *slot;
6688 if (entry == NULL)
6690 /* We need to keep a pointer to the entry, not just the slot, as the
6691 slot can move in the call to cxx_eval_builtin_function_call. */
6692 *slot = entry = ggc_alloc_constexpr_call ();
6693 *entry = new_call;
6695 /* Calls which are in progress have their result set to NULL
6696 so that we can detect circular dependencies. */
6697 else if (entry->result == NULL)
6699 if (!allow_non_constant)
6700 error ("call has circular dependency");
6701 *non_constant_p = true;
6702 entry->result = result = error_mark_node;
6705 if (!depth_ok)
6707 if (!allow_non_constant)
6708 error ("constexpr evaluation depth exceeds maximum of %d (use "
6709 "-fconstexpr-depth= to increase the maximum)",
6710 max_constexpr_depth);
6711 *non_constant_p = true;
6712 entry->result = result = error_mark_node;
6714 else
6716 result = entry->result;
6717 if (!result || result == error_mark_node)
6718 result = (cxx_eval_constant_expression
6719 (&new_call, new_call.fundef->body,
6720 allow_non_constant, addr,
6721 non_constant_p, overflow_p));
6722 if (result == error_mark_node)
6723 *non_constant_p = true;
6724 if (*non_constant_p)
6725 entry->result = result = error_mark_node;
6726 else
6728 /* If this was a call to initialize an object, set the type of
6729 the CONSTRUCTOR to the type of that object. */
6730 if (DECL_CONSTRUCTOR_P (fun))
6732 tree ob_arg = get_nth_callarg (t, 0);
6733 STRIP_NOPS (ob_arg);
6734 gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
6735 && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
6736 result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
6737 result);
6739 entry->result = result;
6743 pop_cx_call_context ();
6744 return unshare_expr (result);
6747 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
6749 bool
6750 reduced_constant_expression_p (tree t)
6752 /* FIXME are we calling this too much? */
6753 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6756 /* Some expressions may have constant operands but are not constant
6757 themselves, such as 1/0. Call this function (or rather, the macro
6758 following it) to check for that condition.
6760 We only call this in places that require an arithmetic constant, not in
6761 places where we might have a non-constant expression that can be a
6762 component of a constant expression, such as the address of a constexpr
6763 variable that might be dereferenced later. */
6765 static bool
6766 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p,
6767 bool *overflow_p)
6769 if (!*non_constant_p && !reduced_constant_expression_p (t))
6771 if (!allow_non_constant)
6772 error ("%q+E is not a constant expression", t);
6773 *non_constant_p = true;
6775 if (TREE_OVERFLOW_P (t))
6777 if (!allow_non_constant)
6779 permerror (input_location, "overflow in constant expression");
6780 /* If we're being permissive (and are in an enforcing
6781 context), ignore the overflow. */
6782 if (flag_permissive)
6783 return *non_constant_p;
6785 *overflow_p = true;
6787 return *non_constant_p;
6790 /* Subroutine of cxx_eval_constant_expression.
6791 Attempt to reduce the unary expression tree T to a compile time value.
6792 If successful, return the value. Otherwise issue a diagnostic
6793 and return error_mark_node. */
6795 static tree
6796 cxx_eval_unary_expression (const constexpr_call *call, tree t,
6797 bool allow_non_constant, bool addr,
6798 bool *non_constant_p, bool *overflow_p)
6800 tree r;
6801 tree orig_arg = TREE_OPERAND (t, 0);
6802 tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6803 addr, non_constant_p, overflow_p);
6804 VERIFY_CONSTANT (arg);
6805 if (arg == orig_arg)
6806 return t;
6807 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6808 VERIFY_CONSTANT (r);
6809 return r;
6812 /* Subroutine of cxx_eval_constant_expression.
6813 Like cxx_eval_unary_expression, except for binary expressions. */
6815 static tree
6816 cxx_eval_binary_expression (const constexpr_call *call, tree t,
6817 bool allow_non_constant, bool addr,
6818 bool *non_constant_p, bool *overflow_p)
6820 tree r;
6821 tree orig_lhs = TREE_OPERAND (t, 0);
6822 tree orig_rhs = TREE_OPERAND (t, 1);
6823 tree lhs, rhs;
6824 lhs = cxx_eval_constant_expression (call, orig_lhs,
6825 allow_non_constant, addr,
6826 non_constant_p, overflow_p);
6827 VERIFY_CONSTANT (lhs);
6828 rhs = cxx_eval_constant_expression (call, orig_rhs,
6829 allow_non_constant, addr,
6830 non_constant_p, overflow_p);
6831 VERIFY_CONSTANT (rhs);
6832 if (lhs == orig_lhs && rhs == orig_rhs)
6833 return t;
6834 r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6835 VERIFY_CONSTANT (r);
6836 return r;
6839 /* Subroutine of cxx_eval_constant_expression.
6840 Attempt to evaluate condition expressions. Dead branches are not
6841 looked into. */
6843 static tree
6844 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6845 bool allow_non_constant, bool addr,
6846 bool *non_constant_p, bool *overflow_p)
6848 tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6849 allow_non_constant, addr,
6850 non_constant_p, overflow_p);
6851 VERIFY_CONSTANT (val);
6852 /* Don't VERIFY_CONSTANT the other operands. */
6853 if (integer_zerop (val))
6854 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6855 allow_non_constant, addr,
6856 non_constant_p, overflow_p);
6857 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6858 allow_non_constant, addr,
6859 non_constant_p, overflow_p);
6862 /* Subroutine of cxx_eval_constant_expression.
6863 Attempt to reduce a reference to an array slot. */
6865 static tree
6866 cxx_eval_array_reference (const constexpr_call *call, tree t,
6867 bool allow_non_constant, bool addr,
6868 bool *non_constant_p, bool *overflow_p)
6870 tree oldary = TREE_OPERAND (t, 0);
6871 tree ary = cxx_eval_constant_expression (call, oldary,
6872 allow_non_constant, addr,
6873 non_constant_p, overflow_p);
6874 tree index, oldidx;
6875 HOST_WIDE_INT i;
6876 tree elem_type;
6877 unsigned len, elem_nchars = 1;
6878 if (*non_constant_p)
6879 return t;
6880 oldidx = TREE_OPERAND (t, 1);
6881 index = cxx_eval_constant_expression (call, oldidx,
6882 allow_non_constant, false,
6883 non_constant_p, overflow_p);
6884 VERIFY_CONSTANT (index);
6885 if (addr && ary == oldary && index == oldidx)
6886 return t;
6887 else if (addr)
6888 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6889 elem_type = TREE_TYPE (TREE_TYPE (ary));
6890 if (TREE_CODE (ary) == CONSTRUCTOR)
6891 len = CONSTRUCTOR_NELTS (ary);
6892 else if (TREE_CODE (ary) == STRING_CST)
6894 elem_nchars = (TYPE_PRECISION (elem_type)
6895 / TYPE_PRECISION (char_type_node));
6896 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
6898 else
6900 /* We can't do anything with other tree codes, so use
6901 VERIFY_CONSTANT to complain and fail. */
6902 VERIFY_CONSTANT (ary);
6903 gcc_unreachable ();
6905 if (compare_tree_int (index, len) >= 0)
6907 if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
6909 /* If it's within the array bounds but doesn't have an explicit
6910 initializer, it's value-initialized. */
6911 tree val = build_value_init (elem_type, tf_warning_or_error);
6912 return cxx_eval_constant_expression (call, val,
6913 allow_non_constant, addr,
6914 non_constant_p, overflow_p);
6917 if (!allow_non_constant)
6918 error ("array subscript out of bound");
6919 *non_constant_p = true;
6920 return t;
6922 i = tree_low_cst (index, 0);
6923 if (TREE_CODE (ary) == CONSTRUCTOR)
6924 return (*CONSTRUCTOR_ELTS (ary))[i].value;
6925 else if (elem_nchars == 1)
6926 return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6927 TREE_STRING_POINTER (ary)[i]);
6928 else
6930 tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
6931 return native_interpret_expr (type, (const unsigned char *)
6932 TREE_STRING_POINTER (ary)
6933 + i * elem_nchars, elem_nchars);
6935 /* Don't VERIFY_CONSTANT here. */
6938 /* Subroutine of cxx_eval_constant_expression.
6939 Attempt to reduce a field access of a value of class type. */
6941 static tree
6942 cxx_eval_component_reference (const constexpr_call *call, tree t,
6943 bool allow_non_constant, bool addr,
6944 bool *non_constant_p, bool *overflow_p)
6946 unsigned HOST_WIDE_INT i;
6947 tree field;
6948 tree value;
6949 tree part = TREE_OPERAND (t, 1);
6950 tree orig_whole = TREE_OPERAND (t, 0);
6951 tree whole = cxx_eval_constant_expression (call, orig_whole,
6952 allow_non_constant, addr,
6953 non_constant_p, overflow_p);
6954 if (whole == orig_whole)
6955 return t;
6956 if (addr)
6957 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6958 whole, part, NULL_TREE);
6959 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6960 CONSTRUCTOR. */
6961 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6963 if (!allow_non_constant)
6964 error ("%qE is not a constant expression", orig_whole);
6965 *non_constant_p = true;
6967 if (DECL_MUTABLE_P (part))
6969 if (!allow_non_constant)
6970 error ("mutable %qD is not usable in a constant expression", part);
6971 *non_constant_p = true;
6973 if (*non_constant_p)
6974 return t;
6975 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6977 if (field == part)
6978 return value;
6980 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
6981 && CONSTRUCTOR_NELTS (whole) > 0)
6983 /* DR 1188 says we don't have to deal with this. */
6984 if (!allow_non_constant)
6985 error ("accessing %qD member instead of initialized %qD member in "
6986 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6987 *non_constant_p = true;
6988 return t;
6991 /* If there's no explicit init for this field, it's value-initialized. */
6992 value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
6993 return cxx_eval_constant_expression (call, value,
6994 allow_non_constant, addr,
6995 non_constant_p, overflow_p);
6998 /* Subroutine of cxx_eval_constant_expression.
6999 Attempt to reduce a field access of a value of class type that is
7000 expressed as a BIT_FIELD_REF. */
7002 static tree
7003 cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
7004 bool allow_non_constant, bool addr,
7005 bool *non_constant_p, bool *overflow_p)
7007 tree orig_whole = TREE_OPERAND (t, 0);
7008 tree retval, fldval, utype, mask;
7009 bool fld_seen = false;
7010 HOST_WIDE_INT istart, isize;
7011 tree whole = cxx_eval_constant_expression (call, orig_whole,
7012 allow_non_constant, addr,
7013 non_constant_p, overflow_p);
7014 tree start, field, value;
7015 unsigned HOST_WIDE_INT i;
7017 if (whole == orig_whole)
7018 return t;
7019 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
7020 CONSTRUCTOR. */
7021 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
7023 if (!allow_non_constant)
7024 error ("%qE is not a constant expression", orig_whole);
7025 *non_constant_p = true;
7027 if (*non_constant_p)
7028 return t;
7030 start = TREE_OPERAND (t, 2);
7031 istart = tree_low_cst (start, 0);
7032 isize = tree_low_cst (TREE_OPERAND (t, 1), 0);
7033 utype = TREE_TYPE (t);
7034 if (!TYPE_UNSIGNED (utype))
7035 utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
7036 retval = build_int_cst (utype, 0);
7037 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
7039 tree bitpos = bit_position (field);
7040 if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
7041 return value;
7042 if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
7043 && TREE_CODE (value) == INTEGER_CST
7044 && host_integerp (bitpos, 0)
7045 && host_integerp (DECL_SIZE (field), 0))
7047 HOST_WIDE_INT bit = tree_low_cst (bitpos, 0);
7048 HOST_WIDE_INT sz = tree_low_cst (DECL_SIZE (field), 0);
7049 HOST_WIDE_INT shift;
7050 if (bit >= istart && bit + sz <= istart + isize)
7052 fldval = fold_convert (utype, value);
7053 mask = build_int_cst_type (utype, -1);
7054 mask = fold_build2 (LSHIFT_EXPR, utype, mask,
7055 size_int (TYPE_PRECISION (utype) - sz));
7056 mask = fold_build2 (RSHIFT_EXPR, utype, mask,
7057 size_int (TYPE_PRECISION (utype) - sz));
7058 fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
7059 shift = bit - istart;
7060 if (BYTES_BIG_ENDIAN)
7061 shift = TYPE_PRECISION (utype) - shift - sz;
7062 fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
7063 size_int (shift));
7064 retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
7065 fld_seen = true;
7069 if (fld_seen)
7070 return fold_convert (TREE_TYPE (t), retval);
7071 gcc_unreachable ();
7072 return error_mark_node;
7075 /* Subroutine of cxx_eval_constant_expression.
7076 Evaluate a short-circuited logical expression T in the context
7077 of a given constexpr CALL. BAILOUT_VALUE is the value for
7078 early return. CONTINUE_VALUE is used here purely for
7079 sanity check purposes. */
7081 static tree
7082 cxx_eval_logical_expression (const constexpr_call *call, tree t,
7083 tree bailout_value, tree continue_value,
7084 bool allow_non_constant, bool addr,
7085 bool *non_constant_p, bool *overflow_p)
7087 tree r;
7088 tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7089 allow_non_constant, addr,
7090 non_constant_p, overflow_p);
7091 VERIFY_CONSTANT (lhs);
7092 if (tree_int_cst_equal (lhs, bailout_value))
7093 return lhs;
7094 gcc_assert (tree_int_cst_equal (lhs, continue_value));
7095 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7096 allow_non_constant, addr, non_constant_p, overflow_p);
7097 VERIFY_CONSTANT (r);
7098 return r;
7101 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
7102 CONSTRUCTOR elements to initialize (part of) an object containing that
7103 field. Return a pointer to the constructor_elt corresponding to the
7104 initialization of the field. */
7106 static constructor_elt *
7107 base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref)
7109 tree aggr = TREE_OPERAND (ref, 0);
7110 tree field = TREE_OPERAND (ref, 1);
7111 HOST_WIDE_INT i;
7112 constructor_elt *ce;
7114 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
7116 if (TREE_CODE (aggr) == COMPONENT_REF)
7118 constructor_elt *base_ce
7119 = base_field_constructor_elt (v, aggr);
7120 v = CONSTRUCTOR_ELTS (base_ce->value);
7123 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
7124 if (ce->index == field)
7125 return ce;
7127 gcc_unreachable ();
7128 return NULL;
7131 /* Subroutine of cxx_eval_constant_expression.
7132 The expression tree T denotes a C-style array or a C-style
7133 aggregate. Reduce it to a constant expression. */
7135 static tree
7136 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
7137 bool allow_non_constant, bool addr,
7138 bool *non_constant_p, bool *overflow_p)
7140 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
7141 vec<constructor_elt, va_gc> *n;
7142 vec_alloc (n, vec_safe_length (v));
7143 constructor_elt *ce;
7144 HOST_WIDE_INT i;
7145 bool changed = false;
7146 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
7147 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
7149 tree elt = cxx_eval_constant_expression (call, ce->value,
7150 allow_non_constant, addr,
7151 non_constant_p, overflow_p);
7152 /* Don't VERIFY_CONSTANT here. */
7153 if (allow_non_constant && *non_constant_p)
7154 goto fail;
7155 if (elt != ce->value)
7156 changed = true;
7157 if (ce->index && TREE_CODE (ce->index) == COMPONENT_REF)
7159 /* This is an initialization of a vfield inside a base
7160 subaggregate that we already initialized; push this
7161 initialization into the previous initialization. */
7162 constructor_elt *inner = base_field_constructor_elt (n, ce->index);
7163 inner->value = elt;
7165 else if (ce->index && TREE_CODE (ce->index) == NOP_EXPR)
7167 /* This is an initializer for an empty base; now that we've
7168 checked that it's constant, we can ignore it. */
7169 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (ce->index))));
7171 else
7172 CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
7174 if (*non_constant_p || !changed)
7176 fail:
7177 vec_free (n);
7178 return t;
7180 t = build_constructor (TREE_TYPE (t), n);
7181 TREE_CONSTANT (t) = true;
7182 if (TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
7183 t = fold (t);
7184 return t;
7187 /* Subroutine of cxx_eval_constant_expression.
7188 The expression tree T is a VEC_INIT_EXPR which denotes the desired
7189 initialization of a non-static data member of array type. Reduce it to a
7190 CONSTRUCTOR.
7192 Note that apart from value-initialization (when VALUE_INIT is true),
7193 this is only intended to support value-initialization and the
7194 initializations done by defaulted constructors for classes with
7195 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
7196 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
7197 for the copy/move constructor. */
7199 static tree
7200 cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
7201 bool value_init, bool allow_non_constant, bool addr,
7202 bool *non_constant_p, bool *overflow_p)
7204 tree elttype = TREE_TYPE (atype);
7205 int max = tree_low_cst (array_type_nelts (atype), 0);
7206 vec<constructor_elt, va_gc> *n;
7207 vec_alloc (n, max + 1);
7208 bool pre_init = false;
7209 int i;
7211 /* For the default constructor, build up a call to the default
7212 constructor of the element type. We only need to handle class types
7213 here, as for a constructor to be constexpr, all members must be
7214 initialized, which for a defaulted default constructor means they must
7215 be of a class type with a constexpr default constructor. */
7216 if (TREE_CODE (elttype) == ARRAY_TYPE)
7217 /* We only do this at the lowest level. */;
7218 else if (value_init)
7220 init = build_value_init (elttype, tf_warning_or_error);
7221 init = cxx_eval_constant_expression
7222 (call, init, allow_non_constant, addr, non_constant_p, overflow_p);
7223 pre_init = true;
7225 else if (!init)
7227 vec<tree, va_gc> *argvec = make_tree_vector ();
7228 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7229 &argvec, elttype, LOOKUP_NORMAL,
7230 tf_warning_or_error);
7231 release_tree_vector (argvec);
7232 init = cxx_eval_constant_expression (call, init, allow_non_constant,
7233 addr, non_constant_p, overflow_p);
7234 pre_init = true;
7237 if (*non_constant_p && !allow_non_constant)
7238 goto fail;
7240 for (i = 0; i <= max; ++i)
7242 tree idx = build_int_cst (size_type_node, i);
7243 tree eltinit;
7244 if (TREE_CODE (elttype) == ARRAY_TYPE)
7246 /* A multidimensional array; recurse. */
7247 if (value_init || init == NULL_TREE)
7248 eltinit = NULL_TREE;
7249 else
7250 eltinit = cp_build_array_ref (input_location, init, idx,
7251 tf_warning_or_error);
7252 eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
7253 allow_non_constant, addr,
7254 non_constant_p, overflow_p);
7256 else if (pre_init)
7258 /* Initializing an element using value or default initialization
7259 we just pre-built above. */
7260 if (i == 0)
7261 eltinit = init;
7262 else
7263 eltinit = unshare_expr (init);
7265 else
7267 /* Copying an element. */
7268 vec<tree, va_gc> *argvec;
7269 gcc_assert (same_type_ignoring_top_level_qualifiers_p
7270 (atype, TREE_TYPE (init)));
7271 eltinit = cp_build_array_ref (input_location, init, idx,
7272 tf_warning_or_error);
7273 if (!real_lvalue_p (init))
7274 eltinit = move (eltinit);
7275 argvec = make_tree_vector ();
7276 argvec->quick_push (eltinit);
7277 eltinit = (build_special_member_call
7278 (NULL_TREE, complete_ctor_identifier, &argvec,
7279 elttype, LOOKUP_NORMAL, tf_warning_or_error));
7280 release_tree_vector (argvec);
7281 eltinit = cxx_eval_constant_expression
7282 (call, eltinit, allow_non_constant, addr, non_constant_p, overflow_p);
7284 if (*non_constant_p && !allow_non_constant)
7285 goto fail;
7286 CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
7289 if (!*non_constant_p)
7291 init = build_constructor (atype, n);
7292 TREE_CONSTANT (init) = true;
7293 return init;
7296 fail:
7297 vec_free (n);
7298 return init;
7301 static tree
7302 cxx_eval_vec_init (const constexpr_call *call, tree t,
7303 bool allow_non_constant, bool addr,
7304 bool *non_constant_p, bool *overflow_p)
7306 tree atype = TREE_TYPE (t);
7307 tree init = VEC_INIT_EXPR_INIT (t);
7308 tree r = cxx_eval_vec_init_1 (call, atype, init,
7309 VEC_INIT_EXPR_VALUE_INIT (t),
7310 allow_non_constant, addr, non_constant_p, overflow_p);
7311 if (*non_constant_p)
7312 return t;
7313 else
7314 return r;
7317 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
7318 match. We want to be less strict for simple *& folding; if we have a
7319 non-const temporary that we access through a const pointer, that should
7320 work. We handle this here rather than change fold_indirect_ref_1
7321 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
7322 don't really make sense outside of constant expression evaluation. Also
7323 we want to allow folding to COMPONENT_REF, which could cause trouble
7324 with TBAA in fold_indirect_ref_1.
7326 Try to keep this function synced with fold_indirect_ref_1. */
7328 static tree
7329 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
7331 tree sub, subtype;
7333 sub = op0;
7334 STRIP_NOPS (sub);
7335 subtype = TREE_TYPE (sub);
7336 if (!POINTER_TYPE_P (subtype))
7337 return NULL_TREE;
7339 if (TREE_CODE (sub) == ADDR_EXPR)
7341 tree op = TREE_OPERAND (sub, 0);
7342 tree optype = TREE_TYPE (op);
7344 /* *&CONST_DECL -> to the value of the const decl. */
7345 if (TREE_CODE (op) == CONST_DECL)
7346 return DECL_INITIAL (op);
7347 /* *&p => p; make sure to handle *&"str"[cst] here. */
7348 if (same_type_ignoring_top_level_qualifiers_p (optype, type))
7350 tree fop = fold_read_from_constant_string (op);
7351 if (fop)
7352 return fop;
7353 else
7354 return op;
7356 /* *(foo *)&fooarray => fooarray[0] */
7357 else if (TREE_CODE (optype) == ARRAY_TYPE
7358 && (same_type_ignoring_top_level_qualifiers_p
7359 (type, TREE_TYPE (optype))))
7361 tree type_domain = TYPE_DOMAIN (optype);
7362 tree min_val = size_zero_node;
7363 if (type_domain && TYPE_MIN_VALUE (type_domain))
7364 min_val = TYPE_MIN_VALUE (type_domain);
7365 return build4_loc (loc, ARRAY_REF, type, op, min_val,
7366 NULL_TREE, NULL_TREE);
7368 /* *(foo *)&complexfoo => __real__ complexfoo */
7369 else if (TREE_CODE (optype) == COMPLEX_TYPE
7370 && (same_type_ignoring_top_level_qualifiers_p
7371 (type, TREE_TYPE (optype))))
7372 return fold_build1_loc (loc, REALPART_EXPR, type, op);
7373 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
7374 else if (TREE_CODE (optype) == VECTOR_TYPE
7375 && (same_type_ignoring_top_level_qualifiers_p
7376 (type, TREE_TYPE (optype))))
7378 tree part_width = TYPE_SIZE (type);
7379 tree index = bitsize_int (0);
7380 return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
7382 /* Also handle conversion to an empty base class, which
7383 is represented with a NOP_EXPR. */
7384 else if (is_empty_class (type)
7385 && CLASS_TYPE_P (optype)
7386 && DERIVED_FROM_P (type, optype))
7388 *empty_base = true;
7389 return op;
7391 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
7392 else if (RECORD_OR_UNION_TYPE_P (optype))
7394 tree field = TYPE_FIELDS (optype);
7395 for (; field; field = DECL_CHAIN (field))
7396 if (TREE_CODE (field) == FIELD_DECL
7397 && integer_zerop (byte_position (field))
7398 && (same_type_ignoring_top_level_qualifiers_p
7399 (TREE_TYPE (field), type)))
7401 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
7402 break;
7406 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
7407 && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
7409 tree op00 = TREE_OPERAND (sub, 0);
7410 tree op01 = TREE_OPERAND (sub, 1);
7412 STRIP_NOPS (op00);
7413 if (TREE_CODE (op00) == ADDR_EXPR)
7415 tree op00type;
7416 op00 = TREE_OPERAND (op00, 0);
7417 op00type = TREE_TYPE (op00);
7419 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
7420 if (TREE_CODE (op00type) == VECTOR_TYPE
7421 && (same_type_ignoring_top_level_qualifiers_p
7422 (type, TREE_TYPE (op00type))))
7424 HOST_WIDE_INT offset = tree_low_cst (op01, 0);
7425 tree part_width = TYPE_SIZE (type);
7426 unsigned HOST_WIDE_INT part_widthi = tree_low_cst (part_width, 0)/BITS_PER_UNIT;
7427 unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
7428 tree index = bitsize_int (indexi);
7430 if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
7431 return fold_build3_loc (loc,
7432 BIT_FIELD_REF, type, op00,
7433 part_width, index);
7436 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
7437 else if (TREE_CODE (op00type) == COMPLEX_TYPE
7438 && (same_type_ignoring_top_level_qualifiers_p
7439 (type, TREE_TYPE (op00type))))
7441 tree size = TYPE_SIZE_UNIT (type);
7442 if (tree_int_cst_equal (size, op01))
7443 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
7445 /* ((foo *)&fooarray)[1] => fooarray[1] */
7446 else if (TREE_CODE (op00type) == ARRAY_TYPE
7447 && (same_type_ignoring_top_level_qualifiers_p
7448 (type, TREE_TYPE (op00type))))
7450 tree type_domain = TYPE_DOMAIN (op00type);
7451 tree min_val = size_zero_node;
7452 if (type_domain && TYPE_MIN_VALUE (type_domain))
7453 min_val = TYPE_MIN_VALUE (type_domain);
7454 op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
7455 TYPE_SIZE_UNIT (type));
7456 op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
7457 return build4_loc (loc, ARRAY_REF, type, op00, op01,
7458 NULL_TREE, NULL_TREE);
7460 /* Also handle conversion to an empty base class, which
7461 is represented with a NOP_EXPR. */
7462 else if (is_empty_class (type)
7463 && CLASS_TYPE_P (op00type)
7464 && DERIVED_FROM_P (type, op00type))
7466 *empty_base = true;
7467 return op00;
7469 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
7470 else if (RECORD_OR_UNION_TYPE_P (op00type))
7472 tree field = TYPE_FIELDS (op00type);
7473 for (; field; field = DECL_CHAIN (field))
7474 if (TREE_CODE (field) == FIELD_DECL
7475 && tree_int_cst_equal (byte_position (field), op01)
7476 && (same_type_ignoring_top_level_qualifiers_p
7477 (TREE_TYPE (field), type)))
7479 return fold_build3 (COMPONENT_REF, type, op00,
7480 field, NULL_TREE);
7481 break;
7486 /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
7487 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
7488 && (same_type_ignoring_top_level_qualifiers_p
7489 (type, TREE_TYPE (TREE_TYPE (subtype)))))
7491 tree type_domain;
7492 tree min_val = size_zero_node;
7493 sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
7494 if (!sub)
7495 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
7496 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
7497 if (type_domain && TYPE_MIN_VALUE (type_domain))
7498 min_val = TYPE_MIN_VALUE (type_domain);
7499 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
7500 NULL_TREE);
7503 return NULL_TREE;
7506 static tree
7507 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
7508 bool allow_non_constant, bool addr,
7509 bool *non_constant_p, bool *overflow_p)
7511 tree orig_op0 = TREE_OPERAND (t, 0);
7512 tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
7513 /*addr*/false, non_constant_p, overflow_p);
7514 bool empty_base = false;
7515 tree r;
7517 /* Don't VERIFY_CONSTANT here. */
7518 if (*non_constant_p)
7519 return t;
7521 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
7522 &empty_base);
7524 if (r)
7525 r = cxx_eval_constant_expression (call, r, allow_non_constant,
7526 addr, non_constant_p, overflow_p);
7527 else
7529 tree sub = op0;
7530 STRIP_NOPS (sub);
7531 if (TREE_CODE (sub) == POINTER_PLUS_EXPR)
7533 sub = TREE_OPERAND (sub, 0);
7534 STRIP_NOPS (sub);
7536 if (TREE_CODE (sub) == ADDR_EXPR)
7538 /* We couldn't fold to a constant value. Make sure it's not
7539 something we should have been able to fold. */
7540 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
7541 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
7542 /* DR 1188 says we don't have to deal with this. */
7543 if (!allow_non_constant)
7544 error ("accessing value of %qE through a %qT glvalue in a "
7545 "constant expression", build_fold_indirect_ref (sub),
7546 TREE_TYPE (t));
7547 *non_constant_p = true;
7548 return t;
7552 /* If we're pulling out the value of an empty base, make sure
7553 that the whole object is constant and then return an empty
7554 CONSTRUCTOR. */
7555 if (empty_base)
7557 VERIFY_CONSTANT (r);
7558 r = build_constructor (TREE_TYPE (t), NULL);
7559 TREE_CONSTANT (r) = true;
7562 if (r == NULL_TREE)
7564 if (!addr)
7565 VERIFY_CONSTANT (t);
7566 return t;
7568 return r;
7571 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
7572 Shared between potential_constant_expression and
7573 cxx_eval_constant_expression. */
7575 static void
7576 non_const_var_error (tree r)
7578 tree type = TREE_TYPE (r);
7579 error ("the value of %qD is not usable in a constant "
7580 "expression", r);
7581 /* Avoid error cascade. */
7582 if (DECL_INITIAL (r) == error_mark_node)
7583 return;
7584 if (DECL_DECLARED_CONSTEXPR_P (r))
7585 inform (DECL_SOURCE_LOCATION (r),
7586 "%qD used in its own initializer", r);
7587 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7589 if (!CP_TYPE_CONST_P (type))
7590 inform (DECL_SOURCE_LOCATION (r),
7591 "%q#D is not const", r);
7592 else if (CP_TYPE_VOLATILE_P (type))
7593 inform (DECL_SOURCE_LOCATION (r),
7594 "%q#D is volatile", r);
7595 else if (!DECL_INITIAL (r)
7596 || !TREE_CONSTANT (DECL_INITIAL (r)))
7597 inform (DECL_SOURCE_LOCATION (r),
7598 "%qD was not initialized with a constant "
7599 "expression", r);
7600 else
7601 gcc_unreachable ();
7603 else
7605 if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
7606 inform (DECL_SOURCE_LOCATION (r),
7607 "%qD was not declared %<constexpr%>", r);
7608 else
7609 inform (DECL_SOURCE_LOCATION (r),
7610 "%qD does not have integral or enumeration type",
7615 /* Evaluate VEC_PERM_EXPR (v1, v2, mask). */
7616 static tree
7617 cxx_eval_vec_perm_expr (const constexpr_call *call, tree t,
7618 bool allow_non_constant, bool addr,
7619 bool *non_constant_p, bool *overflow_p)
7621 int i;
7622 tree args[3];
7623 tree val;
7624 tree elttype = TREE_TYPE (t);
7626 for (i = 0; i < 3; i++)
7628 args[i] = cxx_eval_constant_expression (call, TREE_OPERAND (t, i),
7629 allow_non_constant, addr,
7630 non_constant_p, overflow_p);
7631 if (*non_constant_p)
7632 goto fail;
7635 gcc_assert (TREE_CODE (TREE_TYPE (args[0])) == VECTOR_TYPE);
7636 gcc_assert (TREE_CODE (TREE_TYPE (args[1])) == VECTOR_TYPE);
7637 gcc_assert (TREE_CODE (TREE_TYPE (args[2])) == VECTOR_TYPE);
7639 val = fold_ternary_loc (EXPR_LOCATION (t), VEC_PERM_EXPR, elttype,
7640 args[0], args[1], args[2]);
7641 if (val != NULL_TREE)
7642 return val;
7644 fail:
7645 return t;
7648 /* Attempt to reduce the expression T to a constant value.
7649 On failure, issue diagnostic and return error_mark_node. */
7650 /* FIXME unify with c_fully_fold */
7652 static tree
7653 cxx_eval_constant_expression (const constexpr_call *call, tree t,
7654 bool allow_non_constant, bool addr,
7655 bool *non_constant_p, bool *overflow_p)
7657 tree r = t;
7659 if (t == error_mark_node)
7661 *non_constant_p = true;
7662 return t;
7664 if (CONSTANT_CLASS_P (t))
7666 if (TREE_CODE (t) == PTRMEM_CST)
7667 t = cplus_expand_constant (t);
7668 else if (TREE_OVERFLOW (t) && (!flag_permissive || allow_non_constant))
7669 *overflow_p = true;
7670 return t;
7672 if (TREE_CODE (t) != NOP_EXPR
7673 && reduced_constant_expression_p (t))
7674 return fold (t);
7676 switch (TREE_CODE (t))
7678 case VAR_DECL:
7679 if (addr)
7680 return t;
7681 /* else fall through. */
7682 case CONST_DECL:
7683 r = integral_constant_value (t);
7684 if (TREE_CODE (r) == TARGET_EXPR
7685 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
7686 r = TARGET_EXPR_INITIAL (r);
7687 if (DECL_P (r))
7689 if (!allow_non_constant)
7690 non_const_var_error (r);
7691 *non_constant_p = true;
7693 break;
7695 case FUNCTION_DECL:
7696 case TEMPLATE_DECL:
7697 case LABEL_DECL:
7698 return t;
7700 case PARM_DECL:
7701 if (call && DECL_CONTEXT (t) == call->fundef->decl)
7703 if (DECL_ARTIFICIAL (t) && DECL_CONSTRUCTOR_P (DECL_CONTEXT (t)))
7705 if (!allow_non_constant)
7706 sorry ("use of the value of the object being constructed "
7707 "in a constant expression");
7708 *non_constant_p = true;
7710 else
7711 r = lookup_parameter_binding (call, t);
7713 else if (addr)
7714 /* Defer in case this is only used for its type. */;
7715 else
7717 if (!allow_non_constant)
7718 error ("%qE is not a constant expression", t);
7719 *non_constant_p = true;
7721 break;
7723 case CALL_EXPR:
7724 case AGGR_INIT_EXPR:
7725 r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
7726 non_constant_p, overflow_p);
7727 break;
7729 case TARGET_EXPR:
7730 if (!literal_type_p (TREE_TYPE (t)))
7732 if (!allow_non_constant)
7734 error ("temporary of non-literal type %qT in a "
7735 "constant expression", TREE_TYPE (t));
7736 explain_non_literal_class (TREE_TYPE (t));
7738 *non_constant_p = true;
7739 break;
7741 /* else fall through. */
7742 case INIT_EXPR:
7743 /* Pass false for 'addr' because these codes indicate
7744 initialization of a temporary. */
7745 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7746 allow_non_constant, false,
7747 non_constant_p, overflow_p);
7748 if (!*non_constant_p)
7749 /* Adjust the type of the result to the type of the temporary. */
7750 r = adjust_temp_type (TREE_TYPE (t), r);
7751 break;
7753 case SCOPE_REF:
7754 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7755 allow_non_constant, addr,
7756 non_constant_p, overflow_p);
7757 break;
7759 case RETURN_EXPR:
7760 case NON_LVALUE_EXPR:
7761 case TRY_CATCH_EXPR:
7762 case CLEANUP_POINT_EXPR:
7763 case MUST_NOT_THROW_EXPR:
7764 case SAVE_EXPR:
7765 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7766 allow_non_constant, addr,
7767 non_constant_p, overflow_p);
7768 break;
7770 /* These differ from cxx_eval_unary_expression in that this doesn't
7771 check for a constant operand or result; an address can be
7772 constant without its operand being, and vice versa. */
7773 case INDIRECT_REF:
7774 r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
7775 non_constant_p, overflow_p);
7776 break;
7778 case ADDR_EXPR:
7780 tree oldop = TREE_OPERAND (t, 0);
7781 tree op = cxx_eval_constant_expression (call, oldop,
7782 allow_non_constant,
7783 /*addr*/true,
7784 non_constant_p, overflow_p);
7785 /* Don't VERIFY_CONSTANT here. */
7786 if (*non_constant_p)
7787 return t;
7788 /* This function does more aggressive folding than fold itself. */
7789 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
7790 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
7791 return t;
7792 break;
7795 case REALPART_EXPR:
7796 case IMAGPART_EXPR:
7797 case CONJ_EXPR:
7798 case FIX_TRUNC_EXPR:
7799 case FLOAT_EXPR:
7800 case NEGATE_EXPR:
7801 case ABS_EXPR:
7802 case BIT_NOT_EXPR:
7803 case TRUTH_NOT_EXPR:
7804 case FIXED_CONVERT_EXPR:
7805 r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
7806 non_constant_p, overflow_p);
7807 break;
7809 case SIZEOF_EXPR:
7810 if (SIZEOF_EXPR_TYPE_P (t))
7811 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
7812 SIZEOF_EXPR, false);
7813 else if (TYPE_P (TREE_OPERAND (t, 0)))
7814 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
7815 false);
7816 else
7817 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
7818 false);
7819 if (r == error_mark_node)
7820 r = size_one_node;
7821 VERIFY_CONSTANT (r);
7822 break;
7824 case COMPOUND_EXPR:
7826 /* check_return_expr sometimes wraps a TARGET_EXPR in a
7827 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
7828 introduced by build_call_a. */
7829 tree op0 = TREE_OPERAND (t, 0);
7830 tree op1 = TREE_OPERAND (t, 1);
7831 STRIP_NOPS (op1);
7832 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7833 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7834 r = cxx_eval_constant_expression (call, op0, allow_non_constant,
7835 addr, non_constant_p, overflow_p);
7836 else
7838 /* Check that the LHS is constant and then discard it. */
7839 cxx_eval_constant_expression (call, op0, allow_non_constant,
7840 false, non_constant_p, overflow_p);
7841 op1 = TREE_OPERAND (t, 1);
7842 r = cxx_eval_constant_expression (call, op1, allow_non_constant,
7843 addr, non_constant_p, overflow_p);
7846 break;
7848 case POINTER_PLUS_EXPR:
7849 case PLUS_EXPR:
7850 case MINUS_EXPR:
7851 case MULT_EXPR:
7852 case TRUNC_DIV_EXPR:
7853 case CEIL_DIV_EXPR:
7854 case FLOOR_DIV_EXPR:
7855 case ROUND_DIV_EXPR:
7856 case TRUNC_MOD_EXPR:
7857 case CEIL_MOD_EXPR:
7858 case ROUND_MOD_EXPR:
7859 case RDIV_EXPR:
7860 case EXACT_DIV_EXPR:
7861 case MIN_EXPR:
7862 case MAX_EXPR:
7863 case LSHIFT_EXPR:
7864 case RSHIFT_EXPR:
7865 case LROTATE_EXPR:
7866 case RROTATE_EXPR:
7867 case BIT_IOR_EXPR:
7868 case BIT_XOR_EXPR:
7869 case BIT_AND_EXPR:
7870 case TRUTH_XOR_EXPR:
7871 case LT_EXPR:
7872 case LE_EXPR:
7873 case GT_EXPR:
7874 case GE_EXPR:
7875 case EQ_EXPR:
7876 case NE_EXPR:
7877 case UNORDERED_EXPR:
7878 case ORDERED_EXPR:
7879 case UNLT_EXPR:
7880 case UNLE_EXPR:
7881 case UNGT_EXPR:
7882 case UNGE_EXPR:
7883 case UNEQ_EXPR:
7884 case RANGE_EXPR:
7885 case COMPLEX_EXPR:
7886 r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
7887 non_constant_p, overflow_p);
7888 break;
7890 /* fold can introduce non-IF versions of these; still treat them as
7891 short-circuiting. */
7892 case TRUTH_AND_EXPR:
7893 case TRUTH_ANDIF_EXPR:
7894 r = cxx_eval_logical_expression (call, t, boolean_false_node,
7895 boolean_true_node,
7896 allow_non_constant, addr,
7897 non_constant_p, overflow_p);
7898 break;
7900 case TRUTH_OR_EXPR:
7901 case TRUTH_ORIF_EXPR:
7902 r = cxx_eval_logical_expression (call, t, boolean_true_node,
7903 boolean_false_node,
7904 allow_non_constant, addr,
7905 non_constant_p, overflow_p);
7906 break;
7908 case ARRAY_REF:
7909 r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
7910 non_constant_p, overflow_p);
7911 break;
7913 case COMPONENT_REF:
7914 r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
7915 non_constant_p, overflow_p);
7916 break;
7918 case BIT_FIELD_REF:
7919 r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
7920 non_constant_p, overflow_p);
7921 break;
7923 case COND_EXPR:
7924 case VEC_COND_EXPR:
7925 r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
7926 non_constant_p, overflow_p);
7927 break;
7929 case CONSTRUCTOR:
7930 r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
7931 non_constant_p, overflow_p);
7932 break;
7934 case VEC_INIT_EXPR:
7935 /* We can get this in a defaulted constructor for a class with a
7936 non-static data member of array type. Either the initializer will
7937 be NULL, meaning default-initialization, or it will be an lvalue
7938 or xvalue of the same type, meaning direct-initialization from the
7939 corresponding member. */
7940 r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
7941 non_constant_p, overflow_p);
7942 break;
7944 case VEC_PERM_EXPR:
7945 r = cxx_eval_vec_perm_expr (call, t, allow_non_constant, addr,
7946 non_constant_p, overflow_p);
7947 break;
7949 case CONVERT_EXPR:
7950 case VIEW_CONVERT_EXPR:
7951 case NOP_EXPR:
7953 tree oldop = TREE_OPERAND (t, 0);
7954 tree op = cxx_eval_constant_expression (call, oldop,
7955 allow_non_constant, addr,
7956 non_constant_p, overflow_p);
7957 if (*non_constant_p)
7958 return t;
7959 if (op == oldop)
7960 /* We didn't fold at the top so we could check for ptr-int
7961 conversion. */
7962 return fold (t);
7963 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), op);
7964 /* Conversion of an out-of-range value has implementation-defined
7965 behavior; the language considers it different from arithmetic
7966 overflow, which is undefined. */
7967 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
7968 TREE_OVERFLOW (r) = false;
7970 break;
7972 case EMPTY_CLASS_EXPR:
7973 /* This is good enough for a function argument that might not get
7974 used, and they can't do anything with it, so just return it. */
7975 return t;
7977 case LAMBDA_EXPR:
7978 case PREINCREMENT_EXPR:
7979 case POSTINCREMENT_EXPR:
7980 case PREDECREMENT_EXPR:
7981 case POSTDECREMENT_EXPR:
7982 case NEW_EXPR:
7983 case VEC_NEW_EXPR:
7984 case DELETE_EXPR:
7985 case VEC_DELETE_EXPR:
7986 case THROW_EXPR:
7987 case MODIFY_EXPR:
7988 case MODOP_EXPR:
7989 /* GCC internal stuff. */
7990 case VA_ARG_EXPR:
7991 case OBJ_TYPE_REF:
7992 case WITH_CLEANUP_EXPR:
7993 case STATEMENT_LIST:
7994 case BIND_EXPR:
7995 case NON_DEPENDENT_EXPR:
7996 case BASELINK:
7997 case EXPR_STMT:
7998 case OFFSET_REF:
7999 if (!allow_non_constant)
8000 error_at (EXPR_LOC_OR_HERE (t),
8001 "expression %qE is not a constant-expression", t);
8002 *non_constant_p = true;
8003 break;
8005 default:
8006 internal_error ("unexpected expression %qE of kind %s", t,
8007 tree_code_name[TREE_CODE (t)]);
8008 *non_constant_p = true;
8009 break;
8012 if (r == error_mark_node)
8013 *non_constant_p = true;
8015 if (*non_constant_p)
8016 return t;
8017 else
8018 return r;
8021 static tree
8022 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
8024 bool non_constant_p = false;
8025 bool overflow_p = false;
8026 tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
8027 false, &non_constant_p, &overflow_p);
8029 verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
8031 if (TREE_CODE (t) != CONSTRUCTOR
8032 && cp_has_mutable_p (TREE_TYPE (t)))
8034 /* We allow a mutable type if the original expression was a
8035 CONSTRUCTOR so that we can do aggregate initialization of
8036 constexpr variables. */
8037 if (!allow_non_constant)
8038 error ("%qT cannot be the type of a complete constant expression "
8039 "because it has mutable sub-objects", TREE_TYPE (t));
8040 non_constant_p = true;
8043 /* Technically we should check this for all subexpressions, but that
8044 runs into problems with our internal representation of pointer
8045 subtraction and the 5.19 rules are still in flux. */
8046 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
8047 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
8048 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
8050 if (!allow_non_constant)
8051 error ("conversion from pointer type %qT "
8052 "to arithmetic type %qT in a constant-expression",
8053 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
8054 non_constant_p = true;
8057 if (!non_constant_p && overflow_p)
8058 non_constant_p = true;
8060 if (non_constant_p && !allow_non_constant)
8061 return error_mark_node;
8062 else if (non_constant_p && TREE_CONSTANT (r))
8064 /* This isn't actually constant, so unset TREE_CONSTANT. */
8065 if (EXPR_P (r))
8066 r = copy_node (r);
8067 else if (TREE_CODE (r) == CONSTRUCTOR)
8068 r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
8069 else
8070 r = build_nop (TREE_TYPE (r), r);
8071 TREE_CONSTANT (r) = false;
8073 else if (non_constant_p || r == t)
8074 return t;
8076 if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
8078 if (TREE_CODE (t) == TARGET_EXPR
8079 && TARGET_EXPR_INITIAL (t) == r)
8080 return t;
8081 else
8083 r = get_target_expr (r);
8084 TREE_CONSTANT (r) = true;
8085 return r;
8088 else
8089 return r;
8092 /* Returns true if T is a valid subexpression of a constant expression,
8093 even if it isn't itself a constant expression. */
8095 bool
8096 is_sub_constant_expr (tree t)
8098 bool non_constant_p = false;
8099 bool overflow_p = false;
8100 cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p,
8101 &overflow_p);
8102 return !non_constant_p && !overflow_p;
8105 /* If T represents a constant expression returns its reduced value.
8106 Otherwise return error_mark_node. If T is dependent, then
8107 return NULL. */
8109 tree
8110 cxx_constant_value (tree t)
8112 return cxx_eval_outermost_constant_expr (t, false);
8115 /* If T is a constant expression, returns its reduced value.
8116 Otherwise, if T does not have TREE_CONSTANT set, returns T.
8117 Otherwise, returns a version of T without TREE_CONSTANT. */
8119 tree
8120 maybe_constant_value (tree t)
8122 tree r;
8124 if (type_dependent_expression_p (t)
8125 || type_unknown_p (t)
8126 || BRACE_ENCLOSED_INITIALIZER_P (t)
8127 || !potential_constant_expression (t)
8128 || value_dependent_expression_p (t))
8130 if (TREE_OVERFLOW_P (t))
8132 t = build_nop (TREE_TYPE (t), t);
8133 TREE_CONSTANT (t) = false;
8135 return t;
8138 r = cxx_eval_outermost_constant_expr (t, true);
8139 #ifdef ENABLE_CHECKING
8140 /* cp_tree_equal looks through NOPs, so allow them. */
8141 gcc_assert (r == t
8142 || CONVERT_EXPR_P (t)
8143 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
8144 || !cp_tree_equal (r, t));
8145 #endif
8146 return r;
8149 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
8150 than wrapped in a TARGET_EXPR. */
8152 tree
8153 maybe_constant_init (tree t)
8155 t = maybe_constant_value (t);
8156 if (TREE_CODE (t) == TARGET_EXPR)
8158 tree init = TARGET_EXPR_INITIAL (t);
8159 if (TREE_CODE (init) == CONSTRUCTOR)
8160 t = init;
8162 return t;
8165 #if 0
8166 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
8167 /* Return true if the object referred to by REF has automatic or thread
8168 local storage. */
8170 enum { ck_ok, ck_bad, ck_unknown };
8171 static int
8172 check_automatic_or_tls (tree ref)
8174 enum machine_mode mode;
8175 HOST_WIDE_INT bitsize, bitpos;
8176 tree offset;
8177 int volatilep = 0, unsignedp = 0;
8178 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
8179 &mode, &unsignedp, &volatilep, false);
8180 duration_kind dk;
8182 /* If there isn't a decl in the middle, we don't know the linkage here,
8183 and this isn't a constant expression anyway. */
8184 if (!DECL_P (decl))
8185 return ck_unknown;
8186 dk = decl_storage_duration (decl);
8187 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
8189 #endif
8191 /* Return true if T denotes a potentially constant expression. Issue
8192 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
8193 an lvalue-rvalue conversion is implied.
8195 C++0x [expr.const] used to say
8197 6 An expression is a potential constant expression if it is
8198 a constant expression where all occurences of function
8199 parameters are replaced by arbitrary constant expressions
8200 of the appropriate type.
8202 2 A conditional expression is a constant expression unless it
8203 involves one of the following as a potentially evaluated
8204 subexpression (3.2), but subexpressions of logical AND (5.14),
8205 logical OR (5.15), and conditional (5.16) operations that are
8206 not evaluated are not considered. */
8208 static bool
8209 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
8211 enum { any = false, rval = true };
8212 int i;
8213 tree tmp;
8215 if (t == error_mark_node)
8216 return false;
8217 if (t == NULL_TREE)
8218 return true;
8219 if (TREE_THIS_VOLATILE (t))
8221 if (flags & tf_error)
8222 error ("expression %qE has side-effects", t);
8223 return false;
8225 if (CONSTANT_CLASS_P (t))
8226 return true;
8228 switch (TREE_CODE (t))
8230 case FUNCTION_DECL:
8231 case BASELINK:
8232 case TEMPLATE_DECL:
8233 case OVERLOAD:
8234 case TEMPLATE_ID_EXPR:
8235 case LABEL_DECL:
8236 case CONST_DECL:
8237 case SIZEOF_EXPR:
8238 case ALIGNOF_EXPR:
8239 case OFFSETOF_EXPR:
8240 case NOEXCEPT_EXPR:
8241 case TEMPLATE_PARM_INDEX:
8242 case TRAIT_EXPR:
8243 case IDENTIFIER_NODE:
8244 case USERDEF_LITERAL:
8245 /* We can see a FIELD_DECL in a pointer-to-member expression. */
8246 case FIELD_DECL:
8247 case PARM_DECL:
8248 case USING_DECL:
8249 return true;
8251 case AGGR_INIT_EXPR:
8252 case CALL_EXPR:
8253 /* -- an invocation of a function other than a constexpr function
8254 or a constexpr constructor. */
8256 tree fun = get_function_named_in_call (t);
8257 const int nargs = call_expr_nargs (t);
8258 i = 0;
8260 if (is_overloaded_fn (fun))
8262 if (TREE_CODE (fun) == FUNCTION_DECL)
8264 if (builtin_valid_in_constant_expr_p (fun))
8265 return true;
8266 if (!DECL_DECLARED_CONSTEXPR_P (fun)
8267 /* Allow any built-in function; if the expansion
8268 isn't constant, we'll deal with that then. */
8269 && !is_builtin_fn (fun))
8271 if (flags & tf_error)
8273 error_at (EXPR_LOC_OR_HERE (t),
8274 "call to non-constexpr function %qD", fun);
8275 explain_invalid_constexpr_fn (fun);
8277 return false;
8279 /* A call to a non-static member function takes the address
8280 of the object as the first argument. But in a constant
8281 expression the address will be folded away, so look
8282 through it now. */
8283 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
8284 && !DECL_CONSTRUCTOR_P (fun))
8286 tree x = get_nth_callarg (t, 0);
8287 if (is_this_parameter (x))
8289 if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8291 if (flags & tf_error)
8292 sorry ("calling a member function of the "
8293 "object being constructed in a constant "
8294 "expression");
8295 return false;
8297 /* Otherwise OK. */;
8299 else if (!potential_constant_expression_1 (x, rval, flags))
8300 return false;
8301 i = 1;
8304 else
8305 fun = get_first_fn (fun);
8306 /* Skip initial arguments to base constructors. */
8307 if (DECL_BASE_CONSTRUCTOR_P (fun))
8308 i = num_artificial_parms_for (fun);
8309 fun = DECL_ORIGIN (fun);
8311 else
8313 if (potential_constant_expression_1 (fun, rval, flags))
8314 /* Might end up being a constant function pointer. */;
8315 else
8316 return false;
8318 for (; i < nargs; ++i)
8320 tree x = get_nth_callarg (t, i);
8321 if (!potential_constant_expression_1 (x, rval, flags))
8322 return false;
8324 return true;
8327 case NON_LVALUE_EXPR:
8328 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
8329 -- an lvalue of integral type that refers to a non-volatile
8330 const variable or static data member initialized with
8331 constant expressions, or
8333 -- an lvalue of literal type that refers to non-volatile
8334 object defined with constexpr, or that refers to a
8335 sub-object of such an object; */
8336 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8338 case VAR_DECL:
8339 if (want_rval && !decl_constant_var_p (t)
8340 && !dependent_type_p (TREE_TYPE (t)))
8342 if (flags & tf_error)
8343 non_const_var_error (t);
8344 return false;
8346 return true;
8348 case NOP_EXPR:
8349 case CONVERT_EXPR:
8350 case VIEW_CONVERT_EXPR:
8351 /* -- a reinterpret_cast. FIXME not implemented, and this rule
8352 may change to something more specific to type-punning (DR 1312). */
8354 tree from = TREE_OPERAND (t, 0);
8355 return (potential_constant_expression_1
8356 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
8359 case ADDR_EXPR:
8360 /* -- a unary operator & that is applied to an lvalue that
8361 designates an object with thread or automatic storage
8362 duration; */
8363 t = TREE_OPERAND (t, 0);
8364 #if 0
8365 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
8366 any checking here, as we might dereference the pointer later. If
8367 we remove this code, also remove check_automatic_or_tls. */
8368 i = check_automatic_or_tls (t);
8369 if (i == ck_ok)
8370 return true;
8371 if (i == ck_bad)
8373 if (flags & tf_error)
8374 error ("address-of an object %qE with thread local or "
8375 "automatic storage is not a constant expression", t);
8376 return false;
8378 #endif
8379 return potential_constant_expression_1 (t, any, flags);
8381 case COMPONENT_REF:
8382 case BIT_FIELD_REF:
8383 case ARROW_EXPR:
8384 case OFFSET_REF:
8385 /* -- a class member access unless its postfix-expression is
8386 of literal type or of pointer to literal type. */
8387 /* This test would be redundant, as it follows from the
8388 postfix-expression being a potential constant expression. */
8389 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8390 want_rval, flags);
8392 case EXPR_PACK_EXPANSION:
8393 return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
8394 want_rval, flags);
8396 case INDIRECT_REF:
8398 tree x = TREE_OPERAND (t, 0);
8399 STRIP_NOPS (x);
8400 if (is_this_parameter (x))
8402 if (want_rval && DECL_CONTEXT (x)
8403 && DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8405 if (flags & tf_error)
8406 sorry ("use of the value of the object being constructed "
8407 "in a constant expression");
8408 return false;
8410 return true;
8412 return potential_constant_expression_1 (x, rval, flags);
8415 case LAMBDA_EXPR:
8416 case DYNAMIC_CAST_EXPR:
8417 case PSEUDO_DTOR_EXPR:
8418 case PREINCREMENT_EXPR:
8419 case POSTINCREMENT_EXPR:
8420 case PREDECREMENT_EXPR:
8421 case POSTDECREMENT_EXPR:
8422 case NEW_EXPR:
8423 case VEC_NEW_EXPR:
8424 case DELETE_EXPR:
8425 case VEC_DELETE_EXPR:
8426 case THROW_EXPR:
8427 case MODIFY_EXPR:
8428 case MODOP_EXPR:
8429 /* GCC internal stuff. */
8430 case VA_ARG_EXPR:
8431 case OBJ_TYPE_REF:
8432 case WITH_CLEANUP_EXPR:
8433 case CLEANUP_POINT_EXPR:
8434 case MUST_NOT_THROW_EXPR:
8435 case TRY_CATCH_EXPR:
8436 case STATEMENT_LIST:
8437 /* Don't bother trying to define a subset of statement-expressions to
8438 be constant-expressions, at least for now. */
8439 case STMT_EXPR:
8440 case EXPR_STMT:
8441 case BIND_EXPR:
8442 case TRANSACTION_EXPR:
8443 case IF_STMT:
8444 case DO_STMT:
8445 case FOR_STMT:
8446 case WHILE_STMT:
8447 if (flags & tf_error)
8448 error ("expression %qE is not a constant-expression", t);
8449 return false;
8451 case TYPEID_EXPR:
8452 /* -- a typeid expression whose operand is of polymorphic
8453 class type; */
8455 tree e = TREE_OPERAND (t, 0);
8456 if (!TYPE_P (e) && !type_dependent_expression_p (e)
8457 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
8459 if (flags & tf_error)
8460 error ("typeid-expression is not a constant expression "
8461 "because %qE is of polymorphic type", e);
8462 return false;
8464 return true;
8467 case MINUS_EXPR:
8468 /* -- a subtraction where both operands are pointers. */
8469 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8470 && TYPE_PTR_P (TREE_OPERAND (t, 1)))
8472 if (flags & tf_error)
8473 error ("difference of two pointer expressions is not "
8474 "a constant expression");
8475 return false;
8477 want_rval = true;
8478 goto binary;
8480 case LT_EXPR:
8481 case LE_EXPR:
8482 case GT_EXPR:
8483 case GE_EXPR:
8484 case EQ_EXPR:
8485 case NE_EXPR:
8486 /* -- a relational or equality operator where at least
8487 one of the operands is a pointer. */
8488 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8489 || TYPE_PTR_P (TREE_OPERAND (t, 1)))
8491 if (flags & tf_error)
8492 error ("pointer comparison expression is not a "
8493 "constant expression");
8494 return false;
8496 want_rval = true;
8497 goto binary;
8499 case BIT_NOT_EXPR:
8500 /* A destructor. */
8501 if (TYPE_P (TREE_OPERAND (t, 0)))
8502 return true;
8503 /* else fall through. */
8505 case REALPART_EXPR:
8506 case IMAGPART_EXPR:
8507 case CONJ_EXPR:
8508 case SAVE_EXPR:
8509 case FIX_TRUNC_EXPR:
8510 case FLOAT_EXPR:
8511 case NEGATE_EXPR:
8512 case ABS_EXPR:
8513 case TRUTH_NOT_EXPR:
8514 case FIXED_CONVERT_EXPR:
8515 case UNARY_PLUS_EXPR:
8516 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
8517 flags);
8519 case CAST_EXPR:
8520 case CONST_CAST_EXPR:
8521 case STATIC_CAST_EXPR:
8522 case REINTERPRET_CAST_EXPR:
8523 case IMPLICIT_CONV_EXPR:
8524 return (potential_constant_expression_1
8525 (TREE_OPERAND (t, 0),
8526 TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
8528 case PAREN_EXPR:
8529 case NON_DEPENDENT_EXPR:
8530 /* For convenience. */
8531 case RETURN_EXPR:
8532 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8533 want_rval, flags);
8535 case SCOPE_REF:
8536 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8537 want_rval, flags);
8539 case TARGET_EXPR:
8540 if (!literal_type_p (TREE_TYPE (t)))
8542 if (flags & tf_error)
8544 error ("temporary of non-literal type %qT in a "
8545 "constant expression", TREE_TYPE (t));
8546 explain_non_literal_class (TREE_TYPE (t));
8548 return false;
8550 case INIT_EXPR:
8551 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8552 rval, flags);
8554 case CONSTRUCTOR:
8556 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
8557 constructor_elt *ce;
8558 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
8559 if (!potential_constant_expression_1 (ce->value, want_rval, flags))
8560 return false;
8561 return true;
8564 case TREE_LIST:
8566 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
8567 || DECL_P (TREE_PURPOSE (t)));
8568 if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
8569 flags))
8570 return false;
8571 if (TREE_CHAIN (t) == NULL_TREE)
8572 return true;
8573 return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
8574 flags);
8577 case TRUNC_DIV_EXPR:
8578 case CEIL_DIV_EXPR:
8579 case FLOOR_DIV_EXPR:
8580 case ROUND_DIV_EXPR:
8581 case TRUNC_MOD_EXPR:
8582 case CEIL_MOD_EXPR:
8583 case ROUND_MOD_EXPR:
8585 tree denom = TREE_OPERAND (t, 1);
8586 /* We can't call maybe_constant_value on an expression
8587 that hasn't been through fold_non_dependent_expr yet. */
8588 if (!processing_template_decl)
8589 denom = maybe_constant_value (denom);
8590 if (integer_zerop (denom))
8592 if (flags & tf_error)
8593 error ("division by zero is not a constant-expression");
8594 return false;
8596 else
8598 want_rval = true;
8599 goto binary;
8603 case COMPOUND_EXPR:
8605 /* check_return_expr sometimes wraps a TARGET_EXPR in a
8606 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
8607 introduced by build_call_a. */
8608 tree op0 = TREE_OPERAND (t, 0);
8609 tree op1 = TREE_OPERAND (t, 1);
8610 STRIP_NOPS (op1);
8611 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
8612 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
8613 return potential_constant_expression_1 (op0, want_rval, flags);
8614 else
8615 goto binary;
8618 /* If the first operand is the non-short-circuit constant, look at
8619 the second operand; otherwise we only care about the first one for
8620 potentiality. */
8621 case TRUTH_AND_EXPR:
8622 case TRUTH_ANDIF_EXPR:
8623 tmp = boolean_true_node;
8624 goto truth;
8625 case TRUTH_OR_EXPR:
8626 case TRUTH_ORIF_EXPR:
8627 tmp = boolean_false_node;
8628 truth:
8630 tree op = TREE_OPERAND (t, 0);
8631 if (!potential_constant_expression_1 (op, rval, flags))
8632 return false;
8633 if (!processing_template_decl)
8634 op = maybe_constant_value (op);
8635 if (tree_int_cst_equal (op, tmp))
8636 return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
8637 else
8638 return true;
8641 case PLUS_EXPR:
8642 case MULT_EXPR:
8643 case POINTER_PLUS_EXPR:
8644 case RDIV_EXPR:
8645 case EXACT_DIV_EXPR:
8646 case MIN_EXPR:
8647 case MAX_EXPR:
8648 case LSHIFT_EXPR:
8649 case RSHIFT_EXPR:
8650 case LROTATE_EXPR:
8651 case RROTATE_EXPR:
8652 case BIT_IOR_EXPR:
8653 case BIT_XOR_EXPR:
8654 case BIT_AND_EXPR:
8655 case TRUTH_XOR_EXPR:
8656 case UNORDERED_EXPR:
8657 case ORDERED_EXPR:
8658 case UNLT_EXPR:
8659 case UNLE_EXPR:
8660 case UNGT_EXPR:
8661 case UNGE_EXPR:
8662 case UNEQ_EXPR:
8663 case LTGT_EXPR:
8664 case RANGE_EXPR:
8665 case COMPLEX_EXPR:
8666 want_rval = true;
8667 /* Fall through. */
8668 case ARRAY_REF:
8669 case ARRAY_RANGE_REF:
8670 case MEMBER_REF:
8671 case DOTSTAR_EXPR:
8672 binary:
8673 for (i = 0; i < 2; ++i)
8674 if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8675 want_rval, flags))
8676 return false;
8677 return true;
8679 case FMA_EXPR:
8680 case VEC_PERM_EXPR:
8681 for (i = 0; i < 3; ++i)
8682 if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8683 true, flags))
8684 return false;
8685 return true;
8687 case COND_EXPR:
8688 case VEC_COND_EXPR:
8689 /* If the condition is a known constant, we know which of the legs we
8690 care about; otherwise we only require that the condition and
8691 either of the legs be potentially constant. */
8692 tmp = TREE_OPERAND (t, 0);
8693 if (!potential_constant_expression_1 (tmp, rval, flags))
8694 return false;
8695 if (!processing_template_decl)
8696 tmp = maybe_constant_value (tmp);
8697 if (integer_zerop (tmp))
8698 return potential_constant_expression_1 (TREE_OPERAND (t, 2),
8699 want_rval, flags);
8700 else if (TREE_CODE (tmp) == INTEGER_CST)
8701 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8702 want_rval, flags);
8703 for (i = 1; i < 3; ++i)
8704 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
8705 want_rval, tf_none))
8706 return true;
8707 if (flags & tf_error)
8708 error ("expression %qE is not a constant-expression", t);
8709 return false;
8711 case VEC_INIT_EXPR:
8712 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
8713 return true;
8714 if (flags & tf_error)
8716 error ("non-constant array initialization");
8717 diagnose_non_constexpr_vec_init (t);
8719 return false;
8721 default:
8722 if (objc_is_property_ref (t))
8723 return false;
8725 sorry ("unexpected AST of kind %s", tree_code_name[TREE_CODE (t)]);
8726 gcc_unreachable();
8727 return false;
8731 /* The main entry point to the above. */
8733 bool
8734 potential_constant_expression (tree t)
8736 return potential_constant_expression_1 (t, false, tf_none);
8739 /* As above, but require a constant rvalue. */
8741 bool
8742 potential_rvalue_constant_expression (tree t)
8744 return potential_constant_expression_1 (t, true, tf_none);
8747 /* Like above, but complain about non-constant expressions. */
8749 bool
8750 require_potential_constant_expression (tree t)
8752 return potential_constant_expression_1 (t, false, tf_warning_or_error);
8755 /* Cross product of the above. */
8757 bool
8758 require_potential_rvalue_constant_expression (tree t)
8760 return potential_constant_expression_1 (t, true, tf_warning_or_error);
8763 /* Constructor for a lambda expression. */
8765 tree
8766 build_lambda_expr (void)
8768 tree lambda = make_node (LAMBDA_EXPR);
8769 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
8770 LAMBDA_EXPR_CAPTURE_LIST (lambda) = NULL_TREE;
8771 LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
8772 LAMBDA_EXPR_PENDING_PROXIES (lambda) = NULL;
8773 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
8774 LAMBDA_EXPR_MUTABLE_P (lambda) = false;
8775 return lambda;
8778 /* Create the closure object for a LAMBDA_EXPR. */
8780 tree
8781 build_lambda_object (tree lambda_expr)
8783 /* Build aggregate constructor call.
8784 - cp_parser_braced_list
8785 - cp_parser_functional_cast */
8786 vec<constructor_elt, va_gc> *elts = NULL;
8787 tree node, expr, type;
8788 location_t saved_loc;
8790 if (processing_template_decl)
8791 return lambda_expr;
8793 /* Make sure any error messages refer to the lambda-introducer. */
8794 saved_loc = input_location;
8795 input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
8797 for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8798 node;
8799 node = TREE_CHAIN (node))
8801 tree field = TREE_PURPOSE (node);
8802 tree val = TREE_VALUE (node);
8804 if (field == error_mark_node)
8806 expr = error_mark_node;
8807 goto out;
8810 if (DECL_P (val))
8811 mark_used (val);
8813 /* Mere mortals can't copy arrays with aggregate initialization, so
8814 do some magic to make it work here. */
8815 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
8816 val = build_array_copy (val);
8817 else if (DECL_NORMAL_CAPTURE_P (field)
8818 && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
8820 /* "the entities that are captured by copy are used to
8821 direct-initialize each corresponding non-static data
8822 member of the resulting closure object."
8824 There's normally no way to express direct-initialization
8825 from an element of a CONSTRUCTOR, so we build up a special
8826 TARGET_EXPR to bypass the usual copy-initialization. */
8827 val = force_rvalue (val, tf_warning_or_error);
8828 if (TREE_CODE (val) == TARGET_EXPR)
8829 TARGET_EXPR_DIRECT_INIT_P (val) = true;
8832 CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
8835 expr = build_constructor (init_list_type_node, elts);
8836 CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
8838 /* N2927: "[The closure] class type is not an aggregate."
8839 But we briefly treat it as an aggregate to make this simpler. */
8840 type = LAMBDA_EXPR_CLOSURE (lambda_expr);
8841 CLASSTYPE_NON_AGGREGATE (type) = 0;
8842 expr = finish_compound_literal (type, expr, tf_warning_or_error);
8843 CLASSTYPE_NON_AGGREGATE (type) = 1;
8845 out:
8846 input_location = saved_loc;
8847 return expr;
8850 /* Return an initialized RECORD_TYPE for LAMBDA.
8851 LAMBDA must have its explicit captures already. */
8853 tree
8854 begin_lambda_type (tree lambda)
8856 tree type;
8859 /* Unique name. This is just like an unnamed class, but we cannot use
8860 make_anon_name because of certain checks against TYPE_ANONYMOUS_P. */
8861 tree name;
8862 name = make_lambda_name ();
8864 /* Create the new RECORD_TYPE for this lambda. */
8865 type = xref_tag (/*tag_code=*/record_type,
8866 name,
8867 /*scope=*/ts_within_enclosing_non_class,
8868 /*template_header_p=*/false);
8871 /* Designate it as a struct so that we can use aggregate initialization. */
8872 CLASSTYPE_DECLARED_CLASS (type) = false;
8874 /* Cross-reference the expression and the type. */
8875 LAMBDA_EXPR_CLOSURE (lambda) = type;
8876 CLASSTYPE_LAMBDA_EXPR (type) = lambda;
8878 /* Clear base types. */
8879 xref_basetypes (type, /*bases=*/NULL_TREE);
8881 /* Start the class. */
8882 type = begin_class_definition (type);
8883 if (type == error_mark_node)
8884 return error_mark_node;
8886 return type;
8889 /* Returns the type to use for the return type of the operator() of a
8890 closure class. */
8892 tree
8893 lambda_return_type (tree expr)
8895 if (expr == NULL_TREE)
8896 return void_type_node;
8897 if (type_unknown_p (expr)
8898 || BRACE_ENCLOSED_INITIALIZER_P (expr))
8900 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
8901 return void_type_node;
8903 gcc_checking_assert (!type_dependent_expression_p (expr));
8904 return cv_unqualified (type_decays_to (unlowered_expr_type (expr)));
8907 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
8908 closure type. */
8910 tree
8911 lambda_function (tree lambda)
8913 tree type;
8914 if (TREE_CODE (lambda) == LAMBDA_EXPR)
8915 type = LAMBDA_EXPR_CLOSURE (lambda);
8916 else
8917 type = lambda;
8918 gcc_assert (LAMBDA_TYPE_P (type));
8919 /* Don't let debug_tree cause instantiation. */
8920 if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
8921 && !COMPLETE_OR_OPEN_TYPE_P (type))
8922 return NULL_TREE;
8923 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
8924 /*protect=*/0, /*want_type=*/false,
8925 tf_warning_or_error);
8926 if (lambda)
8927 lambda = BASELINK_FUNCTIONS (lambda);
8928 return lambda;
8931 /* Returns the type to use for the FIELD_DECL corresponding to the
8932 capture of EXPR.
8933 The caller should add REFERENCE_TYPE for capture by reference. */
8935 tree
8936 lambda_capture_field_type (tree expr)
8938 tree type;
8939 if (type_dependent_expression_p (expr))
8941 type = cxx_make_type (DECLTYPE_TYPE);
8942 DECLTYPE_TYPE_EXPR (type) = expr;
8943 DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
8944 SET_TYPE_STRUCTURAL_EQUALITY (type);
8946 else
8947 type = non_reference (unlowered_expr_type (expr));
8948 return type;
8951 /* Insert the deduced return type for an auto function. */
8953 void
8954 apply_deduced_return_type (tree fco, tree return_type)
8956 tree result;
8958 if (return_type == error_mark_node)
8959 return;
8961 if (LAMBDA_FUNCTION_P (fco))
8963 tree lambda = CLASSTYPE_LAMBDA_EXPR (current_class_type);
8964 LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
8967 if (DECL_CONV_FN_P (fco))
8968 DECL_NAME (fco) = mangle_conv_op_name_for_type (return_type);
8970 TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
8972 result = DECL_RESULT (fco);
8973 if (result == NULL_TREE)
8974 return;
8975 if (TREE_TYPE (result) == return_type)
8976 return;
8978 /* We already have a DECL_RESULT from start_preparsed_function.
8979 Now we need to redo the work it and allocate_struct_function
8980 did to reflect the new type. */
8981 gcc_assert (current_function_decl == fco);
8982 result = build_decl (input_location, RESULT_DECL, NULL_TREE,
8983 TYPE_MAIN_VARIANT (return_type));
8984 DECL_ARTIFICIAL (result) = 1;
8985 DECL_IGNORED_P (result) = 1;
8986 cp_apply_type_quals_to_decl (cp_type_quals (return_type),
8987 result);
8989 DECL_RESULT (fco) = result;
8991 if (!processing_template_decl)
8993 bool aggr = aggregate_value_p (result, fco);
8994 #ifdef PCC_STATIC_STRUCT_RETURN
8995 cfun->returns_pcc_struct = aggr;
8996 #endif
8997 cfun->returns_struct = aggr;
9002 /* DECL is a local variable or parameter from the surrounding scope of a
9003 lambda-expression. Returns the decltype for a use of the capture field
9004 for DECL even if it hasn't been captured yet. */
9006 static tree
9007 capture_decltype (tree decl)
9009 tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
9010 /* FIXME do lookup instead of list walk? */
9011 tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
9012 tree type;
9014 if (cap)
9015 type = TREE_TYPE (TREE_PURPOSE (cap));
9016 else
9017 switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
9019 case CPLD_NONE:
9020 error ("%qD is not captured", decl);
9021 return error_mark_node;
9023 case CPLD_COPY:
9024 type = TREE_TYPE (decl);
9025 if (TREE_CODE (type) == REFERENCE_TYPE
9026 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
9027 type = TREE_TYPE (type);
9028 break;
9030 case CPLD_REFERENCE:
9031 type = TREE_TYPE (decl);
9032 if (TREE_CODE (type) != REFERENCE_TYPE)
9033 type = build_reference_type (TREE_TYPE (decl));
9034 break;
9036 default:
9037 gcc_unreachable ();
9040 if (TREE_CODE (type) != REFERENCE_TYPE)
9042 if (!LAMBDA_EXPR_MUTABLE_P (lam))
9043 type = cp_build_qualified_type (type, (cp_type_quals (type)
9044 |TYPE_QUAL_CONST));
9045 type = build_reference_type (type);
9047 return type;
9050 /* Returns true iff DECL is a lambda capture proxy variable created by
9051 build_capture_proxy. */
9053 bool
9054 is_capture_proxy (tree decl)
9056 return (TREE_CODE (decl) == VAR_DECL
9057 && DECL_HAS_VALUE_EXPR_P (decl)
9058 && !DECL_ANON_UNION_VAR_P (decl)
9059 && LAMBDA_FUNCTION_P (DECL_CONTEXT (decl)));
9062 /* Returns true iff DECL is a capture proxy for a normal capture
9063 (i.e. without explicit initializer). */
9065 bool
9066 is_normal_capture_proxy (tree decl)
9068 if (!is_capture_proxy (decl))
9069 /* It's not a capture proxy. */
9070 return false;
9072 /* It is a capture proxy, is it a normal capture? */
9073 tree val = DECL_VALUE_EXPR (decl);
9074 if (val == error_mark_node)
9075 return true;
9077 gcc_assert (TREE_CODE (val) == COMPONENT_REF);
9078 val = TREE_OPERAND (val, 1);
9079 return DECL_NORMAL_CAPTURE_P (val);
9082 /* VAR is a capture proxy created by build_capture_proxy; add it to the
9083 current function, which is the operator() for the appropriate lambda. */
9085 void
9086 insert_capture_proxy (tree var)
9088 cp_binding_level *b;
9089 int skip;
9090 tree stmt_list;
9092 /* Put the capture proxy in the extra body block so that it won't clash
9093 with a later local variable. */
9094 b = current_binding_level;
9095 for (skip = 0; ; ++skip)
9097 cp_binding_level *n = b->level_chain;
9098 if (n->kind == sk_function_parms)
9099 break;
9100 b = n;
9102 pushdecl_with_scope (var, b, false);
9104 /* And put a DECL_EXPR in the STATEMENT_LIST for the same block. */
9105 var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
9106 stmt_list = (*stmt_list_stack)[stmt_list_stack->length () - 1 - skip];
9107 gcc_assert (stmt_list);
9108 append_to_statement_list_force (var, &stmt_list);
9111 /* We've just finished processing a lambda; if the containing scope is also
9112 a lambda, insert any capture proxies that were created while processing
9113 the nested lambda. */
9115 void
9116 insert_pending_capture_proxies (void)
9118 tree lam;
9119 vec<tree, va_gc> *proxies;
9120 unsigned i;
9122 if (!current_function_decl || !LAMBDA_FUNCTION_P (current_function_decl))
9123 return;
9125 lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
9126 proxies = LAMBDA_EXPR_PENDING_PROXIES (lam);
9127 for (i = 0; i < vec_safe_length (proxies); ++i)
9129 tree var = (*proxies)[i];
9130 insert_capture_proxy (var);
9132 release_tree_vector (LAMBDA_EXPR_PENDING_PROXIES (lam));
9133 LAMBDA_EXPR_PENDING_PROXIES (lam) = NULL;
9136 /* Given REF, a COMPONENT_REF designating a field in the lambda closure,
9137 return the type we want the proxy to have: the type of the field itself,
9138 with added const-qualification if the lambda isn't mutable and the
9139 capture is by value. */
9141 tree
9142 lambda_proxy_type (tree ref)
9144 tree type;
9145 if (REFERENCE_REF_P (ref))
9146 ref = TREE_OPERAND (ref, 0);
9147 type = TREE_TYPE (ref);
9148 if (!dependent_type_p (type))
9149 return type;
9150 type = cxx_make_type (DECLTYPE_TYPE);
9151 DECLTYPE_TYPE_EXPR (type) = ref;
9152 DECLTYPE_FOR_LAMBDA_PROXY (type) = true;
9153 SET_TYPE_STRUCTURAL_EQUALITY (type);
9154 return type;
9157 /* MEMBER is a capture field in a lambda closure class. Now that we're
9158 inside the operator(), build a placeholder var for future lookups and
9159 debugging. */
9161 tree
9162 build_capture_proxy (tree member)
9164 tree var, object, fn, closure, name, lam, type;
9166 closure = DECL_CONTEXT (member);
9167 fn = lambda_function (closure);
9168 lam = CLASSTYPE_LAMBDA_EXPR (closure);
9170 /* The proxy variable forwards to the capture field. */
9171 object = build_fold_indirect_ref (DECL_ARGUMENTS (fn));
9172 object = finish_non_static_data_member (member, object, NULL_TREE);
9173 if (REFERENCE_REF_P (object))
9174 object = TREE_OPERAND (object, 0);
9176 /* Remove the __ inserted by add_capture. */
9177 name = get_identifier (IDENTIFIER_POINTER (DECL_NAME (member)) + 2);
9179 type = lambda_proxy_type (object);
9180 var = build_decl (input_location, VAR_DECL, name, type);
9181 SET_DECL_VALUE_EXPR (var, object);
9182 DECL_HAS_VALUE_EXPR_P (var) = 1;
9183 DECL_ARTIFICIAL (var) = 1;
9184 TREE_USED (var) = 1;
9185 DECL_CONTEXT (var) = fn;
9187 if (name == this_identifier)
9189 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (lam) == member);
9190 LAMBDA_EXPR_THIS_CAPTURE (lam) = var;
9193 if (fn == current_function_decl)
9194 insert_capture_proxy (var);
9195 else
9196 vec_safe_push (LAMBDA_EXPR_PENDING_PROXIES (lam), var);
9198 return var;
9201 /* From an ID and INITIALIZER, create a capture (by reference if
9202 BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
9203 and return it. */
9205 tree
9206 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
9207 bool explicit_init_p)
9209 char *buf;
9210 tree type, member, name;
9212 type = lambda_capture_field_type (initializer);
9213 if (by_reference_p)
9215 type = build_reference_type (type);
9216 if (!real_lvalue_p (initializer))
9217 error ("cannot capture %qE by reference", initializer);
9219 else
9220 /* Capture by copy requires a complete type. */
9221 type = complete_type (type);
9223 /* Add __ to the beginning of the field name so that user code
9224 won't find the field with name lookup. We can't just leave the name
9225 unset because template instantiation uses the name to find
9226 instantiated fields. */
9227 buf = (char *) alloca (IDENTIFIER_LENGTH (id) + 3);
9228 buf[1] = buf[0] = '_';
9229 memcpy (buf + 2, IDENTIFIER_POINTER (id),
9230 IDENTIFIER_LENGTH (id) + 1);
9231 name = get_identifier (buf);
9233 /* If TREE_TYPE isn't set, we're still in the introducer, so check
9234 for duplicates. */
9235 if (!LAMBDA_EXPR_CLOSURE (lambda))
9237 if (IDENTIFIER_MARKED (name))
9239 pedwarn (input_location, 0,
9240 "already captured %qD in lambda expression", id);
9241 return NULL_TREE;
9243 IDENTIFIER_MARKED (name) = true;
9246 /* Make member variable. */
9247 member = build_lang_decl (FIELD_DECL, name, type);
9249 if (!explicit_init_p)
9250 /* Normal captures are invisible to name lookup but uses are replaced
9251 with references to the capture field; we implement this by only
9252 really making them invisible in unevaluated context; see
9253 qualify_lookup. For now, let's make explicitly initialized captures
9254 always visible. */
9255 DECL_NORMAL_CAPTURE_P (member) = true;
9257 if (id == this_identifier)
9258 LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
9260 /* Add it to the appropriate closure class if we've started it. */
9261 if (current_class_type
9262 && current_class_type == LAMBDA_EXPR_CLOSURE (lambda))
9263 finish_member_declaration (member);
9265 LAMBDA_EXPR_CAPTURE_LIST (lambda)
9266 = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
9268 if (LAMBDA_EXPR_CLOSURE (lambda))
9269 return build_capture_proxy (member);
9270 /* For explicit captures we haven't started the function yet, so we wait
9271 and build the proxy from cp_parser_lambda_body. */
9272 return NULL_TREE;
9275 /* Register all the capture members on the list CAPTURES, which is the
9276 LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer. */
9278 void
9279 register_capture_members (tree captures)
9281 if (captures == NULL_TREE)
9282 return;
9284 register_capture_members (TREE_CHAIN (captures));
9285 /* We set this in add_capture to avoid duplicates. */
9286 IDENTIFIER_MARKED (DECL_NAME (TREE_PURPOSE (captures))) = false;
9287 finish_member_declaration (TREE_PURPOSE (captures));
9290 /* Similar to add_capture, except this works on a stack of nested lambdas.
9291 BY_REFERENCE_P in this case is derived from the default capture mode.
9292 Returns the capture for the lambda at the bottom of the stack. */
9294 tree
9295 add_default_capture (tree lambda_stack, tree id, tree initializer)
9297 bool this_capture_p = (id == this_identifier);
9299 tree var = NULL_TREE;
9301 tree saved_class_type = current_class_type;
9303 tree node;
9305 for (node = lambda_stack;
9306 node;
9307 node = TREE_CHAIN (node))
9309 tree lambda = TREE_VALUE (node);
9311 current_class_type = LAMBDA_EXPR_CLOSURE (lambda);
9312 var = add_capture (lambda,
9314 initializer,
9315 /*by_reference_p=*/
9316 (!this_capture_p
9317 && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
9318 == CPLD_REFERENCE)),
9319 /*explicit_init_p=*/false);
9320 initializer = convert_from_reference (var);
9323 current_class_type = saved_class_type;
9325 return var;
9328 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
9329 INDIRECT_REF, possibly adding it through default capturing. */
9331 tree
9332 lambda_expr_this_capture (tree lambda)
9334 tree result;
9336 tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9338 /* Try to default capture 'this' if we can. */
9339 if (!this_capture
9340 && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
9342 tree containing_function = TYPE_CONTEXT (LAMBDA_EXPR_CLOSURE (lambda));
9343 tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
9344 tree init = NULL_TREE;
9346 /* If we are in a lambda function, we can move out until we hit:
9347 1. a non-lambda function,
9348 2. a lambda function capturing 'this', or
9349 3. a non-default capturing lambda function. */
9350 while (LAMBDA_FUNCTION_P (containing_function))
9352 tree lambda
9353 = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
9355 if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
9357 /* An outer lambda has already captured 'this'. */
9358 init = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9359 break;
9362 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
9363 /* An outer lambda won't let us capture 'this'. */
9364 break;
9366 lambda_stack = tree_cons (NULL_TREE,
9367 lambda,
9368 lambda_stack);
9370 containing_function = decl_function_context (containing_function);
9373 if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
9374 && !LAMBDA_FUNCTION_P (containing_function))
9375 /* First parameter is 'this'. */
9376 init = DECL_ARGUMENTS (containing_function);
9378 if (init)
9379 this_capture = add_default_capture (lambda_stack,
9380 /*id=*/this_identifier,
9381 init);
9384 if (!this_capture)
9386 error ("%<this%> was not captured for this lambda function");
9387 result = error_mark_node;
9389 else
9391 /* To make sure that current_class_ref is for the lambda. */
9392 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref))
9393 == LAMBDA_EXPR_CLOSURE (lambda));
9395 result = this_capture;
9397 /* If 'this' is captured, each use of 'this' is transformed into an
9398 access to the corresponding unnamed data member of the closure
9399 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
9400 ensures that the transformed expression is an rvalue. ] */
9401 result = rvalue (result);
9404 return result;
9407 /* Returns the method basetype of the innermost non-lambda function, or
9408 NULL_TREE if none. */
9410 tree
9411 nonlambda_method_basetype (void)
9413 tree fn, type;
9414 if (!current_class_ref)
9415 return NULL_TREE;
9417 type = current_class_type;
9418 if (!LAMBDA_TYPE_P (type))
9419 return type;
9421 /* Find the nearest enclosing non-lambda function. */
9422 fn = TYPE_NAME (type);
9424 fn = decl_function_context (fn);
9425 while (fn && LAMBDA_FUNCTION_P (fn));
9427 if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9428 return NULL_TREE;
9430 return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
9433 /* If the closure TYPE has a static op(), also add a conversion to function
9434 pointer. */
9436 void
9437 maybe_add_lambda_conv_op (tree type)
9439 bool nested = (current_function_decl != NULL_TREE);
9440 tree callop = lambda_function (type);
9441 tree rettype, name, fntype, fn, body, compound_stmt;
9442 tree thistype, stattype, statfn, convfn, call, arg;
9443 vec<tree, va_gc> *argvec;
9445 if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
9446 return;
9448 if (processing_template_decl)
9449 return;
9451 stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
9452 FUNCTION_ARG_CHAIN (callop));
9454 /* First build up the conversion op. */
9456 rettype = build_pointer_type (stattype);
9457 name = mangle_conv_op_name_for_type (rettype);
9458 thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
9459 fntype = build_method_type_directly (thistype, rettype, void_list_node);
9460 fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
9461 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9463 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9464 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9465 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9467 SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
9468 grokclassfn (type, fn, NO_SPECIAL);
9469 set_linkage_according_to_type (type, fn);
9470 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9471 DECL_IN_AGGR_P (fn) = 1;
9472 DECL_ARTIFICIAL (fn) = 1;
9473 DECL_NOT_REALLY_EXTERN (fn) = 1;
9474 DECL_DECLARED_INLINE_P (fn) = 1;
9475 DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
9476 if (nested)
9477 DECL_INTERFACE_KNOWN (fn) = 1;
9479 add_method (type, fn, NULL_TREE);
9481 /* Generic thunk code fails for varargs; we'll complain in mark_used if
9482 the conversion op is used. */
9483 if (varargs_function_p (callop))
9485 DECL_DELETED_FN (fn) = 1;
9486 return;
9489 /* Now build up the thunk to be returned. */
9491 name = get_identifier ("_FUN");
9492 fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
9493 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9494 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9495 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9496 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9497 grokclassfn (type, fn, NO_SPECIAL);
9498 set_linkage_according_to_type (type, fn);
9499 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9500 DECL_IN_AGGR_P (fn) = 1;
9501 DECL_ARTIFICIAL (fn) = 1;
9502 DECL_NOT_REALLY_EXTERN (fn) = 1;
9503 DECL_DECLARED_INLINE_P (fn) = 1;
9504 DECL_STATIC_FUNCTION_P (fn) = 1;
9505 DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
9506 for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
9507 DECL_CONTEXT (arg) = fn;
9508 if (nested)
9509 DECL_INTERFACE_KNOWN (fn) = 1;
9511 add_method (type, fn, NULL_TREE);
9513 if (nested)
9514 push_function_context ();
9515 else
9516 /* Still increment function_depth so that we don't GC in the
9517 middle of an expression. */
9518 ++function_depth;
9520 /* Generate the body of the thunk. */
9522 start_preparsed_function (statfn, NULL_TREE,
9523 SF_PRE_PARSED | SF_INCLASS_INLINE);
9524 if (DECL_ONE_ONLY (statfn))
9526 /* Put the thunk in the same comdat group as the call op. */
9527 symtab_add_to_same_comdat_group
9528 ((symtab_node) cgraph_get_create_node (statfn),
9529 (symtab_node) cgraph_get_create_node (callop));
9531 body = begin_function_body ();
9532 compound_stmt = begin_compound_stmt (0);
9534 arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
9535 null_pointer_node);
9536 argvec = make_tree_vector ();
9537 argvec->quick_push (arg);
9538 for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
9540 mark_exp_read (arg);
9541 vec_safe_push (argvec, arg);
9543 call = build_call_a (callop, argvec->length (), argvec->address ());
9544 CALL_FROM_THUNK_P (call) = 1;
9545 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
9546 call = build_cplus_new (TREE_TYPE (call), call, tf_warning_or_error);
9547 call = convert_from_reference (call);
9548 finish_return_stmt (call);
9550 finish_compound_stmt (compound_stmt);
9551 finish_function_body (body);
9553 expand_or_defer_fn (finish_function (2));
9555 /* Generate the body of the conversion op. */
9557 start_preparsed_function (convfn, NULL_TREE,
9558 SF_PRE_PARSED | SF_INCLASS_INLINE);
9559 body = begin_function_body ();
9560 compound_stmt = begin_compound_stmt (0);
9562 finish_return_stmt (decay_conversion (statfn, tf_warning_or_error));
9564 finish_compound_stmt (compound_stmt);
9565 finish_function_body (body);
9567 expand_or_defer_fn (finish_function (2));
9569 if (nested)
9570 pop_function_context ();
9571 else
9572 --function_depth;
9575 /* Returns true iff VAL is a lambda-related declaration which should
9576 be ignored by unqualified lookup. */
9578 bool
9579 is_lambda_ignored_entity (tree val)
9581 /* In unevaluated context, look past normal capture proxies. */
9582 if (cp_unevaluated_operand && is_normal_capture_proxy (val))
9583 return true;
9585 /* Always ignore lambda fields, their names are only for debugging. */
9586 if (TREE_CODE (val) == FIELD_DECL
9587 && CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (val)))
9588 return true;
9590 /* None of the lookups that use qualify_lookup want the op() from the
9591 lambda; they want the one from the enclosing class. */
9592 if (TREE_CODE (val) == FUNCTION_DECL && LAMBDA_FUNCTION_P (val))
9593 return true;
9595 return false;
9598 #include "gt-cp-semantics.h"