Sync with upstream 4.9 branch
[official-gcc.git] / embedded-4_9-branch / gcc / cp / semantics.c
blob5c6a9d3ce83b40ed56d9d5e2e1316d9eead45eee
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-2014 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 "stmt.h"
32 #include "varasm.h"
33 #include "stor-layout.h"
34 #include "stringpool.h"
35 #include "cp-tree.h"
36 #include "c-family/c-common.h"
37 #include "c-family/c-objc.h"
38 #include "tree-inline.h"
39 #include "intl.h"
40 #include "toplev.h"
41 #include "flags.h"
42 #include "timevar.h"
43 #include "diagnostic.h"
44 #include "cgraph.h"
45 #include "tree-iterator.h"
46 #include "target.h"
47 #include "pointer-set.h"
48 #include "hash-table.h"
49 #include "gimplify.h"
50 #include "bitmap.h"
51 #include "omp-low.h"
53 static bool verify_constant (tree, bool, bool *, bool *);
54 #define VERIFY_CONSTANT(X) \
55 do { \
56 if (verify_constant ((X), allow_non_constant, non_constant_p, overflow_p)) \
57 return t; \
58 } while (0)
60 /* There routines provide a modular interface to perform many parsing
61 operations. They may therefore be used during actual parsing, or
62 during template instantiation, which may be regarded as a
63 degenerate form of parsing. */
65 static tree maybe_convert_cond (tree);
66 static tree finalize_nrv_r (tree *, int *, void *);
67 static tree capture_decltype (tree);
70 /* Deferred Access Checking Overview
71 ---------------------------------
73 Most C++ expressions and declarations require access checking
74 to be performed during parsing. However, in several cases,
75 this has to be treated differently.
77 For member declarations, access checking has to be deferred
78 until more information about the declaration is known. For
79 example:
81 class A {
82 typedef int X;
83 public:
84 X f();
87 A::X A::f();
88 A::X g();
90 When we are parsing the function return type `A::X', we don't
91 really know if this is allowed until we parse the function name.
93 Furthermore, some contexts require that access checking is
94 never performed at all. These include class heads, and template
95 instantiations.
97 Typical use of access checking functions is described here:
99 1. When we enter a context that requires certain access checking
100 mode, the function `push_deferring_access_checks' is called with
101 DEFERRING argument specifying the desired mode. Access checking
102 may be performed immediately (dk_no_deferred), deferred
103 (dk_deferred), or not performed (dk_no_check).
105 2. When a declaration such as a type, or a variable, is encountered,
106 the function `perform_or_defer_access_check' is called. It
107 maintains a vector of all deferred checks.
109 3. The global `current_class_type' or `current_function_decl' is then
110 setup by the parser. `enforce_access' relies on these information
111 to check access.
113 4. Upon exiting the context mentioned in step 1,
114 `perform_deferred_access_checks' is called to check all declaration
115 stored in the vector. `pop_deferring_access_checks' is then
116 called to restore the previous access checking mode.
118 In case of parsing error, we simply call `pop_deferring_access_checks'
119 without `perform_deferred_access_checks'. */
121 typedef struct GTY(()) deferred_access {
122 /* A vector representing name-lookups for which we have deferred
123 checking access controls. We cannot check the accessibility of
124 names used in a decl-specifier-seq until we know what is being
125 declared because code like:
127 class A {
128 class B {};
129 B* f();
132 A::B* A::f() { return 0; }
134 is valid, even though `A::B' is not generally accessible. */
135 vec<deferred_access_check, va_gc> * GTY(()) deferred_access_checks;
137 /* The current mode of access checks. */
138 enum deferring_kind deferring_access_checks_kind;
140 } deferred_access;
142 /* Data for deferred access checking. */
143 static GTY(()) vec<deferred_access, va_gc> *deferred_access_stack;
144 static GTY(()) unsigned deferred_access_no_check;
146 /* Save the current deferred access states and start deferred
147 access checking iff DEFER_P is true. */
149 void
150 push_deferring_access_checks (deferring_kind deferring)
152 /* For context like template instantiation, access checking
153 disabling applies to all nested context. */
154 if (deferred_access_no_check || deferring == dk_no_check)
155 deferred_access_no_check++;
156 else
158 deferred_access e = {NULL, deferring};
159 vec_safe_push (deferred_access_stack, e);
163 /* Save the current deferred access states and start deferred access
164 checking, continuing the set of deferred checks in CHECKS. */
166 void
167 reopen_deferring_access_checks (vec<deferred_access_check, va_gc> * checks)
169 push_deferring_access_checks (dk_deferred);
170 if (!deferred_access_no_check)
171 deferred_access_stack->last().deferred_access_checks = checks;
174 /* Resume deferring access checks again after we stopped doing
175 this previously. */
177 void
178 resume_deferring_access_checks (void)
180 if (!deferred_access_no_check)
181 deferred_access_stack->last().deferring_access_checks_kind = dk_deferred;
184 /* Stop deferring access checks. */
186 void
187 stop_deferring_access_checks (void)
189 if (!deferred_access_no_check)
190 deferred_access_stack->last().deferring_access_checks_kind = dk_no_deferred;
193 /* Discard the current deferred access checks and restore the
194 previous states. */
196 void
197 pop_deferring_access_checks (void)
199 if (deferred_access_no_check)
200 deferred_access_no_check--;
201 else
202 deferred_access_stack->pop ();
205 /* Returns a TREE_LIST representing the deferred checks.
206 The TREE_PURPOSE of each node is the type through which the
207 access occurred; the TREE_VALUE is the declaration named.
210 vec<deferred_access_check, va_gc> *
211 get_deferred_access_checks (void)
213 if (deferred_access_no_check)
214 return NULL;
215 else
216 return (deferred_access_stack->last().deferred_access_checks);
219 /* Take current deferred checks and combine with the
220 previous states if we also defer checks previously.
221 Otherwise perform checks now. */
223 void
224 pop_to_parent_deferring_access_checks (void)
226 if (deferred_access_no_check)
227 deferred_access_no_check--;
228 else
230 vec<deferred_access_check, va_gc> *checks;
231 deferred_access *ptr;
233 checks = (deferred_access_stack->last ().deferred_access_checks);
235 deferred_access_stack->pop ();
236 ptr = &deferred_access_stack->last ();
237 if (ptr->deferring_access_checks_kind == dk_no_deferred)
239 /* Check access. */
240 perform_access_checks (checks, tf_warning_or_error);
242 else
244 /* Merge with parent. */
245 int i, j;
246 deferred_access_check *chk, *probe;
248 FOR_EACH_VEC_SAFE_ELT (checks, i, chk)
250 FOR_EACH_VEC_SAFE_ELT (ptr->deferred_access_checks, j, probe)
252 if (probe->binfo == chk->binfo &&
253 probe->decl == chk->decl &&
254 probe->diag_decl == chk->diag_decl)
255 goto found;
257 /* Insert into parent's checks. */
258 vec_safe_push (ptr->deferred_access_checks, *chk);
259 found:;
265 /* Perform the access checks in CHECKS. The TREE_PURPOSE of each node
266 is the BINFO indicating the qualifying scope used to access the
267 DECL node stored in the TREE_VALUE of the node. If CHECKS is empty
268 or we aren't in SFINAE context or all the checks succeed return TRUE,
269 otherwise FALSE. */
271 bool
272 perform_access_checks (vec<deferred_access_check, va_gc> *checks,
273 tsubst_flags_t complain)
275 int i;
276 deferred_access_check *chk;
277 location_t loc = input_location;
278 bool ok = true;
280 if (!checks)
281 return true;
283 FOR_EACH_VEC_SAFE_ELT (checks, i, chk)
285 input_location = chk->loc;
286 ok &= enforce_access (chk->binfo, chk->decl, chk->diag_decl, complain);
289 input_location = loc;
290 return (complain & tf_error) ? true : ok;
293 /* Perform the deferred access checks.
295 After performing the checks, we still have to keep the list
296 `deferred_access_stack->deferred_access_checks' since we may want
297 to check access for them again later in a different context.
298 For example:
300 class A {
301 typedef int X;
302 static X a;
304 A::X A::a, x; // No error for `A::a', error for `x'
306 We have to perform deferred access of `A::X', first with `A::a',
307 next with `x'. Return value like perform_access_checks above. */
309 bool
310 perform_deferred_access_checks (tsubst_flags_t complain)
312 return perform_access_checks (get_deferred_access_checks (), complain);
315 /* Defer checking the accessibility of DECL, when looked up in
316 BINFO. DIAG_DECL is the declaration to use to print diagnostics.
317 Return value like perform_access_checks above. */
319 bool
320 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl,
321 tsubst_flags_t complain)
323 int i;
324 deferred_access *ptr;
325 deferred_access_check *chk;
328 /* Exit if we are in a context that no access checking is performed.
330 if (deferred_access_no_check)
331 return true;
333 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
335 ptr = &deferred_access_stack->last ();
337 /* If we are not supposed to defer access checks, just check now. */
338 if (ptr->deferring_access_checks_kind == dk_no_deferred)
340 bool ok = enforce_access (binfo, decl, diag_decl, complain);
341 return (complain & tf_error) ? true : ok;
344 /* See if we are already going to perform this check. */
345 FOR_EACH_VEC_SAFE_ELT (ptr->deferred_access_checks, i, chk)
347 if (chk->decl == decl && chk->binfo == binfo &&
348 chk->diag_decl == diag_decl)
350 return true;
353 /* If not, record the check. */
354 deferred_access_check new_access = {binfo, decl, diag_decl, input_location};
355 vec_safe_push (ptr->deferred_access_checks, new_access);
357 return true;
360 /* Returns nonzero if the current statement is a full expression,
361 i.e. temporaries created during that statement should be destroyed
362 at the end of the statement. */
365 stmts_are_full_exprs_p (void)
367 return current_stmt_tree ()->stmts_are_full_exprs_p;
370 /* T is a statement. Add it to the statement-tree. This is the C++
371 version. The C/ObjC frontends have a slightly different version of
372 this function. */
374 tree
375 add_stmt (tree t)
377 enum tree_code code = TREE_CODE (t);
379 if (EXPR_P (t) && code != LABEL_EXPR)
381 if (!EXPR_HAS_LOCATION (t))
382 SET_EXPR_LOCATION (t, input_location);
384 /* When we expand a statement-tree, we must know whether or not the
385 statements are full-expressions. We record that fact here. */
386 STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
389 if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
390 STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
392 /* Add T to the statement-tree. Non-side-effect statements need to be
393 recorded during statement expressions. */
394 gcc_checking_assert (!stmt_list_stack->is_empty ());
395 append_to_statement_list_force (t, &cur_stmt_list);
397 return t;
400 /* Returns the stmt_tree to which statements are currently being added. */
402 stmt_tree
403 current_stmt_tree (void)
405 return (cfun
406 ? &cfun->language->base.x_stmt_tree
407 : &scope_chain->x_stmt_tree);
410 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
412 static tree
413 maybe_cleanup_point_expr (tree expr)
415 if (!processing_template_decl && stmts_are_full_exprs_p ())
416 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
417 return expr;
420 /* Like maybe_cleanup_point_expr except have the type of the new expression be
421 void so we don't need to create a temporary variable to hold the inner
422 expression. The reason why we do this is because the original type might be
423 an aggregate and we cannot create a temporary variable for that type. */
425 tree
426 maybe_cleanup_point_expr_void (tree expr)
428 if (!processing_template_decl && stmts_are_full_exprs_p ())
429 expr = fold_build_cleanup_point_expr (void_type_node, expr);
430 return expr;
435 /* Create a declaration statement for the declaration given by the DECL. */
437 void
438 add_decl_expr (tree decl)
440 tree r = build_stmt (input_location, DECL_EXPR, decl);
441 if (DECL_INITIAL (decl)
442 || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
443 r = maybe_cleanup_point_expr_void (r);
444 add_stmt (r);
447 /* Finish a scope. */
449 tree
450 do_poplevel (tree stmt_list)
452 tree block = NULL;
454 if (stmts_are_full_exprs_p ())
455 block = poplevel (kept_level_p (), 1, 0);
457 stmt_list = pop_stmt_list (stmt_list);
459 if (!processing_template_decl)
461 stmt_list = c_build_bind_expr (input_location, block, stmt_list);
462 /* ??? See c_end_compound_stmt re statement expressions. */
465 return stmt_list;
468 /* Begin a new scope. */
470 static tree
471 do_pushlevel (scope_kind sk)
473 tree ret = push_stmt_list ();
474 if (stmts_are_full_exprs_p ())
475 begin_scope (sk, NULL);
476 return ret;
479 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
480 when the current scope is exited. EH_ONLY is true when this is not
481 meant to apply to normal control flow transfer. */
483 void
484 push_cleanup (tree decl, tree cleanup, bool eh_only)
486 tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
487 CLEANUP_EH_ONLY (stmt) = eh_only;
488 add_stmt (stmt);
489 CLEANUP_BODY (stmt) = push_stmt_list ();
492 /* Simple infinite loop tracking for -Wreturn-type. We keep a stack of all
493 the current loops, represented by 'NULL_TREE' if we've seen a possible
494 exit, and 'error_mark_node' if not. This is currently used only to
495 suppress the warning about a function with no return statements, and
496 therefore we don't bother noting returns as possible exits. We also
497 don't bother with gotos. */
499 static void
500 begin_maybe_infinite_loop (tree cond)
502 /* Only track this while parsing a function, not during instantiation. */
503 if (!cfun || (DECL_TEMPLATE_INSTANTIATION (current_function_decl)
504 && !processing_template_decl))
505 return;
506 bool maybe_infinite = true;
507 if (cond)
509 cond = fold_non_dependent_expr_sfinae (cond, tf_none);
510 cond = maybe_constant_value (cond);
511 maybe_infinite = integer_nonzerop (cond);
513 vec_safe_push (cp_function_chain->infinite_loops,
514 maybe_infinite ? error_mark_node : NULL_TREE);
518 /* A break is a possible exit for the current loop. */
520 void
521 break_maybe_infinite_loop (void)
523 if (!cfun)
524 return;
525 cp_function_chain->infinite_loops->last() = NULL_TREE;
528 /* If we reach the end of the loop without seeing a possible exit, we have
529 an infinite loop. */
531 static void
532 end_maybe_infinite_loop (tree cond)
534 if (!cfun || (DECL_TEMPLATE_INSTANTIATION (current_function_decl)
535 && !processing_template_decl))
536 return;
537 tree current = cp_function_chain->infinite_loops->pop();
538 if (current != NULL_TREE)
540 cond = fold_non_dependent_expr (cond);
541 cond = maybe_constant_value (cond);
542 if (integer_nonzerop (cond))
543 current_function_infinite_loop = 1;
548 /* Begin a conditional that might contain a declaration. When generating
549 normal code, we want the declaration to appear before the statement
550 containing the conditional. When generating template code, we want the
551 conditional to be rendered as the raw DECL_EXPR. */
553 static void
554 begin_cond (tree *cond_p)
556 if (processing_template_decl)
557 *cond_p = push_stmt_list ();
560 /* Finish such a conditional. */
562 static void
563 finish_cond (tree *cond_p, tree expr)
565 if (processing_template_decl)
567 tree cond = pop_stmt_list (*cond_p);
569 if (expr == NULL_TREE)
570 /* Empty condition in 'for'. */
571 gcc_assert (empty_expr_stmt_p (cond));
572 else if (check_for_bare_parameter_packs (expr))
573 expr = error_mark_node;
574 else if (!empty_expr_stmt_p (cond))
575 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), cond, expr);
577 *cond_p = expr;
580 /* If *COND_P specifies a conditional with a declaration, transform the
581 loop such that
582 while (A x = 42) { }
583 for (; A x = 42;) { }
584 becomes
585 while (true) { A x = 42; if (!x) break; }
586 for (;;) { A x = 42; if (!x) break; }
587 The statement list for BODY will be empty if the conditional did
588 not declare anything. */
590 static void
591 simplify_loop_decl_cond (tree *cond_p, tree body)
593 tree cond, if_stmt;
595 if (!TREE_SIDE_EFFECTS (body))
596 return;
598 cond = *cond_p;
599 *cond_p = boolean_true_node;
601 if_stmt = begin_if_stmt ();
602 cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
603 finish_if_stmt_cond (cond, if_stmt);
604 finish_break_stmt ();
605 finish_then_clause (if_stmt);
606 finish_if_stmt (if_stmt);
609 /* Finish a goto-statement. */
611 tree
612 finish_goto_stmt (tree destination)
614 if (identifier_p (destination))
615 destination = lookup_label (destination);
617 /* We warn about unused labels with -Wunused. That means we have to
618 mark the used labels as used. */
619 if (TREE_CODE (destination) == LABEL_DECL)
620 TREE_USED (destination) = 1;
621 else
623 destination = mark_rvalue_use (destination);
624 if (!processing_template_decl)
626 destination = cp_convert (ptr_type_node, destination,
627 tf_warning_or_error);
628 if (error_operand_p (destination))
629 return NULL_TREE;
630 destination
631 = fold_build_cleanup_point_expr (TREE_TYPE (destination),
632 destination);
636 check_goto (destination);
638 return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
641 /* COND is the condition-expression for an if, while, etc.,
642 statement. Convert it to a boolean value, if appropriate.
643 In addition, verify sequence points if -Wsequence-point is enabled. */
645 static tree
646 maybe_convert_cond (tree cond)
648 /* Empty conditions remain empty. */
649 if (!cond)
650 return NULL_TREE;
652 /* Wait until we instantiate templates before doing conversion. */
653 if (processing_template_decl)
654 return cond;
656 if (warn_sequence_point)
657 verify_sequence_points (cond);
659 /* Do the conversion. */
660 cond = convert_from_reference (cond);
662 if (TREE_CODE (cond) == MODIFY_EXPR
663 && !TREE_NO_WARNING (cond)
664 && warn_parentheses)
666 warning (OPT_Wparentheses,
667 "suggest parentheses around assignment used as truth value");
668 TREE_NO_WARNING (cond) = 1;
671 return condition_conversion (cond);
674 /* Finish an expression-statement, whose EXPRESSION is as indicated. */
676 tree
677 finish_expr_stmt (tree expr)
679 tree r = NULL_TREE;
681 if (expr != NULL_TREE)
683 if (!processing_template_decl)
685 if (warn_sequence_point)
686 verify_sequence_points (expr);
687 expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
689 else if (!type_dependent_expression_p (expr))
690 convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT,
691 tf_warning_or_error);
693 if (check_for_bare_parameter_packs (expr))
694 expr = error_mark_node;
696 /* Simplification of inner statement expressions, compound exprs,
697 etc can result in us already having an EXPR_STMT. */
698 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
700 if (TREE_CODE (expr) != EXPR_STMT)
701 expr = build_stmt (input_location, EXPR_STMT, expr);
702 expr = maybe_cleanup_point_expr_void (expr);
705 r = add_stmt (expr);
708 return r;
712 /* Begin an if-statement. Returns a newly created IF_STMT if
713 appropriate. */
715 tree
716 begin_if_stmt (void)
718 tree r, scope;
719 scope = do_pushlevel (sk_cond);
720 r = build_stmt (input_location, IF_STMT, NULL_TREE,
721 NULL_TREE, NULL_TREE, scope);
722 begin_cond (&IF_COND (r));
723 return r;
726 /* Process the COND of an if-statement, which may be given by
727 IF_STMT. */
729 void
730 finish_if_stmt_cond (tree cond, tree if_stmt)
732 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
733 add_stmt (if_stmt);
734 THEN_CLAUSE (if_stmt) = push_stmt_list ();
737 /* Finish the then-clause of an if-statement, which may be given by
738 IF_STMT. */
740 tree
741 finish_then_clause (tree if_stmt)
743 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
744 return if_stmt;
747 /* Begin the else-clause of an if-statement. */
749 void
750 begin_else_clause (tree if_stmt)
752 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
755 /* Finish the else-clause of an if-statement, which may be given by
756 IF_STMT. */
758 void
759 finish_else_clause (tree if_stmt)
761 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
764 /* Finish an if-statement. */
766 void
767 finish_if_stmt (tree if_stmt)
769 tree scope = IF_SCOPE (if_stmt);
770 IF_SCOPE (if_stmt) = NULL;
771 add_stmt (do_poplevel (scope));
774 /* Begin a while-statement. Returns a newly created WHILE_STMT if
775 appropriate. */
777 tree
778 begin_while_stmt (void)
780 tree r;
781 r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
782 add_stmt (r);
783 WHILE_BODY (r) = do_pushlevel (sk_block);
784 begin_cond (&WHILE_COND (r));
785 return r;
788 /* Process the COND of a while-statement, which may be given by
789 WHILE_STMT. */
791 void
792 finish_while_stmt_cond (tree cond, tree while_stmt, bool ivdep)
794 cond = maybe_convert_cond (cond);
795 finish_cond (&WHILE_COND (while_stmt), cond);
796 begin_maybe_infinite_loop (cond);
797 if (ivdep && cond != error_mark_node)
798 WHILE_COND (while_stmt) = build2 (ANNOTATE_EXPR,
799 TREE_TYPE (WHILE_COND (while_stmt)),
800 WHILE_COND (while_stmt),
801 build_int_cst (integer_type_node,
802 annot_expr_ivdep_kind));
803 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
806 /* Finish a while-statement, which may be given by WHILE_STMT. */
808 void
809 finish_while_stmt (tree while_stmt)
811 end_maybe_infinite_loop (boolean_true_node);
812 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
815 /* Begin a do-statement. Returns a newly created DO_STMT if
816 appropriate. */
818 tree
819 begin_do_stmt (void)
821 tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
822 begin_maybe_infinite_loop (boolean_true_node);
823 add_stmt (r);
824 DO_BODY (r) = push_stmt_list ();
825 return r;
828 /* Finish the body of a do-statement, which may be given by DO_STMT. */
830 void
831 finish_do_body (tree do_stmt)
833 tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
835 if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
836 body = STATEMENT_LIST_TAIL (body)->stmt;
838 if (IS_EMPTY_STMT (body))
839 warning (OPT_Wempty_body,
840 "suggest explicit braces around empty body in %<do%> statement");
843 /* Finish a do-statement, which may be given by DO_STMT, and whose
844 COND is as indicated. */
846 void
847 finish_do_stmt (tree cond, tree do_stmt, bool ivdep)
849 cond = maybe_convert_cond (cond);
850 end_maybe_infinite_loop (cond);
851 if (ivdep && cond != error_mark_node)
852 cond = build2 (ANNOTATE_EXPR, TREE_TYPE (cond), cond,
853 build_int_cst (integer_type_node, annot_expr_ivdep_kind));
854 DO_COND (do_stmt) = cond;
857 /* Finish a return-statement. The EXPRESSION returned, if any, is as
858 indicated. */
860 tree
861 finish_return_stmt (tree expr)
863 tree r;
864 bool no_warning;
866 expr = check_return_expr (expr, &no_warning);
868 if (error_operand_p (expr)
869 || (flag_openmp && !check_omp_return ()))
870 return error_mark_node;
871 if (!processing_template_decl)
873 if (warn_sequence_point)
874 verify_sequence_points (expr);
876 if (DECL_DESTRUCTOR_P (current_function_decl)
877 || (DECL_CONSTRUCTOR_P (current_function_decl)
878 && targetm.cxx.cdtor_returns_this ()))
880 /* Similarly, all destructors must run destructors for
881 base-classes before returning. So, all returns in a
882 destructor get sent to the DTOR_LABEL; finish_function emits
883 code to return a value there. */
884 return finish_goto_stmt (cdtor_label);
888 r = build_stmt (input_location, RETURN_EXPR, expr);
889 TREE_NO_WARNING (r) |= no_warning;
890 r = maybe_cleanup_point_expr_void (r);
891 r = add_stmt (r);
893 return r;
896 /* Begin the scope of a for-statement or a range-for-statement.
897 Both the returned trees are to be used in a call to
898 begin_for_stmt or begin_range_for_stmt. */
900 tree
901 begin_for_scope (tree *init)
903 tree scope = NULL_TREE;
904 if (flag_new_for_scope > 0)
905 scope = do_pushlevel (sk_for);
907 if (processing_template_decl)
908 *init = push_stmt_list ();
909 else
910 *init = NULL_TREE;
912 return scope;
915 /* Begin a for-statement. Returns a new FOR_STMT.
916 SCOPE and INIT should be the return of begin_for_scope,
917 or both NULL_TREE */
919 tree
920 begin_for_stmt (tree scope, tree init)
922 tree r;
924 r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
925 NULL_TREE, NULL_TREE, NULL_TREE);
927 if (scope == NULL_TREE)
929 gcc_assert (!init || !(flag_new_for_scope > 0));
930 if (!init)
931 scope = begin_for_scope (&init);
933 FOR_INIT_STMT (r) = init;
934 FOR_SCOPE (r) = scope;
936 return r;
939 /* Finish the for-init-statement of a for-statement, which may be
940 given by FOR_STMT. */
942 void
943 finish_for_init_stmt (tree for_stmt)
945 if (processing_template_decl)
946 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
947 add_stmt (for_stmt);
948 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
949 begin_cond (&FOR_COND (for_stmt));
952 /* Finish the COND of a for-statement, which may be given by
953 FOR_STMT. */
955 void
956 finish_for_cond (tree cond, tree for_stmt, bool ivdep)
958 cond = maybe_convert_cond (cond);
959 finish_cond (&FOR_COND (for_stmt), cond);
960 begin_maybe_infinite_loop (cond);
961 if (ivdep && cond != error_mark_node)
962 FOR_COND (for_stmt) = build2 (ANNOTATE_EXPR,
963 TREE_TYPE (FOR_COND (for_stmt)),
964 FOR_COND (for_stmt),
965 build_int_cst (integer_type_node,
966 annot_expr_ivdep_kind));
967 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
970 /* Finish the increment-EXPRESSION in a for-statement, which may be
971 given by FOR_STMT. */
973 void
974 finish_for_expr (tree expr, tree for_stmt)
976 if (!expr)
977 return;
978 /* If EXPR is an overloaded function, issue an error; there is no
979 context available to use to perform overload resolution. */
980 if (type_unknown_p (expr))
982 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
983 expr = error_mark_node;
985 if (!processing_template_decl)
987 if (warn_sequence_point)
988 verify_sequence_points (expr);
989 expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
990 tf_warning_or_error);
992 else if (!type_dependent_expression_p (expr))
993 convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
994 tf_warning_or_error);
995 expr = maybe_cleanup_point_expr_void (expr);
996 if (check_for_bare_parameter_packs (expr))
997 expr = error_mark_node;
998 FOR_EXPR (for_stmt) = expr;
1001 /* Finish the body of a for-statement, which may be given by
1002 FOR_STMT. The increment-EXPR for the loop must be
1003 provided.
1004 It can also finish RANGE_FOR_STMT. */
1006 void
1007 finish_for_stmt (tree for_stmt)
1009 end_maybe_infinite_loop (boolean_true_node);
1011 if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
1012 RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
1013 else
1014 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
1016 /* Pop the scope for the body of the loop. */
1017 if (flag_new_for_scope > 0)
1019 tree scope;
1020 tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT
1021 ? &RANGE_FOR_SCOPE (for_stmt)
1022 : &FOR_SCOPE (for_stmt));
1023 scope = *scope_ptr;
1024 *scope_ptr = NULL;
1025 add_stmt (do_poplevel (scope));
1029 /* Begin a range-for-statement. Returns a new RANGE_FOR_STMT.
1030 SCOPE and INIT should be the return of begin_for_scope,
1031 or both NULL_TREE .
1032 To finish it call finish_for_stmt(). */
1034 tree
1035 begin_range_for_stmt (tree scope, tree init)
1037 tree r;
1039 begin_maybe_infinite_loop (boolean_false_node);
1041 r = build_stmt (input_location, RANGE_FOR_STMT,
1042 NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
1044 if (scope == NULL_TREE)
1046 gcc_assert (!init || !(flag_new_for_scope > 0));
1047 if (!init)
1048 scope = begin_for_scope (&init);
1051 /* RANGE_FOR_STMTs do not use nor save the init tree, so we
1052 pop it now. */
1053 if (init)
1054 pop_stmt_list (init);
1055 RANGE_FOR_SCOPE (r) = scope;
1057 return r;
1060 /* Finish the head of a range-based for statement, which may
1061 be given by RANGE_FOR_STMT. DECL must be the declaration
1062 and EXPR must be the loop expression. */
1064 void
1065 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
1067 RANGE_FOR_DECL (range_for_stmt) = decl;
1068 RANGE_FOR_EXPR (range_for_stmt) = expr;
1069 add_stmt (range_for_stmt);
1070 RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
1073 /* Finish a break-statement. */
1075 tree
1076 finish_break_stmt (void)
1078 /* In switch statements break is sometimes stylistically used after
1079 a return statement. This can lead to spurious warnings about
1080 control reaching the end of a non-void function when it is
1081 inlined. Note that we are calling block_may_fallthru with
1082 language specific tree nodes; this works because
1083 block_may_fallthru returns true when given something it does not
1084 understand. */
1085 if (!block_may_fallthru (cur_stmt_list))
1086 return void_zero_node;
1087 return add_stmt (build_stmt (input_location, BREAK_STMT));
1090 /* Finish a continue-statement. */
1092 tree
1093 finish_continue_stmt (void)
1095 return add_stmt (build_stmt (input_location, CONTINUE_STMT));
1098 /* Begin a switch-statement. Returns a new SWITCH_STMT if
1099 appropriate. */
1101 tree
1102 begin_switch_stmt (void)
1104 tree r, scope;
1106 scope = do_pushlevel (sk_cond);
1107 r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE, scope);
1109 begin_cond (&SWITCH_STMT_COND (r));
1111 return r;
1114 /* Finish the cond of a switch-statement. */
1116 void
1117 finish_switch_cond (tree cond, tree switch_stmt)
1119 tree orig_type = NULL;
1120 if (!processing_template_decl)
1122 /* Convert the condition to an integer or enumeration type. */
1123 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
1124 if (cond == NULL_TREE)
1126 error ("switch quantity not an integer");
1127 cond = error_mark_node;
1129 orig_type = TREE_TYPE (cond);
1130 if (cond != error_mark_node)
1132 /* [stmt.switch]
1134 Integral promotions are performed. */
1135 cond = perform_integral_promotions (cond);
1136 cond = maybe_cleanup_point_expr (cond);
1139 if (check_for_bare_parameter_packs (cond))
1140 cond = error_mark_node;
1141 else if (!processing_template_decl && warn_sequence_point)
1142 verify_sequence_points (cond);
1144 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
1145 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
1146 add_stmt (switch_stmt);
1147 push_switch (switch_stmt);
1148 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1151 /* Finish the body of a switch-statement, which may be given by
1152 SWITCH_STMT. The COND to switch on is indicated. */
1154 void
1155 finish_switch_stmt (tree switch_stmt)
1157 tree scope;
1159 SWITCH_STMT_BODY (switch_stmt) =
1160 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1161 pop_switch ();
1163 scope = SWITCH_STMT_SCOPE (switch_stmt);
1164 SWITCH_STMT_SCOPE (switch_stmt) = NULL;
1165 add_stmt (do_poplevel (scope));
1168 /* Begin a try-block. Returns a newly-created TRY_BLOCK if
1169 appropriate. */
1171 tree
1172 begin_try_block (void)
1174 tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1175 add_stmt (r);
1176 TRY_STMTS (r) = push_stmt_list ();
1177 return r;
1180 /* Likewise, for a function-try-block. The block returned in
1181 *COMPOUND_STMT is an artificial outer scope, containing the
1182 function-try-block. */
1184 tree
1185 begin_function_try_block (tree *compound_stmt)
1187 tree r;
1188 /* This outer scope does not exist in the C++ standard, but we need
1189 a place to put __FUNCTION__ and similar variables. */
1190 *compound_stmt = begin_compound_stmt (0);
1191 r = begin_try_block ();
1192 FN_TRY_BLOCK_P (r) = 1;
1193 return r;
1196 /* Finish a try-block, which may be given by TRY_BLOCK. */
1198 void
1199 finish_try_block (tree try_block)
1201 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1202 TRY_HANDLERS (try_block) = push_stmt_list ();
1205 /* Finish the body of a cleanup try-block, which may be given by
1206 TRY_BLOCK. */
1208 void
1209 finish_cleanup_try_block (tree try_block)
1211 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1214 /* Finish an implicitly generated try-block, with a cleanup is given
1215 by CLEANUP. */
1217 void
1218 finish_cleanup (tree cleanup, tree try_block)
1220 TRY_HANDLERS (try_block) = cleanup;
1221 CLEANUP_P (try_block) = 1;
1224 /* Likewise, for a function-try-block. */
1226 void
1227 finish_function_try_block (tree try_block)
1229 finish_try_block (try_block);
1230 /* FIXME : something queer about CTOR_INITIALIZER somehow following
1231 the try block, but moving it inside. */
1232 in_function_try_handler = 1;
1235 /* Finish a handler-sequence for a try-block, which may be given by
1236 TRY_BLOCK. */
1238 void
1239 finish_handler_sequence (tree try_block)
1241 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1242 check_handlers (TRY_HANDLERS (try_block));
1245 /* Finish the handler-seq for a function-try-block, given by
1246 TRY_BLOCK. COMPOUND_STMT is the outer block created by
1247 begin_function_try_block. */
1249 void
1250 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1252 in_function_try_handler = 0;
1253 finish_handler_sequence (try_block);
1254 finish_compound_stmt (compound_stmt);
1257 /* Begin a handler. Returns a HANDLER if appropriate. */
1259 tree
1260 begin_handler (void)
1262 tree r;
1264 r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1265 add_stmt (r);
1267 /* Create a binding level for the eh_info and the exception object
1268 cleanup. */
1269 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1271 return r;
1274 /* Finish the handler-parameters for a handler, which may be given by
1275 HANDLER. DECL is the declaration for the catch parameter, or NULL
1276 if this is a `catch (...)' clause. */
1278 void
1279 finish_handler_parms (tree decl, tree handler)
1281 tree type = NULL_TREE;
1282 if (processing_template_decl)
1284 if (decl)
1286 decl = pushdecl (decl);
1287 decl = push_template_decl (decl);
1288 HANDLER_PARMS (handler) = decl;
1289 type = TREE_TYPE (decl);
1292 else
1293 type = expand_start_catch_block (decl);
1294 HANDLER_TYPE (handler) = type;
1297 /* Finish a handler, which may be given by HANDLER. The BLOCKs are
1298 the return value from the matching call to finish_handler_parms. */
1300 void
1301 finish_handler (tree handler)
1303 if (!processing_template_decl)
1304 expand_end_catch_block ();
1305 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1308 /* Begin a compound statement. FLAGS contains some bits that control the
1309 behavior and context. If BCS_NO_SCOPE is set, the compound statement
1310 does not define a scope. If BCS_FN_BODY is set, this is the outermost
1311 block of a function. If BCS_TRY_BLOCK is set, this is the block
1312 created on behalf of a TRY statement. Returns a token to be passed to
1313 finish_compound_stmt. */
1315 tree
1316 begin_compound_stmt (unsigned int flags)
1318 tree r;
1320 if (flags & BCS_NO_SCOPE)
1322 r = push_stmt_list ();
1323 STATEMENT_LIST_NO_SCOPE (r) = 1;
1325 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1326 But, if it's a statement-expression with a scopeless block, there's
1327 nothing to keep, and we don't want to accidentally keep a block
1328 *inside* the scopeless block. */
1329 keep_next_level (false);
1331 else
1332 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1334 /* When processing a template, we need to remember where the braces were,
1335 so that we can set up identical scopes when instantiating the template
1336 later. BIND_EXPR is a handy candidate for this.
1337 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1338 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1339 processing templates. */
1340 if (processing_template_decl)
1342 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1343 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1344 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1345 TREE_SIDE_EFFECTS (r) = 1;
1348 return r;
1351 /* Finish a compound-statement, which is given by STMT. */
1353 void
1354 finish_compound_stmt (tree stmt)
1356 if (TREE_CODE (stmt) == BIND_EXPR)
1358 tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1359 /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1360 discard the BIND_EXPR so it can be merged with the containing
1361 STATEMENT_LIST. */
1362 if (TREE_CODE (body) == STATEMENT_LIST
1363 && STATEMENT_LIST_HEAD (body) == NULL
1364 && !BIND_EXPR_BODY_BLOCK (stmt)
1365 && !BIND_EXPR_TRY_BLOCK (stmt))
1366 stmt = body;
1367 else
1368 BIND_EXPR_BODY (stmt) = body;
1370 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1371 stmt = pop_stmt_list (stmt);
1372 else
1374 /* Destroy any ObjC "super" receivers that may have been
1375 created. */
1376 objc_clear_super_receiver ();
1378 stmt = do_poplevel (stmt);
1381 /* ??? See c_end_compound_stmt wrt statement expressions. */
1382 add_stmt (stmt);
1385 /* Finish an asm-statement, whose components are a STRING, some
1386 OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1387 LABELS. Also note whether the asm-statement should be
1388 considered volatile. */
1390 tree
1391 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1392 tree input_operands, tree clobbers, tree labels)
1394 tree r;
1395 tree t;
1396 int ninputs = list_length (input_operands);
1397 int noutputs = list_length (output_operands);
1399 if (!processing_template_decl)
1401 const char *constraint;
1402 const char **oconstraints;
1403 bool allows_mem, allows_reg, is_inout;
1404 tree operand;
1405 int i;
1407 oconstraints = XALLOCAVEC (const char *, noutputs);
1409 string = resolve_asm_operand_names (string, output_operands,
1410 input_operands, labels);
1412 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1414 operand = TREE_VALUE (t);
1416 /* ??? Really, this should not be here. Users should be using a
1417 proper lvalue, dammit. But there's a long history of using
1418 casts in the output operands. In cases like longlong.h, this
1419 becomes a primitive form of typechecking -- if the cast can be
1420 removed, then the output operand had a type of the proper width;
1421 otherwise we'll get an error. Gross, but ... */
1422 STRIP_NOPS (operand);
1424 operand = mark_lvalue_use (operand);
1426 if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1427 operand = error_mark_node;
1429 if (operand != error_mark_node
1430 && (TREE_READONLY (operand)
1431 || CP_TYPE_CONST_P (TREE_TYPE (operand))
1432 /* Functions are not modifiable, even though they are
1433 lvalues. */
1434 || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1435 || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1436 /* If it's an aggregate and any field is const, then it is
1437 effectively const. */
1438 || (CLASS_TYPE_P (TREE_TYPE (operand))
1439 && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1440 cxx_readonly_error (operand, lv_asm);
1442 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1443 oconstraints[i] = constraint;
1445 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1446 &allows_mem, &allows_reg, &is_inout))
1448 /* If the operand is going to end up in memory,
1449 mark it addressable. */
1450 if (!allows_reg && !cxx_mark_addressable (operand))
1451 operand = error_mark_node;
1453 else
1454 operand = error_mark_node;
1456 TREE_VALUE (t) = operand;
1459 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1461 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1462 bool constraint_parsed
1463 = parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1464 oconstraints, &allows_mem, &allows_reg);
1465 /* If the operand is going to end up in memory, don't call
1466 decay_conversion. */
1467 if (constraint_parsed && !allows_reg && allows_mem)
1468 operand = mark_lvalue_use (TREE_VALUE (t));
1469 else
1470 operand = decay_conversion (TREE_VALUE (t), tf_warning_or_error);
1472 /* If the type of the operand hasn't been determined (e.g.,
1473 because it involves an overloaded function), then issue
1474 an error message. There's no context available to
1475 resolve the overloading. */
1476 if (TREE_TYPE (operand) == unknown_type_node)
1478 error ("type of asm operand %qE could not be determined",
1479 TREE_VALUE (t));
1480 operand = error_mark_node;
1483 if (constraint_parsed)
1485 /* If the operand is going to end up in memory,
1486 mark it addressable. */
1487 if (!allows_reg && allows_mem)
1489 /* Strip the nops as we allow this case. FIXME, this really
1490 should be rejected or made deprecated. */
1491 STRIP_NOPS (operand);
1492 if (!cxx_mark_addressable (operand))
1493 operand = error_mark_node;
1495 else if (!allows_reg && !allows_mem)
1497 /* If constraint allows neither register nor memory,
1498 try harder to get a constant. */
1499 tree constop = maybe_constant_value (operand);
1500 if (TREE_CONSTANT (constop))
1501 operand = constop;
1504 else
1505 operand = error_mark_node;
1507 TREE_VALUE (t) = operand;
1511 r = build_stmt (input_location, ASM_EXPR, string,
1512 output_operands, input_operands,
1513 clobbers, labels);
1514 ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1515 r = maybe_cleanup_point_expr_void (r);
1516 return add_stmt (r);
1519 /* Finish a label with the indicated NAME. Returns the new label. */
1521 tree
1522 finish_label_stmt (tree name)
1524 tree decl = define_label (input_location, name);
1526 if (decl == error_mark_node)
1527 return error_mark_node;
1529 add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1531 return decl;
1534 /* Finish a series of declarations for local labels. G++ allows users
1535 to declare "local" labels, i.e., labels with scope. This extension
1536 is useful when writing code involving statement-expressions. */
1538 void
1539 finish_label_decl (tree name)
1541 if (!at_function_scope_p ())
1543 error ("__label__ declarations are only allowed in function scopes");
1544 return;
1547 add_decl_expr (declare_local_label (name));
1550 /* When DECL goes out of scope, make sure that CLEANUP is executed. */
1552 void
1553 finish_decl_cleanup (tree decl, tree cleanup)
1555 push_cleanup (decl, cleanup, false);
1558 /* If the current scope exits with an exception, run CLEANUP. */
1560 void
1561 finish_eh_cleanup (tree cleanup)
1563 push_cleanup (NULL, cleanup, true);
1566 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1567 order they were written by the user. Each node is as for
1568 emit_mem_initializers. */
1570 void
1571 finish_mem_initializers (tree mem_inits)
1573 /* Reorder the MEM_INITS so that they are in the order they appeared
1574 in the source program. */
1575 mem_inits = nreverse (mem_inits);
1577 if (processing_template_decl)
1579 tree mem;
1581 for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1583 /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1584 check for bare parameter packs in the TREE_VALUE, because
1585 any parameter packs in the TREE_VALUE have already been
1586 bound as part of the TREE_PURPOSE. See
1587 make_pack_expansion for more information. */
1588 if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1589 && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1590 TREE_VALUE (mem) = error_mark_node;
1593 add_stmt (build_min_nt_loc (UNKNOWN_LOCATION,
1594 CTOR_INITIALIZER, mem_inits));
1596 else
1597 emit_mem_initializers (mem_inits);
1600 /* Obfuscate EXPR if it looks like an id-expression or member access so
1601 that the call to finish_decltype in do_auto_deduction will give the
1602 right result. */
1604 tree
1605 force_paren_expr (tree expr)
1607 /* This is only needed for decltype(auto) in C++14. */
1608 if (cxx_dialect < cxx1y)
1609 return expr;
1611 /* If we're in unevaluated context, we can't be deducing a
1612 return/initializer type, so we don't need to mess with this. */
1613 if (cp_unevaluated_operand)
1614 return expr;
1616 if (!DECL_P (expr) && TREE_CODE (expr) != COMPONENT_REF
1617 && TREE_CODE (expr) != SCOPE_REF)
1618 return expr;
1620 if (TREE_CODE (expr) == COMPONENT_REF)
1621 REF_PARENTHESIZED_P (expr) = true;
1622 else if (type_dependent_expression_p (expr))
1623 expr = build1 (PAREN_EXPR, TREE_TYPE (expr), expr);
1624 else
1626 cp_lvalue_kind kind = lvalue_kind (expr);
1627 if ((kind & ~clk_class) != clk_none)
1629 tree type = unlowered_expr_type (expr);
1630 bool rval = !!(kind & clk_rvalueref);
1631 type = cp_build_reference_type (type, rval);
1632 expr = build_static_cast (type, expr, tf_error);
1633 if (expr != error_mark_node)
1634 REF_PARENTHESIZED_P (expr) = true;
1638 return expr;
1641 /* Finish a parenthesized expression EXPR. */
1643 tree
1644 finish_parenthesized_expr (tree expr)
1646 if (EXPR_P (expr))
1647 /* This inhibits warnings in c_common_truthvalue_conversion. */
1648 TREE_NO_WARNING (expr) = 1;
1650 if (TREE_CODE (expr) == OFFSET_REF
1651 || TREE_CODE (expr) == SCOPE_REF)
1652 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1653 enclosed in parentheses. */
1654 PTRMEM_OK_P (expr) = 0;
1656 if (TREE_CODE (expr) == STRING_CST)
1657 PAREN_STRING_LITERAL_P (expr) = 1;
1659 expr = force_paren_expr (expr);
1661 return expr;
1664 /* Finish a reference to a non-static data member (DECL) that is not
1665 preceded by `.' or `->'. */
1667 tree
1668 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1670 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1672 if (!object)
1674 tree scope = qualifying_scope;
1675 if (scope == NULL_TREE)
1676 scope = context_for_name_lookup (decl);
1677 object = maybe_dummy_object (scope, NULL);
1680 object = maybe_resolve_dummy (object);
1681 if (object == error_mark_node)
1682 return error_mark_node;
1684 /* DR 613: Can use non-static data members without an associated
1685 object in sizeof/decltype/alignof. */
1686 if (is_dummy_object (object) && cp_unevaluated_operand == 0
1687 && (!processing_template_decl || !current_class_ref))
1689 if (current_function_decl
1690 && DECL_STATIC_FUNCTION_P (current_function_decl))
1691 error ("invalid use of member %q+D in static member function", decl);
1692 else
1693 error ("invalid use of non-static data member %q+D", decl);
1694 error ("from this location");
1696 return error_mark_node;
1699 if (current_class_ptr)
1700 TREE_USED (current_class_ptr) = 1;
1701 if (processing_template_decl && !qualifying_scope)
1703 tree type = TREE_TYPE (decl);
1705 if (TREE_CODE (type) == REFERENCE_TYPE)
1706 /* Quals on the object don't matter. */;
1707 else if (PACK_EXPANSION_P (type))
1708 /* Don't bother trying to represent this. */
1709 type = NULL_TREE;
1710 else
1712 /* Set the cv qualifiers. */
1713 int quals = cp_type_quals (TREE_TYPE (object));
1715 if (DECL_MUTABLE_P (decl))
1716 quals &= ~TYPE_QUAL_CONST;
1718 quals |= cp_type_quals (TREE_TYPE (decl));
1719 type = cp_build_qualified_type (type, quals);
1722 return (convert_from_reference
1723 (build_min (COMPONENT_REF, type, object, decl, NULL_TREE)));
1725 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1726 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1727 for now. */
1728 else if (processing_template_decl)
1729 return build_qualified_name (TREE_TYPE (decl),
1730 qualifying_scope,
1731 decl,
1732 /*template_p=*/false);
1733 else
1735 tree access_type = TREE_TYPE (object);
1737 perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1738 decl, tf_warning_or_error);
1740 /* If the data member was named `C::M', convert `*this' to `C'
1741 first. */
1742 if (qualifying_scope)
1744 tree binfo = NULL_TREE;
1745 object = build_scoped_ref (object, qualifying_scope,
1746 &binfo);
1749 return build_class_member_access_expr (object, decl,
1750 /*access_path=*/NULL_TREE,
1751 /*preserve_reference=*/false,
1752 tf_warning_or_error);
1756 /* If we are currently parsing a template and we encountered a typedef
1757 TYPEDEF_DECL that is being accessed though CONTEXT, this function
1758 adds the typedef to a list tied to the current template.
1759 At template instantiation time, that list is walked and access check
1760 performed for each typedef.
1761 LOCATION is the location of the usage point of TYPEDEF_DECL. */
1763 void
1764 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1765 tree context,
1766 location_t location)
1768 tree template_info = NULL;
1769 tree cs = current_scope ();
1771 if (!is_typedef_decl (typedef_decl)
1772 || !context
1773 || !CLASS_TYPE_P (context)
1774 || !cs)
1775 return;
1777 if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1778 template_info = get_template_info (cs);
1780 if (template_info
1781 && TI_TEMPLATE (template_info)
1782 && !currently_open_class (context))
1783 append_type_to_template_for_access_check (cs, typedef_decl,
1784 context, location);
1787 /* DECL was the declaration to which a qualified-id resolved. Issue
1788 an error message if it is not accessible. If OBJECT_TYPE is
1789 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1790 type of `*x', or `x', respectively. If the DECL was named as
1791 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1793 void
1794 check_accessibility_of_qualified_id (tree decl,
1795 tree object_type,
1796 tree nested_name_specifier)
1798 tree scope;
1799 tree qualifying_type = NULL_TREE;
1801 /* If we are parsing a template declaration and if decl is a typedef,
1802 add it to a list tied to the template.
1803 At template instantiation time, that list will be walked and
1804 access check performed. */
1805 add_typedef_to_current_template_for_access_check (decl,
1806 nested_name_specifier
1807 ? nested_name_specifier
1808 : DECL_CONTEXT (decl),
1809 input_location);
1811 /* If we're not checking, return immediately. */
1812 if (deferred_access_no_check)
1813 return;
1815 /* Determine the SCOPE of DECL. */
1816 scope = context_for_name_lookup (decl);
1817 /* If the SCOPE is not a type, then DECL is not a member. */
1818 if (!TYPE_P (scope))
1819 return;
1820 /* Compute the scope through which DECL is being accessed. */
1821 if (object_type
1822 /* OBJECT_TYPE might not be a class type; consider:
1824 class A { typedef int I; };
1825 I *p;
1826 p->A::I::~I();
1828 In this case, we will have "A::I" as the DECL, but "I" as the
1829 OBJECT_TYPE. */
1830 && CLASS_TYPE_P (object_type)
1831 && DERIVED_FROM_P (scope, object_type))
1832 /* If we are processing a `->' or `.' expression, use the type of the
1833 left-hand side. */
1834 qualifying_type = object_type;
1835 else if (nested_name_specifier)
1837 /* If the reference is to a non-static member of the
1838 current class, treat it as if it were referenced through
1839 `this'. */
1840 if (DECL_NONSTATIC_MEMBER_P (decl)
1841 && current_class_ptr
1842 && DERIVED_FROM_P (scope, current_class_type))
1843 qualifying_type = current_class_type;
1844 /* Otherwise, use the type indicated by the
1845 nested-name-specifier. */
1846 else
1847 qualifying_type = nested_name_specifier;
1849 else
1850 /* Otherwise, the name must be from the current class or one of
1851 its bases. */
1852 qualifying_type = currently_open_derived_class (scope);
1854 if (qualifying_type
1855 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1856 or similar in a default argument value. */
1857 && CLASS_TYPE_P (qualifying_type)
1858 && !dependent_type_p (qualifying_type))
1859 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1860 decl, tf_warning_or_error);
1863 /* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1864 class named to the left of the "::" operator. DONE is true if this
1865 expression is a complete postfix-expression; it is false if this
1866 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
1867 iff this expression is the operand of '&'. TEMPLATE_P is true iff
1868 the qualified-id was of the form "A::template B". TEMPLATE_ARG_P
1869 is true iff this qualified name appears as a template argument. */
1871 tree
1872 finish_qualified_id_expr (tree qualifying_class,
1873 tree expr,
1874 bool done,
1875 bool address_p,
1876 bool template_p,
1877 bool template_arg_p,
1878 tsubst_flags_t complain)
1880 gcc_assert (TYPE_P (qualifying_class));
1882 if (error_operand_p (expr))
1883 return error_mark_node;
1885 if ((DECL_P (expr) || BASELINK_P (expr))
1886 && !mark_used (expr, complain))
1887 return error_mark_node;
1889 if (template_p)
1890 check_template_keyword (expr);
1892 /* If EXPR occurs as the operand of '&', use special handling that
1893 permits a pointer-to-member. */
1894 if (address_p && done)
1896 if (TREE_CODE (expr) == SCOPE_REF)
1897 expr = TREE_OPERAND (expr, 1);
1898 expr = build_offset_ref (qualifying_class, expr,
1899 /*address_p=*/true, complain);
1900 return expr;
1903 /* No need to check access within an enum. */
1904 if (TREE_CODE (qualifying_class) == ENUMERAL_TYPE)
1905 return expr;
1907 /* Within the scope of a class, turn references to non-static
1908 members into expression of the form "this->...". */
1909 if (template_arg_p)
1910 /* But, within a template argument, we do not want make the
1911 transformation, as there is no "this" pointer. */
1913 else if (TREE_CODE (expr) == FIELD_DECL)
1915 push_deferring_access_checks (dk_no_check);
1916 expr = finish_non_static_data_member (expr, NULL_TREE,
1917 qualifying_class);
1918 pop_deferring_access_checks ();
1920 else if (BASELINK_P (expr) && !processing_template_decl)
1922 /* See if any of the functions are non-static members. */
1923 /* If so, the expression may be relative to 'this'. */
1924 if (!shared_member_p (expr)
1925 && current_class_ptr
1926 && DERIVED_FROM_P (qualifying_class,
1927 current_nonlambda_class_type ()))
1928 expr = (build_class_member_access_expr
1929 (maybe_dummy_object (qualifying_class, NULL),
1930 expr,
1931 BASELINK_ACCESS_BINFO (expr),
1932 /*preserve_reference=*/false,
1933 complain));
1934 else if (done)
1935 /* The expression is a qualified name whose address is not
1936 being taken. */
1937 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false,
1938 complain);
1940 else if (BASELINK_P (expr))
1942 else
1944 /* In a template, return a SCOPE_REF for most qualified-ids
1945 so that we can check access at instantiation time. But if
1946 we're looking at a member of the current instantiation, we
1947 know we have access and building up the SCOPE_REF confuses
1948 non-type template argument handling. */
1949 if (processing_template_decl
1950 && !currently_open_class (qualifying_class))
1951 expr = build_qualified_name (TREE_TYPE (expr),
1952 qualifying_class, expr,
1953 template_p);
1955 expr = convert_from_reference (expr);
1958 return expr;
1961 /* Begin a statement-expression. The value returned must be passed to
1962 finish_stmt_expr. */
1964 tree
1965 begin_stmt_expr (void)
1967 return push_stmt_list ();
1970 /* Process the final expression of a statement expression. EXPR can be
1971 NULL, if the final expression is empty. Return a STATEMENT_LIST
1972 containing all the statements in the statement-expression, or
1973 ERROR_MARK_NODE if there was an error. */
1975 tree
1976 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1978 if (error_operand_p (expr))
1980 /* The type of the statement-expression is the type of the last
1981 expression. */
1982 TREE_TYPE (stmt_expr) = error_mark_node;
1983 return error_mark_node;
1986 /* If the last statement does not have "void" type, then the value
1987 of the last statement is the value of the entire expression. */
1988 if (expr)
1990 tree type = TREE_TYPE (expr);
1992 if (processing_template_decl)
1994 expr = build_stmt (input_location, EXPR_STMT, expr);
1995 expr = add_stmt (expr);
1996 /* Mark the last statement so that we can recognize it as such at
1997 template-instantiation time. */
1998 EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
2000 else if (VOID_TYPE_P (type))
2002 /* Just treat this like an ordinary statement. */
2003 expr = finish_expr_stmt (expr);
2005 else
2007 /* It actually has a value we need to deal with. First, force it
2008 to be an rvalue so that we won't need to build up a copy
2009 constructor call later when we try to assign it to something. */
2010 expr = force_rvalue (expr, tf_warning_or_error);
2011 if (error_operand_p (expr))
2012 return error_mark_node;
2014 /* Update for array-to-pointer decay. */
2015 type = TREE_TYPE (expr);
2017 /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
2018 normal statement, but don't convert to void or actually add
2019 the EXPR_STMT. */
2020 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
2021 expr = maybe_cleanup_point_expr (expr);
2022 add_stmt (expr);
2025 /* The type of the statement-expression is the type of the last
2026 expression. */
2027 TREE_TYPE (stmt_expr) = type;
2030 return stmt_expr;
2033 /* Finish a statement-expression. EXPR should be the value returned
2034 by the previous begin_stmt_expr. Returns an expression
2035 representing the statement-expression. */
2037 tree
2038 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
2040 tree type;
2041 tree result;
2043 if (error_operand_p (stmt_expr))
2045 pop_stmt_list (stmt_expr);
2046 return error_mark_node;
2049 gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
2051 type = TREE_TYPE (stmt_expr);
2052 result = pop_stmt_list (stmt_expr);
2053 TREE_TYPE (result) = type;
2055 if (processing_template_decl)
2057 result = build_min (STMT_EXPR, type, result);
2058 TREE_SIDE_EFFECTS (result) = 1;
2059 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
2061 else if (CLASS_TYPE_P (type))
2063 /* Wrap the statement-expression in a TARGET_EXPR so that the
2064 temporary object created by the final expression is destroyed at
2065 the end of the full-expression containing the
2066 statement-expression. */
2067 result = force_target_expr (type, result, tf_warning_or_error);
2070 return result;
2073 /* Returns the expression which provides the value of STMT_EXPR. */
2075 tree
2076 stmt_expr_value_expr (tree stmt_expr)
2078 tree t = STMT_EXPR_STMT (stmt_expr);
2080 if (TREE_CODE (t) == BIND_EXPR)
2081 t = BIND_EXPR_BODY (t);
2083 if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
2084 t = STATEMENT_LIST_TAIL (t)->stmt;
2086 if (TREE_CODE (t) == EXPR_STMT)
2087 t = EXPR_STMT_EXPR (t);
2089 return t;
2092 /* Return TRUE iff EXPR_STMT is an empty list of
2093 expression statements. */
2095 bool
2096 empty_expr_stmt_p (tree expr_stmt)
2098 tree body = NULL_TREE;
2100 if (expr_stmt == void_zero_node)
2101 return true;
2103 if (expr_stmt)
2105 if (TREE_CODE (expr_stmt) == EXPR_STMT)
2106 body = EXPR_STMT_EXPR (expr_stmt);
2107 else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
2108 body = expr_stmt;
2111 if (body)
2113 if (TREE_CODE (body) == STATEMENT_LIST)
2114 return tsi_end_p (tsi_start (body));
2115 else
2116 return empty_expr_stmt_p (body);
2118 return false;
2121 /* Perform Koenig lookup. FN is the postfix-expression representing
2122 the function (or functions) to call; ARGS are the arguments to the
2123 call. Returns the functions to be considered by overload resolution. */
2125 tree
2126 perform_koenig_lookup (tree fn, vec<tree, va_gc> *args,
2127 tsubst_flags_t complain)
2129 tree identifier = NULL_TREE;
2130 tree functions = NULL_TREE;
2131 tree tmpl_args = NULL_TREE;
2132 bool template_id = false;
2134 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2136 /* Use a separate flag to handle null args. */
2137 template_id = true;
2138 tmpl_args = TREE_OPERAND (fn, 1);
2139 fn = TREE_OPERAND (fn, 0);
2142 /* Find the name of the overloaded function. */
2143 if (identifier_p (fn))
2144 identifier = fn;
2145 else if (is_overloaded_fn (fn))
2147 functions = fn;
2148 identifier = DECL_NAME (get_first_fn (functions));
2150 else if (DECL_P (fn))
2152 functions = fn;
2153 identifier = DECL_NAME (fn);
2156 /* A call to a namespace-scope function using an unqualified name.
2158 Do Koenig lookup -- unless any of the arguments are
2159 type-dependent. */
2160 if (!any_type_dependent_arguments_p (args)
2161 && !any_dependent_template_arguments_p (tmpl_args))
2163 fn = lookup_arg_dependent (identifier, functions, args);
2164 if (!fn)
2166 /* The unqualified name could not be resolved. */
2167 if (complain)
2168 fn = unqualified_fn_lookup_error (identifier);
2169 else
2170 fn = identifier;
2174 if (fn && template_id)
2175 fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
2177 return fn;
2180 /* Generate an expression for `FN (ARGS)'. This may change the
2181 contents of ARGS.
2183 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
2184 as a virtual call, even if FN is virtual. (This flag is set when
2185 encountering an expression where the function name is explicitly
2186 qualified. For example a call to `X::f' never generates a virtual
2187 call.)
2189 Returns code for the call. */
2191 tree
2192 finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual,
2193 bool koenig_p, tsubst_flags_t complain)
2195 tree result;
2196 tree orig_fn;
2197 vec<tree, va_gc> *orig_args = NULL;
2199 if (fn == error_mark_node)
2200 return error_mark_node;
2202 gcc_assert (!TYPE_P (fn));
2204 orig_fn = fn;
2206 if (processing_template_decl)
2208 /* If the call expression is dependent, build a CALL_EXPR node
2209 with no type; type_dependent_expression_p recognizes
2210 expressions with no type as being dependent. */
2211 if (type_dependent_expression_p (fn)
2212 || any_type_dependent_arguments_p (*args)
2213 /* For a non-static member function that doesn't have an
2214 explicit object argument, we need to specifically
2215 test the type dependency of the "this" pointer because it
2216 is not included in *ARGS even though it is considered to
2217 be part of the list of arguments. Note that this is
2218 related to CWG issues 515 and 1005. */
2219 || (TREE_CODE (fn) != COMPONENT_REF
2220 && non_static_member_function_p (fn)
2221 && current_class_ref
2222 && type_dependent_expression_p (current_class_ref)))
2224 result = build_nt_call_vec (fn, *args);
2225 SET_EXPR_LOCATION (result, EXPR_LOC_OR_LOC (fn, input_location));
2226 KOENIG_LOOKUP_P (result) = koenig_p;
2227 if (cfun)
2231 tree fndecl = OVL_CURRENT (fn);
2232 if (TREE_CODE (fndecl) != FUNCTION_DECL
2233 || !TREE_THIS_VOLATILE (fndecl))
2234 break;
2235 fn = OVL_NEXT (fn);
2237 while (fn);
2238 if (!fn)
2239 current_function_returns_abnormally = 1;
2241 return result;
2243 orig_args = make_tree_vector_copy (*args);
2244 if (!BASELINK_P (fn)
2245 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
2246 && TREE_TYPE (fn) != unknown_type_node)
2247 fn = build_non_dependent_expr (fn);
2248 make_args_non_dependent (*args);
2251 if (TREE_CODE (fn) == COMPONENT_REF)
2253 tree member = TREE_OPERAND (fn, 1);
2254 if (BASELINK_P (member))
2256 tree object = TREE_OPERAND (fn, 0);
2257 return build_new_method_call (object, member,
2258 args, NULL_TREE,
2259 (disallow_virtual
2260 ? LOOKUP_NORMAL | LOOKUP_NONVIRTUAL
2261 : LOOKUP_NORMAL),
2262 /*fn_p=*/NULL,
2263 complain);
2267 /* Per 13.3.1.1, '(&f)(...)' is the same as '(f)(...)'. */
2268 if (TREE_CODE (fn) == ADDR_EXPR
2269 && TREE_CODE (TREE_OPERAND (fn, 0)) == OVERLOAD)
2270 fn = TREE_OPERAND (fn, 0);
2272 if (is_overloaded_fn (fn))
2273 fn = baselink_for_fns (fn);
2275 result = NULL_TREE;
2276 if (BASELINK_P (fn))
2278 tree object;
2280 /* A call to a member function. From [over.call.func]:
2282 If the keyword this is in scope and refers to the class of
2283 that member function, or a derived class thereof, then the
2284 function call is transformed into a qualified function call
2285 using (*this) as the postfix-expression to the left of the
2286 . operator.... [Otherwise] a contrived object of type T
2287 becomes the implied object argument.
2289 In this situation:
2291 struct A { void f(); };
2292 struct B : public A {};
2293 struct C : public A { void g() { B::f(); }};
2295 "the class of that member function" refers to `A'. But 11.2
2296 [class.access.base] says that we need to convert 'this' to B* as
2297 part of the access, so we pass 'B' to maybe_dummy_object. */
2299 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2300 NULL);
2302 if (processing_template_decl)
2304 if (type_dependent_expression_p (object))
2306 tree ret = build_nt_call_vec (orig_fn, orig_args);
2307 release_tree_vector (orig_args);
2308 return ret;
2310 object = build_non_dependent_expr (object);
2313 result = build_new_method_call (object, fn, args, NULL_TREE,
2314 (disallow_virtual
2315 ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
2316 : LOOKUP_NORMAL),
2317 /*fn_p=*/NULL,
2318 complain);
2320 else if (is_overloaded_fn (fn))
2322 /* If the function is an overloaded builtin, resolve it. */
2323 if (TREE_CODE (fn) == FUNCTION_DECL
2324 && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2325 || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2326 result = resolve_overloaded_builtin (input_location, fn, *args);
2328 if (!result)
2330 if (warn_sizeof_pointer_memaccess
2331 && !vec_safe_is_empty (*args)
2332 && !processing_template_decl)
2334 location_t sizeof_arg_loc[3];
2335 tree sizeof_arg[3];
2336 unsigned int i;
2337 for (i = 0; i < 3; i++)
2339 tree t;
2341 sizeof_arg_loc[i] = UNKNOWN_LOCATION;
2342 sizeof_arg[i] = NULL_TREE;
2343 if (i >= (*args)->length ())
2344 continue;
2345 t = (**args)[i];
2346 if (TREE_CODE (t) != SIZEOF_EXPR)
2347 continue;
2348 if (SIZEOF_EXPR_TYPE_P (t))
2349 sizeof_arg[i] = TREE_TYPE (TREE_OPERAND (t, 0));
2350 else
2351 sizeof_arg[i] = TREE_OPERAND (t, 0);
2352 sizeof_arg_loc[i] = EXPR_LOCATION (t);
2354 sizeof_pointer_memaccess_warning
2355 (sizeof_arg_loc, fn, *args,
2356 sizeof_arg, same_type_ignoring_top_level_qualifiers_p);
2359 /* A call to a namespace-scope function. */
2360 result = build_new_function_call (fn, args, koenig_p, complain);
2363 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2365 if (!vec_safe_is_empty (*args))
2366 error ("arguments to destructor are not allowed");
2367 /* Mark the pseudo-destructor call as having side-effects so
2368 that we do not issue warnings about its use. */
2369 result = build1 (NOP_EXPR,
2370 void_type_node,
2371 TREE_OPERAND (fn, 0));
2372 TREE_SIDE_EFFECTS (result) = 1;
2374 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2375 /* If the "function" is really an object of class type, it might
2376 have an overloaded `operator ()'. */
2377 result = build_op_call (fn, args, complain);
2379 if (!result)
2380 /* A call where the function is unknown. */
2381 result = cp_build_function_call_vec (fn, args, complain);
2383 if (processing_template_decl && result != error_mark_node)
2385 if (INDIRECT_REF_P (result))
2386 result = TREE_OPERAND (result, 0);
2387 result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2388 SET_EXPR_LOCATION (result, input_location);
2389 KOENIG_LOOKUP_P (result) = koenig_p;
2390 release_tree_vector (orig_args);
2391 result = convert_from_reference (result);
2394 if (koenig_p)
2396 /* Free garbage OVERLOADs from arg-dependent lookup. */
2397 tree next = NULL_TREE;
2398 for (fn = orig_fn;
2399 fn && TREE_CODE (fn) == OVERLOAD && OVL_ARG_DEPENDENT (fn);
2400 fn = next)
2402 if (processing_template_decl)
2403 /* In a template, we'll re-use them at instantiation time. */
2404 OVL_ARG_DEPENDENT (fn) = false;
2405 else
2407 next = OVL_CHAIN (fn);
2408 ggc_free (fn);
2413 return result;
2416 /* Finish a call to a postfix increment or decrement or EXPR. (Which
2417 is indicated by CODE, which should be POSTINCREMENT_EXPR or
2418 POSTDECREMENT_EXPR.) */
2420 tree
2421 finish_increment_expr (tree expr, enum tree_code code)
2423 return build_x_unary_op (input_location, code, expr, tf_warning_or_error);
2426 /* Finish a use of `this'. Returns an expression for `this'. */
2428 tree
2429 finish_this_expr (void)
2431 tree result;
2433 if (current_class_ptr)
2435 tree type = TREE_TYPE (current_class_ref);
2437 /* In a lambda expression, 'this' refers to the captured 'this'. */
2438 if (LAMBDA_TYPE_P (type))
2439 result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2440 else
2441 result = current_class_ptr;
2443 else if (current_function_decl
2444 && DECL_STATIC_FUNCTION_P (current_function_decl))
2446 error ("%<this%> is unavailable for static member functions");
2447 result = error_mark_node;
2449 else
2451 if (current_function_decl)
2452 error ("invalid use of %<this%> in non-member function");
2453 else
2454 error ("invalid use of %<this%> at top level");
2455 result = error_mark_node;
2458 /* The keyword 'this' is a prvalue expression. */
2459 result = rvalue (result);
2461 return result;
2464 /* Finish a pseudo-destructor expression. If SCOPE is NULL, the
2465 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2466 the TYPE for the type given. If SCOPE is non-NULL, the expression
2467 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
2469 tree
2470 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor,
2471 location_t loc)
2473 if (object == error_mark_node || destructor == error_mark_node)
2474 return error_mark_node;
2476 gcc_assert (TYPE_P (destructor));
2478 if (!processing_template_decl)
2480 if (scope == error_mark_node)
2482 error_at (loc, "invalid qualifying scope in pseudo-destructor name");
2483 return error_mark_node;
2485 if (is_auto (destructor))
2486 destructor = TREE_TYPE (object);
2487 if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2489 error_at (loc,
2490 "qualified type %qT does not match destructor name ~%qT",
2491 scope, destructor);
2492 return error_mark_node;
2496 /* [expr.pseudo] says both:
2498 The type designated by the pseudo-destructor-name shall be
2499 the same as the object type.
2501 and:
2503 The cv-unqualified versions of the object type and of the
2504 type designated by the pseudo-destructor-name shall be the
2505 same type.
2507 We implement the more generous second sentence, since that is
2508 what most other compilers do. */
2509 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2510 destructor))
2512 error_at (loc, "%qE is not of type %qT", object, destructor);
2513 return error_mark_node;
2517 return build3_loc (loc, PSEUDO_DTOR_EXPR, void_type_node, object,
2518 scope, destructor);
2521 /* Finish an expression of the form CODE EXPR. */
2523 tree
2524 finish_unary_op_expr (location_t loc, enum tree_code code, tree expr,
2525 tsubst_flags_t complain)
2527 tree result = build_x_unary_op (loc, code, expr, complain);
2528 if ((complain & tf_warning)
2529 && TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2530 overflow_warning (input_location, result);
2532 return result;
2535 /* Finish a compound-literal expression. TYPE is the type to which
2536 the CONSTRUCTOR in COMPOUND_LITERAL is being cast. */
2538 tree
2539 finish_compound_literal (tree type, tree compound_literal,
2540 tsubst_flags_t complain)
2542 if (type == error_mark_node)
2543 return error_mark_node;
2545 if (TREE_CODE (type) == REFERENCE_TYPE)
2547 compound_literal
2548 = finish_compound_literal (TREE_TYPE (type), compound_literal,
2549 complain);
2550 return cp_build_c_cast (type, compound_literal, complain);
2553 if (!TYPE_OBJ_P (type))
2555 if (complain & tf_error)
2556 error ("compound literal of non-object type %qT", type);
2557 return error_mark_node;
2560 if (processing_template_decl)
2562 TREE_TYPE (compound_literal) = type;
2563 /* Mark the expression as a compound literal. */
2564 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2565 return compound_literal;
2568 type = complete_type (type);
2570 if (TYPE_NON_AGGREGATE_CLASS (type))
2572 /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2573 everywhere that deals with function arguments would be a pain, so
2574 just wrap it in a TREE_LIST. The parser set a flag so we know
2575 that it came from T{} rather than T({}). */
2576 CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2577 compound_literal = build_tree_list (NULL_TREE, compound_literal);
2578 return build_functional_cast (type, compound_literal, complain);
2581 if (TREE_CODE (type) == ARRAY_TYPE
2582 && check_array_initializer (NULL_TREE, type, compound_literal))
2583 return error_mark_node;
2584 compound_literal = reshape_init (type, compound_literal, complain);
2585 if (SCALAR_TYPE_P (type)
2586 && !BRACE_ENCLOSED_INITIALIZER_P (compound_literal)
2587 && (complain & tf_warning_or_error))
2588 check_narrowing (type, compound_literal);
2589 if (TREE_CODE (type) == ARRAY_TYPE
2590 && TYPE_DOMAIN (type) == NULL_TREE)
2592 cp_complete_array_type_or_error (&type, compound_literal,
2593 false, complain);
2594 if (type == error_mark_node)
2595 return error_mark_node;
2597 compound_literal = digest_init (type, compound_literal, complain);
2598 if (TREE_CODE (compound_literal) == CONSTRUCTOR)
2599 TREE_HAS_CONSTRUCTOR (compound_literal) = true;
2600 /* Put static/constant array temporaries in static variables, but always
2601 represent class temporaries with TARGET_EXPR so we elide copies. */
2602 if ((!at_function_scope_p () || CP_TYPE_CONST_P (type))
2603 && TREE_CODE (type) == ARRAY_TYPE
2604 && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2605 && initializer_constant_valid_p (compound_literal, type))
2607 tree decl = create_temporary_var (type);
2608 DECL_INITIAL (decl) = compound_literal;
2609 TREE_STATIC (decl) = 1;
2610 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
2612 /* 5.19 says that a constant expression can include an
2613 lvalue-rvalue conversion applied to "a glvalue of literal type
2614 that refers to a non-volatile temporary object initialized
2615 with a constant expression". Rather than try to communicate
2616 that this VAR_DECL is a temporary, just mark it constexpr. */
2617 DECL_DECLARED_CONSTEXPR_P (decl) = true;
2618 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
2619 TREE_CONSTANT (decl) = true;
2621 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
2622 decl = pushdecl_top_level (decl);
2623 DECL_NAME (decl) = make_anon_name ();
2624 SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2625 /* Make sure the destructor is callable. */
2626 tree clean = cxx_maybe_build_cleanup (decl, complain);
2627 if (clean == error_mark_node)
2628 return error_mark_node;
2629 return decl;
2631 else
2632 return get_target_expr_sfinae (compound_literal, complain);
2635 /* Return the declaration for the function-name variable indicated by
2636 ID. */
2638 tree
2639 finish_fname (tree id)
2641 tree decl;
2643 decl = fname_decl (input_location, C_RID_CODE (id), id);
2644 if (processing_template_decl && current_function_decl
2645 && decl != error_mark_node)
2646 decl = DECL_NAME (decl);
2647 return decl;
2650 /* Finish a translation unit. */
2652 void
2653 finish_translation_unit (void)
2655 /* In case there were missing closebraces,
2656 get us back to the global binding level. */
2657 pop_everything ();
2658 while (current_namespace != global_namespace)
2659 pop_namespace ();
2661 /* Do file scope __FUNCTION__ et al. */
2662 finish_fname_decls ();
2665 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2666 Returns the parameter. */
2668 tree
2669 finish_template_type_parm (tree aggr, tree identifier)
2671 if (aggr != class_type_node)
2673 permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2674 aggr = class_type_node;
2677 return build_tree_list (aggr, identifier);
2680 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2681 Returns the parameter. */
2683 tree
2684 finish_template_template_parm (tree aggr, tree identifier)
2686 tree decl = build_decl (input_location,
2687 TYPE_DECL, identifier, NULL_TREE);
2688 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2689 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2690 DECL_TEMPLATE_RESULT (tmpl) = decl;
2691 DECL_ARTIFICIAL (decl) = 1;
2692 end_template_decl ();
2694 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2696 check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2697 /*is_primary=*/true, /*is_partial=*/false,
2698 /*is_friend=*/0);
2700 return finish_template_type_parm (aggr, tmpl);
2703 /* ARGUMENT is the default-argument value for a template template
2704 parameter. If ARGUMENT is invalid, issue error messages and return
2705 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2707 tree
2708 check_template_template_default_arg (tree argument)
2710 if (TREE_CODE (argument) != TEMPLATE_DECL
2711 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2712 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2714 if (TREE_CODE (argument) == TYPE_DECL)
2715 error ("invalid use of type %qT as a default value for a template "
2716 "template-parameter", TREE_TYPE (argument));
2717 else
2718 error ("invalid default argument for a template template parameter");
2719 return error_mark_node;
2722 return argument;
2725 /* Begin a class definition, as indicated by T. */
2727 tree
2728 begin_class_definition (tree t)
2730 if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2731 return error_mark_node;
2733 if (processing_template_parmlist)
2735 error ("definition of %q#T inside template parameter list", t);
2736 return error_mark_node;
2739 /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2740 are passed the same as decimal scalar types. */
2741 if (TREE_CODE (t) == RECORD_TYPE
2742 && !processing_template_decl)
2744 tree ns = TYPE_CONTEXT (t);
2745 if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2746 && DECL_CONTEXT (ns) == std_node
2747 && DECL_NAME (ns)
2748 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2750 const char *n = TYPE_NAME_STRING (t);
2751 if ((strcmp (n, "decimal32") == 0)
2752 || (strcmp (n, "decimal64") == 0)
2753 || (strcmp (n, "decimal128") == 0))
2754 TYPE_TRANSPARENT_AGGR (t) = 1;
2758 /* A non-implicit typename comes from code like:
2760 template <typename T> struct A {
2761 template <typename U> struct A<T>::B ...
2763 This is erroneous. */
2764 else if (TREE_CODE (t) == TYPENAME_TYPE)
2766 error ("invalid definition of qualified type %qT", t);
2767 t = error_mark_node;
2770 if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2772 t = make_class_type (RECORD_TYPE);
2773 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2776 if (TYPE_BEING_DEFINED (t))
2778 t = make_class_type (TREE_CODE (t));
2779 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2781 maybe_process_partial_specialization (t);
2782 pushclass (t);
2783 TYPE_BEING_DEFINED (t) = 1;
2784 class_binding_level->defining_class_p = 1;
2786 if (flag_pack_struct)
2788 tree v;
2789 TYPE_PACKED (t) = 1;
2790 /* Even though the type is being defined for the first time
2791 here, there might have been a forward declaration, so there
2792 might be cv-qualified variants of T. */
2793 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2794 TYPE_PACKED (v) = 1;
2796 /* Reset the interface data, at the earliest possible
2797 moment, as it might have been set via a class foo;
2798 before. */
2799 if (! TYPE_ANONYMOUS_P (t))
2801 struct c_fileinfo *finfo = \
2802 get_fileinfo (LOCATION_FILE (input_location));
2803 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2804 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2805 (t, finfo->interface_unknown);
2807 reset_specialization();
2809 /* Make a declaration for this class in its own scope. */
2810 build_self_reference ();
2812 return t;
2815 /* Finish the member declaration given by DECL. */
2817 void
2818 finish_member_declaration (tree decl)
2820 if (decl == error_mark_node || decl == NULL_TREE)
2821 return;
2823 if (decl == void_type_node)
2824 /* The COMPONENT was a friend, not a member, and so there's
2825 nothing for us to do. */
2826 return;
2828 /* We should see only one DECL at a time. */
2829 gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2831 /* Set up access control for DECL. */
2832 TREE_PRIVATE (decl)
2833 = (current_access_specifier == access_private_node);
2834 TREE_PROTECTED (decl)
2835 = (current_access_specifier == access_protected_node);
2836 if (TREE_CODE (decl) == TEMPLATE_DECL)
2838 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2839 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2842 /* Mark the DECL as a member of the current class, unless it's
2843 a member of an enumeration. */
2844 if (TREE_CODE (decl) != CONST_DECL)
2845 DECL_CONTEXT (decl) = current_class_type;
2847 /* Check for bare parameter packs in the member variable declaration. */
2848 if (TREE_CODE (decl) == FIELD_DECL)
2850 if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2851 TREE_TYPE (decl) = error_mark_node;
2852 if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2853 DECL_ATTRIBUTES (decl) = NULL_TREE;
2856 /* [dcl.link]
2858 A C language linkage is ignored for the names of class members
2859 and the member function type of class member functions. */
2860 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2861 SET_DECL_LANGUAGE (decl, lang_cplusplus);
2863 /* Put functions on the TYPE_METHODS list and everything else on the
2864 TYPE_FIELDS list. Note that these are built up in reverse order.
2865 We reverse them (to obtain declaration order) in finish_struct. */
2866 if (DECL_DECLARES_FUNCTION_P (decl))
2868 /* We also need to add this function to the
2869 CLASSTYPE_METHOD_VEC. */
2870 if (add_method (current_class_type, decl, NULL_TREE))
2872 DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2873 TYPE_METHODS (current_class_type) = decl;
2875 maybe_add_class_template_decl_list (current_class_type, decl,
2876 /*friend_p=*/0);
2879 /* Enter the DECL into the scope of the class, if the class
2880 isn't a closure (whose fields are supposed to be unnamed). */
2881 else if (CLASSTYPE_LAMBDA_EXPR (current_class_type)
2882 || pushdecl_class_level (decl))
2884 if (TREE_CODE (decl) == USING_DECL)
2886 /* For now, ignore class-scope USING_DECLS, so that
2887 debugging backends do not see them. */
2888 DECL_IGNORED_P (decl) = 1;
2891 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2892 go at the beginning. The reason is that lookup_field_1
2893 searches the list in order, and we want a field name to
2894 override a type name so that the "struct stat hack" will
2895 work. In particular:
2897 struct S { enum E { }; int E } s;
2898 s.E = 3;
2900 is valid. In addition, the FIELD_DECLs must be maintained in
2901 declaration order so that class layout works as expected.
2902 However, we don't need that order until class layout, so we
2903 save a little time by putting FIELD_DECLs on in reverse order
2904 here, and then reversing them in finish_struct_1. (We could
2905 also keep a pointer to the correct insertion points in the
2906 list.) */
2908 if (TREE_CODE (decl) == TYPE_DECL)
2909 TYPE_FIELDS (current_class_type)
2910 = chainon (TYPE_FIELDS (current_class_type), decl);
2911 else
2913 DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2914 TYPE_FIELDS (current_class_type) = decl;
2917 maybe_add_class_template_decl_list (current_class_type, decl,
2918 /*friend_p=*/0);
2921 if (pch_file)
2922 note_decl_for_pch (decl);
2925 /* DECL has been declared while we are building a PCH file. Perform
2926 actions that we might normally undertake lazily, but which can be
2927 performed now so that they do not have to be performed in
2928 translation units which include the PCH file. */
2930 void
2931 note_decl_for_pch (tree decl)
2933 gcc_assert (pch_file);
2935 /* There's a good chance that we'll have to mangle names at some
2936 point, even if only for emission in debugging information. */
2937 if (VAR_OR_FUNCTION_DECL_P (decl)
2938 && !processing_template_decl)
2939 mangle_decl (decl);
2942 /* Finish processing a complete template declaration. The PARMS are
2943 the template parameters. */
2945 void
2946 finish_template_decl (tree parms)
2948 if (parms)
2949 end_template_decl ();
2950 else
2951 end_specialization ();
2954 /* Finish processing a template-id (which names a type) of the form
2955 NAME < ARGS >. Return the TYPE_DECL for the type named by the
2956 template-id. If ENTERING_SCOPE is nonzero we are about to enter
2957 the scope of template-id indicated. */
2959 tree
2960 finish_template_type (tree name, tree args, int entering_scope)
2962 tree type;
2964 type = lookup_template_class (name, args,
2965 NULL_TREE, NULL_TREE, entering_scope,
2966 tf_warning_or_error | tf_user);
2967 if (type == error_mark_node)
2968 return type;
2969 else if (CLASS_TYPE_P (type) && !alias_type_or_template_p (type))
2970 return TYPE_STUB_DECL (type);
2971 else
2972 return TYPE_NAME (type);
2975 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2976 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2977 BASE_CLASS, or NULL_TREE if an error occurred. The
2978 ACCESS_SPECIFIER is one of
2979 access_{default,public,protected_private}_node. For a virtual base
2980 we set TREE_TYPE. */
2982 tree
2983 finish_base_specifier (tree base, tree access, bool virtual_p)
2985 tree result;
2987 if (base == error_mark_node)
2989 error ("invalid base-class specification");
2990 result = NULL_TREE;
2992 else if (! MAYBE_CLASS_TYPE_P (base))
2994 error ("%qT is not a class type", base);
2995 result = NULL_TREE;
2997 else
2999 if (cp_type_quals (base) != 0)
3001 /* DR 484: Can a base-specifier name a cv-qualified
3002 class type? */
3003 base = TYPE_MAIN_VARIANT (base);
3005 result = build_tree_list (access, base);
3006 if (virtual_p)
3007 TREE_TYPE (result) = integer_type_node;
3010 return result;
3013 /* If FNS is a member function, a set of member functions, or a
3014 template-id referring to one or more member functions, return a
3015 BASELINK for FNS, incorporating the current access context.
3016 Otherwise, return FNS unchanged. */
3018 tree
3019 baselink_for_fns (tree fns)
3021 tree scope;
3022 tree cl;
3024 if (BASELINK_P (fns)
3025 || error_operand_p (fns))
3026 return fns;
3028 scope = ovl_scope (fns);
3029 if (!CLASS_TYPE_P (scope))
3030 return fns;
3032 cl = currently_open_derived_class (scope);
3033 if (!cl)
3034 cl = scope;
3035 cl = TYPE_BINFO (cl);
3036 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
3039 /* Returns true iff DECL is a variable from a function outside
3040 the current one. */
3042 static bool
3043 outer_var_p (tree decl)
3045 return ((VAR_P (decl) || TREE_CODE (decl) == PARM_DECL)
3046 && DECL_FUNCTION_SCOPE_P (decl)
3047 && (DECL_CONTEXT (decl) != current_function_decl
3048 || parsing_nsdmi ()));
3051 /* As above, but also checks that DECL is automatic. */
3053 static bool
3054 outer_automatic_var_p (tree decl)
3056 return (outer_var_p (decl)
3057 && !TREE_STATIC (decl));
3060 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
3061 id-expression. (See cp_parser_id_expression for details.) SCOPE,
3062 if non-NULL, is the type or namespace used to explicitly qualify
3063 ID_EXPRESSION. DECL is the entity to which that name has been
3064 resolved.
3066 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
3067 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
3068 be set to true if this expression isn't permitted in a
3069 constant-expression, but it is otherwise not set by this function.
3070 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
3071 constant-expression, but a non-constant expression is also
3072 permissible.
3074 DONE is true if this expression is a complete postfix-expression;
3075 it is false if this expression is followed by '->', '[', '(', etc.
3076 ADDRESS_P is true iff this expression is the operand of '&'.
3077 TEMPLATE_P is true iff the qualified-id was of the form
3078 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
3079 appears as a template argument.
3081 If an error occurs, and it is the kind of error that might cause
3082 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
3083 is the caller's responsibility to issue the message. *ERROR_MSG
3084 will be a string with static storage duration, so the caller need
3085 not "free" it.
3087 Return an expression for the entity, after issuing appropriate
3088 diagnostics. This function is also responsible for transforming a
3089 reference to a non-static member into a COMPONENT_REF that makes
3090 the use of "this" explicit.
3092 Upon return, *IDK will be filled in appropriately. */
3093 tree
3094 finish_id_expression (tree id_expression,
3095 tree decl,
3096 tree scope,
3097 cp_id_kind *idk,
3098 bool integral_constant_expression_p,
3099 bool allow_non_integral_constant_expression_p,
3100 bool *non_integral_constant_expression_p,
3101 bool template_p,
3102 bool done,
3103 bool address_p,
3104 bool template_arg_p,
3105 const char **error_msg,
3106 location_t location)
3108 decl = strip_using_decl (decl);
3110 /* Initialize the output parameters. */
3111 *idk = CP_ID_KIND_NONE;
3112 *error_msg = NULL;
3114 if (id_expression == error_mark_node)
3115 return error_mark_node;
3116 /* If we have a template-id, then no further lookup is
3117 required. If the template-id was for a template-class, we
3118 will sometimes have a TYPE_DECL at this point. */
3119 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3120 || TREE_CODE (decl) == TYPE_DECL)
3122 /* Look up the name. */
3123 else
3125 if (decl == error_mark_node)
3127 /* Name lookup failed. */
3128 if (scope
3129 && (!TYPE_P (scope)
3130 || (!dependent_type_p (scope)
3131 && !(identifier_p (id_expression)
3132 && IDENTIFIER_TYPENAME_P (id_expression)
3133 && dependent_type_p (TREE_TYPE (id_expression))))))
3135 /* If the qualifying type is non-dependent (and the name
3136 does not name a conversion operator to a dependent
3137 type), issue an error. */
3138 qualified_name_lookup_error (scope, id_expression, decl, location);
3139 return error_mark_node;
3141 else if (!scope)
3143 /* It may be resolved via Koenig lookup. */
3144 *idk = CP_ID_KIND_UNQUALIFIED;
3145 return id_expression;
3147 else
3148 decl = id_expression;
3150 /* If DECL is a variable that would be out of scope under
3151 ANSI/ISO rules, but in scope in the ARM, name lookup
3152 will succeed. Issue a diagnostic here. */
3153 else
3154 decl = check_for_out_of_scope_variable (decl);
3156 /* Remember that the name was used in the definition of
3157 the current class so that we can check later to see if
3158 the meaning would have been different after the class
3159 was entirely defined. */
3160 if (!scope && decl != error_mark_node && identifier_p (id_expression))
3161 maybe_note_name_used_in_class (id_expression, decl);
3163 /* Disallow uses of local variables from containing functions, except
3164 within lambda-expressions. */
3165 if (!outer_var_p (decl))
3166 /* OK */;
3167 else if (TREE_STATIC (decl)
3168 /* It's not a use (3.2) if we're in an unevaluated context. */
3169 || cp_unevaluated_operand)
3171 if (processing_template_decl)
3172 /* For a use of an outer static/unevaluated var, return the id
3173 so that we'll look it up again in the instantiation. */
3174 return id_expression;
3176 else
3178 tree context = DECL_CONTEXT (decl);
3179 tree containing_function = current_function_decl;
3180 tree lambda_stack = NULL_TREE;
3181 tree lambda_expr = NULL_TREE;
3182 tree initializer = convert_from_reference (decl);
3184 /* Mark it as used now even if the use is ill-formed. */
3185 mark_used (decl);
3187 /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
3188 support for an approach in which a reference to a local
3189 [constant] automatic variable in a nested class or lambda body
3190 would enter the expression as an rvalue, which would reduce
3191 the complexity of the problem"
3193 FIXME update for final resolution of core issue 696. */
3194 if (decl_constant_var_p (decl))
3196 if (processing_template_decl)
3197 /* In a template, the constant value may not be in a usable
3198 form, so look it up again at instantiation time. */
3199 return id_expression;
3200 else
3201 return integral_constant_value (decl);
3204 if (parsing_nsdmi ())
3205 containing_function = NULL_TREE;
3206 /* If we are in a lambda function, we can move out until we hit
3207 1. the context,
3208 2. a non-lambda function, or
3209 3. a non-default capturing lambda function. */
3210 else while (context != containing_function
3211 && LAMBDA_FUNCTION_P (containing_function))
3213 lambda_expr = CLASSTYPE_LAMBDA_EXPR
3214 (DECL_CONTEXT (containing_function));
3216 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
3217 == CPLD_NONE)
3218 break;
3220 lambda_stack = tree_cons (NULL_TREE,
3221 lambda_expr,
3222 lambda_stack);
3224 containing_function
3225 = decl_function_context (containing_function);
3228 if (lambda_expr && TREE_CODE (decl) == VAR_DECL
3229 && DECL_ANON_UNION_VAR_P (decl))
3231 error ("cannot capture member %qD of anonymous union", decl);
3232 return error_mark_node;
3234 if (context == containing_function)
3236 decl = add_default_capture (lambda_stack,
3237 /*id=*/DECL_NAME (decl),
3238 initializer);
3240 else if (lambda_expr)
3242 error ("%qD is not captured", decl);
3243 return error_mark_node;
3245 else
3247 error (VAR_P (decl)
3248 ? G_("use of local variable with automatic storage from containing function")
3249 : G_("use of parameter from containing function"));
3250 inform (input_location, "%q+#D declared here", decl);
3251 return error_mark_node;
3255 /* Also disallow uses of function parameters outside the function
3256 body, except inside an unevaluated context (i.e. decltype). */
3257 if (TREE_CODE (decl) == PARM_DECL
3258 && DECL_CONTEXT (decl) == NULL_TREE
3259 && !cp_unevaluated_operand)
3261 *error_msg = "use of parameter outside function body";
3262 return error_mark_node;
3266 /* If we didn't find anything, or what we found was a type,
3267 then this wasn't really an id-expression. */
3268 if (TREE_CODE (decl) == TEMPLATE_DECL
3269 && !DECL_FUNCTION_TEMPLATE_P (decl))
3271 *error_msg = "missing template arguments";
3272 return error_mark_node;
3274 else if (TREE_CODE (decl) == TYPE_DECL
3275 || TREE_CODE (decl) == NAMESPACE_DECL)
3277 *error_msg = "expected primary-expression";
3278 return error_mark_node;
3281 /* If the name resolved to a template parameter, there is no
3282 need to look it up again later. */
3283 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
3284 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3286 tree r;
3288 *idk = CP_ID_KIND_NONE;
3289 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3290 decl = TEMPLATE_PARM_DECL (decl);
3291 r = convert_from_reference (DECL_INITIAL (decl));
3293 if (integral_constant_expression_p
3294 && !dependent_type_p (TREE_TYPE (decl))
3295 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
3297 if (!allow_non_integral_constant_expression_p)
3298 error ("template parameter %qD of type %qT is not allowed in "
3299 "an integral constant expression because it is not of "
3300 "integral or enumeration type", decl, TREE_TYPE (decl));
3301 *non_integral_constant_expression_p = true;
3303 return r;
3305 else
3307 bool dependent_p;
3309 /* If the declaration was explicitly qualified indicate
3310 that. The semantics of `A::f(3)' are different than
3311 `f(3)' if `f' is virtual. */
3312 *idk = (scope
3313 ? CP_ID_KIND_QUALIFIED
3314 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3315 ? CP_ID_KIND_TEMPLATE_ID
3316 : CP_ID_KIND_UNQUALIFIED));
3319 /* [temp.dep.expr]
3321 An id-expression is type-dependent if it contains an
3322 identifier that was declared with a dependent type.
3324 The standard is not very specific about an id-expression that
3325 names a set of overloaded functions. What if some of them
3326 have dependent types and some of them do not? Presumably,
3327 such a name should be treated as a dependent name. */
3328 /* Assume the name is not dependent. */
3329 dependent_p = false;
3330 if (!processing_template_decl)
3331 /* No names are dependent outside a template. */
3333 else if (TREE_CODE (decl) == CONST_DECL)
3334 /* We don't want to treat enumerators as dependent. */
3336 /* A template-id where the name of the template was not resolved
3337 is definitely dependent. */
3338 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3339 && (identifier_p (TREE_OPERAND (decl, 0))))
3340 dependent_p = true;
3341 /* For anything except an overloaded function, just check its
3342 type. */
3343 else if (!is_overloaded_fn (decl))
3344 dependent_p
3345 = dependent_type_p (TREE_TYPE (decl));
3346 /* For a set of overloaded functions, check each of the
3347 functions. */
3348 else
3350 tree fns = decl;
3352 if (BASELINK_P (fns))
3353 fns = BASELINK_FUNCTIONS (fns);
3355 /* For a template-id, check to see if the template
3356 arguments are dependent. */
3357 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3359 tree args = TREE_OPERAND (fns, 1);
3360 dependent_p = any_dependent_template_arguments_p (args);
3361 /* The functions are those referred to by the
3362 template-id. */
3363 fns = TREE_OPERAND (fns, 0);
3366 /* If there are no dependent template arguments, go through
3367 the overloaded functions. */
3368 while (fns && !dependent_p)
3370 tree fn = OVL_CURRENT (fns);
3372 /* Member functions of dependent classes are
3373 dependent. */
3374 if (TREE_CODE (fn) == FUNCTION_DECL
3375 && type_dependent_expression_p (fn))
3376 dependent_p = true;
3377 else if (TREE_CODE (fn) == TEMPLATE_DECL
3378 && dependent_template_p (fn))
3379 dependent_p = true;
3381 fns = OVL_NEXT (fns);
3385 /* If the name was dependent on a template parameter, we will
3386 resolve the name at instantiation time. */
3387 if (dependent_p)
3389 /* Create a SCOPE_REF for qualified names, if the scope is
3390 dependent. */
3391 if (scope)
3393 if (TYPE_P (scope))
3395 if (address_p && done)
3396 decl = finish_qualified_id_expr (scope, decl,
3397 done, address_p,
3398 template_p,
3399 template_arg_p,
3400 tf_warning_or_error);
3401 else
3403 tree type = NULL_TREE;
3404 if (DECL_P (decl) && !dependent_scope_p (scope))
3405 type = TREE_TYPE (decl);
3406 decl = build_qualified_name (type,
3407 scope,
3408 id_expression,
3409 template_p);
3412 if (TREE_TYPE (decl))
3413 decl = convert_from_reference (decl);
3414 return decl;
3416 /* A TEMPLATE_ID already contains all the information we
3417 need. */
3418 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3419 return id_expression;
3420 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3421 /* If we found a variable, then name lookup during the
3422 instantiation will always resolve to the same VAR_DECL
3423 (or an instantiation thereof). */
3424 if (VAR_P (decl)
3425 || TREE_CODE (decl) == PARM_DECL)
3427 mark_used (decl);
3428 return convert_from_reference (decl);
3430 /* The same is true for FIELD_DECL, but we also need to
3431 make sure that the syntax is correct. */
3432 else if (TREE_CODE (decl) == FIELD_DECL)
3434 /* Since SCOPE is NULL here, this is an unqualified name.
3435 Access checking has been performed during name lookup
3436 already. Turn off checking to avoid duplicate errors. */
3437 push_deferring_access_checks (dk_no_check);
3438 decl = finish_non_static_data_member
3439 (decl, NULL_TREE,
3440 /*qualifying_scope=*/NULL_TREE);
3441 pop_deferring_access_checks ();
3442 return decl;
3444 return id_expression;
3447 if (TREE_CODE (decl) == NAMESPACE_DECL)
3449 error ("use of namespace %qD as expression", decl);
3450 return error_mark_node;
3452 else if (DECL_CLASS_TEMPLATE_P (decl))
3454 error ("use of class template %qT as expression", decl);
3455 return error_mark_node;
3457 else if (TREE_CODE (decl) == TREE_LIST)
3459 /* Ambiguous reference to base members. */
3460 error ("request for member %qD is ambiguous in "
3461 "multiple inheritance lattice", id_expression);
3462 print_candidates (decl);
3463 return error_mark_node;
3466 /* Mark variable-like entities as used. Functions are similarly
3467 marked either below or after overload resolution. */
3468 if ((VAR_P (decl)
3469 || TREE_CODE (decl) == PARM_DECL
3470 || TREE_CODE (decl) == CONST_DECL
3471 || TREE_CODE (decl) == RESULT_DECL)
3472 && !mark_used (decl))
3473 return error_mark_node;
3475 /* Only certain kinds of names are allowed in constant
3476 expression. Template parameters have already
3477 been handled above. */
3478 if (! error_operand_p (decl)
3479 && integral_constant_expression_p
3480 && ! decl_constant_var_p (decl)
3481 && TREE_CODE (decl) != CONST_DECL
3482 && ! builtin_valid_in_constant_expr_p (decl))
3484 if (!allow_non_integral_constant_expression_p)
3486 error ("%qD cannot appear in a constant-expression", decl);
3487 return error_mark_node;
3489 *non_integral_constant_expression_p = true;
3492 tree wrap;
3493 if (VAR_P (decl)
3494 && !cp_unevaluated_operand
3495 && !processing_template_decl
3496 && DECL_THREAD_LOCAL_P (decl)
3497 && (wrap = get_tls_wrapper_fn (decl)))
3499 /* Replace an evaluated use of the thread_local variable with
3500 a call to its wrapper. */
3501 decl = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
3503 else if (scope)
3505 decl = (adjust_result_of_qualified_name_lookup
3506 (decl, scope, current_nonlambda_class_type()));
3508 if (TREE_CODE (decl) == FUNCTION_DECL)
3509 mark_used (decl);
3511 if (TYPE_P (scope))
3512 decl = finish_qualified_id_expr (scope,
3513 decl,
3514 done,
3515 address_p,
3516 template_p,
3517 template_arg_p,
3518 tf_warning_or_error);
3519 else
3520 decl = convert_from_reference (decl);
3522 else if (TREE_CODE (decl) == FIELD_DECL)
3524 /* Since SCOPE is NULL here, this is an unqualified name.
3525 Access checking has been performed during name lookup
3526 already. Turn off checking to avoid duplicate errors. */
3527 push_deferring_access_checks (dk_no_check);
3528 decl = finish_non_static_data_member (decl, NULL_TREE,
3529 /*qualifying_scope=*/NULL_TREE);
3530 pop_deferring_access_checks ();
3532 else if (is_overloaded_fn (decl))
3534 tree first_fn;
3536 first_fn = get_first_fn (decl);
3537 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3538 first_fn = DECL_TEMPLATE_RESULT (first_fn);
3540 if (!really_overloaded_fn (decl)
3541 && !mark_used (first_fn))
3542 return error_mark_node;
3544 if (!template_arg_p
3545 && TREE_CODE (first_fn) == FUNCTION_DECL
3546 && DECL_FUNCTION_MEMBER_P (first_fn)
3547 && !shared_member_p (decl))
3549 /* A set of member functions. */
3550 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3551 return finish_class_member_access_expr (decl, id_expression,
3552 /*template_p=*/false,
3553 tf_warning_or_error);
3556 decl = baselink_for_fns (decl);
3558 else
3560 if (DECL_P (decl) && DECL_NONLOCAL (decl)
3561 && DECL_CLASS_SCOPE_P (decl))
3563 tree context = context_for_name_lookup (decl);
3564 if (context != current_class_type)
3566 tree path = currently_open_derived_class (context);
3567 perform_or_defer_access_check (TYPE_BINFO (path),
3568 decl, decl,
3569 tf_warning_or_error);
3573 decl = convert_from_reference (decl);
3577 /* Handle references (c++/56130). */
3578 tree t = REFERENCE_REF_P (decl) ? TREE_OPERAND (decl, 0) : decl;
3579 if (TREE_DEPRECATED (t))
3580 warn_deprecated_use (t, NULL_TREE);
3582 return decl;
3585 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3586 use as a type-specifier. */
3588 tree
3589 finish_typeof (tree expr)
3591 tree type;
3593 if (type_dependent_expression_p (expr))
3595 type = cxx_make_type (TYPEOF_TYPE);
3596 TYPEOF_TYPE_EXPR (type) = expr;
3597 SET_TYPE_STRUCTURAL_EQUALITY (type);
3599 return type;
3602 expr = mark_type_use (expr);
3604 type = unlowered_expr_type (expr);
3606 if (!type || type == unknown_type_node)
3608 error ("type of %qE is unknown", expr);
3609 return error_mark_node;
3612 return type;
3615 /* Implement the __underlying_type keyword: Return the underlying
3616 type of TYPE, suitable for use as a type-specifier. */
3618 tree
3619 finish_underlying_type (tree type)
3621 tree underlying_type;
3623 if (processing_template_decl)
3625 underlying_type = cxx_make_type (UNDERLYING_TYPE);
3626 UNDERLYING_TYPE_TYPE (underlying_type) = type;
3627 SET_TYPE_STRUCTURAL_EQUALITY (underlying_type);
3629 return underlying_type;
3632 complete_type (type);
3634 if (TREE_CODE (type) != ENUMERAL_TYPE)
3636 error ("%qT is not an enumeration type", type);
3637 return error_mark_node;
3640 underlying_type = ENUM_UNDERLYING_TYPE (type);
3642 /* Fixup necessary in this case because ENUM_UNDERLYING_TYPE
3643 includes TYPE_MIN_VALUE and TYPE_MAX_VALUE information.
3644 See finish_enum_value_list for details. */
3645 if (!ENUM_FIXED_UNDERLYING_TYPE_P (type))
3646 underlying_type
3647 = c_common_type_for_mode (TYPE_MODE (underlying_type),
3648 TYPE_UNSIGNED (underlying_type));
3650 return underlying_type;
3653 /* Implement the __direct_bases keyword: Return the direct base classes
3654 of type */
3656 tree
3657 calculate_direct_bases (tree type)
3659 vec<tree, va_gc> *vector = make_tree_vector();
3660 tree bases_vec = NULL_TREE;
3661 vec<tree, va_gc> *base_binfos;
3662 tree binfo;
3663 unsigned i;
3665 complete_type (type);
3667 if (!NON_UNION_CLASS_TYPE_P (type))
3668 return make_tree_vec (0);
3670 base_binfos = BINFO_BASE_BINFOS (TYPE_BINFO (type));
3672 /* Virtual bases are initialized first */
3673 for (i = 0; base_binfos->iterate (i, &binfo); i++)
3675 if (BINFO_VIRTUAL_P (binfo))
3677 vec_safe_push (vector, binfo);
3681 /* Now non-virtuals */
3682 for (i = 0; base_binfos->iterate (i, &binfo); i++)
3684 if (!BINFO_VIRTUAL_P (binfo))
3686 vec_safe_push (vector, binfo);
3691 bases_vec = make_tree_vec (vector->length ());
3693 for (i = 0; i < vector->length (); ++i)
3695 TREE_VEC_ELT (bases_vec, i) = BINFO_TYPE ((*vector)[i]);
3697 return bases_vec;
3700 /* Implement the __bases keyword: Return the base classes
3701 of type */
3703 /* Find morally non-virtual base classes by walking binfo hierarchy */
3704 /* Virtual base classes are handled separately in finish_bases */
3706 static tree
3707 dfs_calculate_bases_pre (tree binfo, void * /*data_*/)
3709 /* Don't walk bases of virtual bases */
3710 return BINFO_VIRTUAL_P (binfo) ? dfs_skip_bases : NULL_TREE;
3713 static tree
3714 dfs_calculate_bases_post (tree binfo, void *data_)
3716 vec<tree, va_gc> **data = ((vec<tree, va_gc> **) data_);
3717 if (!BINFO_VIRTUAL_P (binfo))
3719 vec_safe_push (*data, BINFO_TYPE (binfo));
3721 return NULL_TREE;
3724 /* Calculates the morally non-virtual base classes of a class */
3725 static vec<tree, va_gc> *
3726 calculate_bases_helper (tree type)
3728 vec<tree, va_gc> *vector = make_tree_vector();
3730 /* Now add non-virtual base classes in order of construction */
3731 dfs_walk_all (TYPE_BINFO (type),
3732 dfs_calculate_bases_pre, dfs_calculate_bases_post, &vector);
3733 return vector;
3736 tree
3737 calculate_bases (tree type)
3739 vec<tree, va_gc> *vector = make_tree_vector();
3740 tree bases_vec = NULL_TREE;
3741 unsigned i;
3742 vec<tree, va_gc> *vbases;
3743 vec<tree, va_gc> *nonvbases;
3744 tree binfo;
3746 complete_type (type);
3748 if (!NON_UNION_CLASS_TYPE_P (type))
3749 return make_tree_vec (0);
3751 /* First go through virtual base classes */
3752 for (vbases = CLASSTYPE_VBASECLASSES (type), i = 0;
3753 vec_safe_iterate (vbases, i, &binfo); i++)
3755 vec<tree, va_gc> *vbase_bases;
3756 vbase_bases = calculate_bases_helper (BINFO_TYPE (binfo));
3757 vec_safe_splice (vector, vbase_bases);
3758 release_tree_vector (vbase_bases);
3761 /* Now for the non-virtual bases */
3762 nonvbases = calculate_bases_helper (type);
3763 vec_safe_splice (vector, nonvbases);
3764 release_tree_vector (nonvbases);
3766 /* Last element is entire class, so don't copy */
3767 bases_vec = make_tree_vec (vector->length () - 1);
3769 for (i = 0; i < vector->length () - 1; ++i)
3771 TREE_VEC_ELT (bases_vec, i) = (*vector)[i];
3773 release_tree_vector (vector);
3774 return bases_vec;
3777 tree
3778 finish_bases (tree type, bool direct)
3780 tree bases = NULL_TREE;
3782 if (!processing_template_decl)
3784 /* Parameter packs can only be used in templates */
3785 error ("Parameter pack __bases only valid in template declaration");
3786 return error_mark_node;
3789 bases = cxx_make_type (BASES);
3790 BASES_TYPE (bases) = type;
3791 BASES_DIRECT (bases) = direct;
3792 SET_TYPE_STRUCTURAL_EQUALITY (bases);
3794 return bases;
3797 /* Perform C++-specific checks for __builtin_offsetof before calling
3798 fold_offsetof. */
3800 tree
3801 finish_offsetof (tree expr)
3803 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3805 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3806 TREE_OPERAND (expr, 2));
3807 return error_mark_node;
3809 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3810 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3811 || TREE_TYPE (expr) == unknown_type_node)
3813 if (INDIRECT_REF_P (expr))
3814 error ("second operand of %<offsetof%> is neither a single "
3815 "identifier nor a sequence of member accesses and "
3816 "array references");
3817 else
3819 if (TREE_CODE (expr) == COMPONENT_REF
3820 || TREE_CODE (expr) == COMPOUND_EXPR)
3821 expr = TREE_OPERAND (expr, 1);
3822 error ("cannot apply %<offsetof%> to member function %qD", expr);
3824 return error_mark_node;
3826 if (REFERENCE_REF_P (expr))
3827 expr = TREE_OPERAND (expr, 0);
3828 if (TREE_CODE (expr) == COMPONENT_REF)
3830 tree object = TREE_OPERAND (expr, 0);
3831 if (!complete_type_or_else (TREE_TYPE (object), object))
3832 return error_mark_node;
3834 return fold_offsetof (expr);
3837 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3838 function is broken out from the above for the benefit of the tree-ssa
3839 project. */
3841 void
3842 simplify_aggr_init_expr (tree *tp)
3844 tree aggr_init_expr = *tp;
3846 /* Form an appropriate CALL_EXPR. */
3847 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3848 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3849 tree type = TREE_TYPE (slot);
3851 tree call_expr;
3852 enum style_t { ctor, arg, pcc } style;
3854 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3855 style = ctor;
3856 #ifdef PCC_STATIC_STRUCT_RETURN
3857 else if (1)
3858 style = pcc;
3859 #endif
3860 else
3862 gcc_assert (TREE_ADDRESSABLE (type));
3863 style = arg;
3866 call_expr = build_call_array_loc (input_location,
3867 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3869 aggr_init_expr_nargs (aggr_init_expr),
3870 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3871 TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3872 CALL_EXPR_LIST_INIT_P (call_expr) = CALL_EXPR_LIST_INIT_P (aggr_init_expr);
3874 if (style == ctor)
3876 /* Replace the first argument to the ctor with the address of the
3877 slot. */
3878 cxx_mark_addressable (slot);
3879 CALL_EXPR_ARG (call_expr, 0) =
3880 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3882 else if (style == arg)
3884 /* Just mark it addressable here, and leave the rest to
3885 expand_call{,_inline}. */
3886 cxx_mark_addressable (slot);
3887 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3888 call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3890 else if (style == pcc)
3892 /* If we're using the non-reentrant PCC calling convention, then we
3893 need to copy the returned value out of the static buffer into the
3894 SLOT. */
3895 push_deferring_access_checks (dk_no_check);
3896 call_expr = build_aggr_init (slot, call_expr,
3897 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3898 tf_warning_or_error);
3899 pop_deferring_access_checks ();
3900 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3903 if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3905 tree init = build_zero_init (type, NULL_TREE,
3906 /*static_storage_p=*/false);
3907 init = build2 (INIT_EXPR, void_type_node, slot, init);
3908 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3909 init, call_expr);
3912 *tp = call_expr;
3915 /* Emit all thunks to FN that should be emitted when FN is emitted. */
3917 void
3918 emit_associated_thunks (tree fn)
3920 /* When we use vcall offsets, we emit thunks with the virtual
3921 functions to which they thunk. The whole point of vcall offsets
3922 is so that you can know statically the entire set of thunks that
3923 will ever be needed for a given virtual function, thereby
3924 enabling you to output all the thunks with the function itself. */
3925 if (DECL_VIRTUAL_P (fn)
3926 /* Do not emit thunks for extern template instantiations. */
3927 && ! DECL_REALLY_EXTERN (fn))
3929 tree thunk;
3931 for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3933 if (!THUNK_ALIAS (thunk))
3935 use_thunk (thunk, /*emit_p=*/1);
3936 if (DECL_RESULT_THUNK_P (thunk))
3938 tree probe;
3940 for (probe = DECL_THUNKS (thunk);
3941 probe; probe = DECL_CHAIN (probe))
3942 use_thunk (probe, /*emit_p=*/1);
3945 else
3946 gcc_assert (!DECL_THUNKS (thunk));
3951 /* Returns true iff FUN is an instantiation of a constexpr function
3952 template. */
3954 static inline bool
3955 is_instantiation_of_constexpr (tree fun)
3957 return (DECL_TEMPLOID_INSTANTIATION (fun)
3958 && DECL_DECLARED_CONSTEXPR_P (DECL_TI_TEMPLATE (fun)));
3961 /* Generate RTL for FN. */
3963 bool
3964 expand_or_defer_fn_1 (tree fn)
3966 /* When the parser calls us after finishing the body of a template
3967 function, we don't really want to expand the body. */
3968 if (processing_template_decl)
3970 /* Normally, collection only occurs in rest_of_compilation. So,
3971 if we don't collect here, we never collect junk generated
3972 during the processing of templates until we hit a
3973 non-template function. It's not safe to do this inside a
3974 nested class, though, as the parser may have local state that
3975 is not a GC root. */
3976 if (!function_depth)
3977 ggc_collect ();
3978 return false;
3981 gcc_assert (DECL_SAVED_TREE (fn));
3983 /* We make a decision about linkage for these functions at the end
3984 of the compilation. Until that point, we do not want the back
3985 end to output them -- but we do want it to see the bodies of
3986 these functions so that it can inline them as appropriate. */
3987 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3989 if (DECL_INTERFACE_KNOWN (fn))
3990 /* We've already made a decision as to how this function will
3991 be handled. */;
3992 else if (!at_eof)
3993 tentative_decl_linkage (fn);
3994 else
3995 import_export_decl (fn);
3997 /* If the user wants us to keep all inline functions, then mark
3998 this function as needed so that finish_file will make sure to
3999 output it later. Similarly, all dllexport'd functions must
4000 be emitted; there may be callers in other DLLs. */
4001 if ((flag_keep_inline_functions
4002 && DECL_DECLARED_INLINE_P (fn)
4003 && !DECL_REALLY_EXTERN (fn))
4004 || (flag_keep_inline_dllexport
4005 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn))))
4007 mark_needed (fn);
4008 DECL_EXTERNAL (fn) = 0;
4012 /* If this is a constructor or destructor body, we have to clone
4013 it. */
4014 if (maybe_clone_body (fn))
4016 /* We don't want to process FN again, so pretend we've written
4017 it out, even though we haven't. */
4018 TREE_ASM_WRITTEN (fn) = 1;
4019 /* If this is an instantiation of a constexpr function, keep
4020 DECL_SAVED_TREE for explain_invalid_constexpr_fn. */
4021 if (!is_instantiation_of_constexpr (fn))
4022 DECL_SAVED_TREE (fn) = NULL_TREE;
4023 return false;
4026 /* There's no reason to do any of the work here if we're only doing
4027 semantic analysis; this code just generates RTL. */
4028 if (flag_syntax_only)
4029 return false;
4031 return true;
4034 void
4035 expand_or_defer_fn (tree fn)
4037 if (expand_or_defer_fn_1 (fn))
4039 function_depth++;
4041 /* Expand or defer, at the whim of the compilation unit manager. */
4042 cgraph_finalize_function (fn, function_depth > 1);
4043 emit_associated_thunks (fn);
4045 function_depth--;
4049 struct nrv_data
4051 tree var;
4052 tree result;
4053 hash_table <pointer_hash <tree_node> > visited;
4056 /* Helper function for walk_tree, used by finalize_nrv below. */
4058 static tree
4059 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
4061 struct nrv_data *dp = (struct nrv_data *)data;
4062 tree_node **slot;
4064 /* No need to walk into types. There wouldn't be any need to walk into
4065 non-statements, except that we have to consider STMT_EXPRs. */
4066 if (TYPE_P (*tp))
4067 *walk_subtrees = 0;
4068 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
4069 but differs from using NULL_TREE in that it indicates that we care
4070 about the value of the RESULT_DECL. */
4071 else if (TREE_CODE (*tp) == RETURN_EXPR)
4072 TREE_OPERAND (*tp, 0) = dp->result;
4073 /* Change all cleanups for the NRV to only run when an exception is
4074 thrown. */
4075 else if (TREE_CODE (*tp) == CLEANUP_STMT
4076 && CLEANUP_DECL (*tp) == dp->var)
4077 CLEANUP_EH_ONLY (*tp) = 1;
4078 /* Replace the DECL_EXPR for the NRV with an initialization of the
4079 RESULT_DECL, if needed. */
4080 else if (TREE_CODE (*tp) == DECL_EXPR
4081 && DECL_EXPR_DECL (*tp) == dp->var)
4083 tree init;
4084 if (DECL_INITIAL (dp->var)
4085 && DECL_INITIAL (dp->var) != error_mark_node)
4086 init = build2 (INIT_EXPR, void_type_node, dp->result,
4087 DECL_INITIAL (dp->var));
4088 else
4089 init = build_empty_stmt (EXPR_LOCATION (*tp));
4090 DECL_INITIAL (dp->var) = NULL_TREE;
4091 SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
4092 *tp = init;
4094 /* And replace all uses of the NRV with the RESULT_DECL. */
4095 else if (*tp == dp->var)
4096 *tp = dp->result;
4098 /* Avoid walking into the same tree more than once. Unfortunately, we
4099 can't just use walk_tree_without duplicates because it would only call
4100 us for the first occurrence of dp->var in the function body. */
4101 slot = dp->visited.find_slot (*tp, INSERT);
4102 if (*slot)
4103 *walk_subtrees = 0;
4104 else
4105 *slot = *tp;
4107 /* Keep iterating. */
4108 return NULL_TREE;
4111 /* Called from finish_function to implement the named return value
4112 optimization by overriding all the RETURN_EXPRs and pertinent
4113 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
4114 RESULT_DECL for the function. */
4116 void
4117 finalize_nrv (tree *tp, tree var, tree result)
4119 struct nrv_data data;
4121 /* Copy name from VAR to RESULT. */
4122 DECL_NAME (result) = DECL_NAME (var);
4123 /* Don't forget that we take its address. */
4124 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
4125 /* Finally set DECL_VALUE_EXPR to avoid assigning
4126 a stack slot at -O0 for the original var and debug info
4127 uses RESULT location for VAR. */
4128 SET_DECL_VALUE_EXPR (var, result);
4129 DECL_HAS_VALUE_EXPR_P (var) = 1;
4131 data.var = var;
4132 data.result = result;
4133 data.visited.create (37);
4134 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
4135 data.visited.dispose ();
4138 /* Create CP_OMP_CLAUSE_INFO for clause C. Returns true if it is invalid. */
4140 bool
4141 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
4142 bool need_copy_ctor, bool need_copy_assignment,
4143 bool need_dtor)
4145 int save_errorcount = errorcount;
4146 tree info, t;
4148 /* Always allocate 3 elements for simplicity. These are the
4149 function decls for the ctor, dtor, and assignment op.
4150 This layout is known to the three lang hooks,
4151 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
4152 and cxx_omp_clause_assign_op. */
4153 info = make_tree_vec (3);
4154 CP_OMP_CLAUSE_INFO (c) = info;
4156 if (need_default_ctor || need_copy_ctor)
4158 if (need_default_ctor)
4159 t = get_default_ctor (type);
4160 else
4161 t = get_copy_ctor (type, tf_warning_or_error);
4163 if (t && !trivial_fn_p (t))
4164 TREE_VEC_ELT (info, 0) = t;
4167 if (need_dtor && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4168 TREE_VEC_ELT (info, 1) = get_dtor (type, tf_warning_or_error);
4170 if (need_copy_assignment)
4172 t = get_copy_assign (type);
4174 if (t && !trivial_fn_p (t))
4175 TREE_VEC_ELT (info, 2) = t;
4178 return errorcount != save_errorcount;
4181 /* Helper function for handle_omp_array_sections. Called recursively
4182 to handle multiple array-section-subscripts. C is the clause,
4183 T current expression (initially OMP_CLAUSE_DECL), which is either
4184 a TREE_LIST for array-section-subscript (TREE_PURPOSE is low-bound
4185 expression if specified, TREE_VALUE length expression if specified,
4186 TREE_CHAIN is what it has been specified after, or some decl.
4187 TYPES vector is populated with array section types, MAYBE_ZERO_LEN
4188 set to true if any of the array-section-subscript could have length
4189 of zero (explicit or implicit), FIRST_NON_ONE is the index of the
4190 first array-section-subscript which is known not to have length
4191 of one. Given say:
4192 map(a[:b][2:1][:c][:2][:d][e:f][2:5])
4193 FIRST_NON_ONE will be 3, array-section-subscript [:b], [2:1] and [:c]
4194 all are or may have length of 1, array-section-subscript [:2] is the
4195 first one knonwn not to have length 1. For array-section-subscript
4196 <= FIRST_NON_ONE we diagnose non-contiguous arrays if low bound isn't
4197 0 or length isn't the array domain max + 1, for > FIRST_NON_ONE we
4198 can if MAYBE_ZERO_LEN is false. MAYBE_ZERO_LEN will be true in the above
4199 case though, as some lengths could be zero. */
4201 static tree
4202 handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
4203 bool &maybe_zero_len, unsigned int &first_non_one)
4205 tree ret, low_bound, length, type;
4206 if (TREE_CODE (t) != TREE_LIST)
4208 if (error_operand_p (t))
4209 return error_mark_node;
4210 if (type_dependent_expression_p (t))
4211 return NULL_TREE;
4212 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4214 if (processing_template_decl)
4215 return NULL_TREE;
4216 if (DECL_P (t))
4217 error_at (OMP_CLAUSE_LOCATION (c),
4218 "%qD is not a variable in %qs clause", t,
4219 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4220 else
4221 error_at (OMP_CLAUSE_LOCATION (c),
4222 "%qE is not a variable in %qs clause", t,
4223 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4224 return error_mark_node;
4226 else if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
4227 && TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
4229 error_at (OMP_CLAUSE_LOCATION (c),
4230 "%qD is threadprivate variable in %qs clause", t,
4231 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4232 return error_mark_node;
4234 t = convert_from_reference (t);
4235 return t;
4238 ret = handle_omp_array_sections_1 (c, TREE_CHAIN (t), types,
4239 maybe_zero_len, first_non_one);
4240 if (ret == error_mark_node || ret == NULL_TREE)
4241 return ret;
4243 type = TREE_TYPE (ret);
4244 low_bound = TREE_PURPOSE (t);
4245 length = TREE_VALUE (t);
4246 if ((low_bound && type_dependent_expression_p (low_bound))
4247 || (length && type_dependent_expression_p (length)))
4248 return NULL_TREE;
4250 if (low_bound == error_mark_node || length == error_mark_node)
4251 return error_mark_node;
4253 if (low_bound && !INTEGRAL_TYPE_P (TREE_TYPE (low_bound)))
4255 error_at (OMP_CLAUSE_LOCATION (c),
4256 "low bound %qE of array section does not have integral type",
4257 low_bound);
4258 return error_mark_node;
4260 if (length && !INTEGRAL_TYPE_P (TREE_TYPE (length)))
4262 error_at (OMP_CLAUSE_LOCATION (c),
4263 "length %qE of array section does not have integral type",
4264 length);
4265 return error_mark_node;
4267 if (low_bound)
4268 low_bound = mark_rvalue_use (low_bound);
4269 if (length)
4270 length = mark_rvalue_use (length);
4271 if (low_bound
4272 && TREE_CODE (low_bound) == INTEGER_CST
4273 && TYPE_PRECISION (TREE_TYPE (low_bound))
4274 > TYPE_PRECISION (sizetype))
4275 low_bound = fold_convert (sizetype, low_bound);
4276 if (length
4277 && TREE_CODE (length) == INTEGER_CST
4278 && TYPE_PRECISION (TREE_TYPE (length))
4279 > TYPE_PRECISION (sizetype))
4280 length = fold_convert (sizetype, length);
4281 if (low_bound == NULL_TREE)
4282 low_bound = integer_zero_node;
4284 if (length != NULL_TREE)
4286 if (!integer_nonzerop (length))
4287 maybe_zero_len = true;
4288 if (first_non_one == types.length ()
4289 && (TREE_CODE (length) != INTEGER_CST || integer_onep (length)))
4290 first_non_one++;
4292 if (TREE_CODE (type) == ARRAY_TYPE)
4294 if (length == NULL_TREE
4295 && (TYPE_DOMAIN (type) == NULL_TREE
4296 || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE))
4298 error_at (OMP_CLAUSE_LOCATION (c),
4299 "for unknown bound array type length expression must "
4300 "be specified");
4301 return error_mark_node;
4303 if (TREE_CODE (low_bound) == INTEGER_CST
4304 && tree_int_cst_sgn (low_bound) == -1)
4306 error_at (OMP_CLAUSE_LOCATION (c),
4307 "negative low bound in array section in %qs clause",
4308 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4309 return error_mark_node;
4311 if (length != NULL_TREE
4312 && TREE_CODE (length) == INTEGER_CST
4313 && tree_int_cst_sgn (length) == -1)
4315 error_at (OMP_CLAUSE_LOCATION (c),
4316 "negative length in array section in %qs clause",
4317 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4318 return error_mark_node;
4320 if (TYPE_DOMAIN (type)
4321 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
4322 && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
4323 == INTEGER_CST)
4325 tree size = size_binop (PLUS_EXPR,
4326 TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
4327 size_one_node);
4328 if (TREE_CODE (low_bound) == INTEGER_CST)
4330 if (tree_int_cst_lt (size, low_bound))
4332 error_at (OMP_CLAUSE_LOCATION (c),
4333 "low bound %qE above array section size "
4334 "in %qs clause", low_bound,
4335 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4336 return error_mark_node;
4338 if (tree_int_cst_equal (size, low_bound))
4339 maybe_zero_len = true;
4340 else if (length == NULL_TREE
4341 && first_non_one == types.length ()
4342 && tree_int_cst_equal
4343 (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
4344 low_bound))
4345 first_non_one++;
4347 else if (length == NULL_TREE)
4349 maybe_zero_len = true;
4350 if (first_non_one == types.length ())
4351 first_non_one++;
4353 if (length && TREE_CODE (length) == INTEGER_CST)
4355 if (tree_int_cst_lt (size, length))
4357 error_at (OMP_CLAUSE_LOCATION (c),
4358 "length %qE above array section size "
4359 "in %qs clause", length,
4360 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4361 return error_mark_node;
4363 if (TREE_CODE (low_bound) == INTEGER_CST)
4365 tree lbpluslen
4366 = size_binop (PLUS_EXPR,
4367 fold_convert (sizetype, low_bound),
4368 fold_convert (sizetype, length));
4369 if (TREE_CODE (lbpluslen) == INTEGER_CST
4370 && tree_int_cst_lt (size, lbpluslen))
4372 error_at (OMP_CLAUSE_LOCATION (c),
4373 "high bound %qE above array section size "
4374 "in %qs clause", lbpluslen,
4375 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4376 return error_mark_node;
4381 else if (length == NULL_TREE)
4383 maybe_zero_len = true;
4384 if (first_non_one == types.length ())
4385 first_non_one++;
4388 /* For [lb:] we will need to evaluate lb more than once. */
4389 if (length == NULL_TREE && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND)
4391 tree lb = cp_save_expr (low_bound);
4392 if (lb != low_bound)
4394 TREE_PURPOSE (t) = lb;
4395 low_bound = lb;
4399 else if (TREE_CODE (type) == POINTER_TYPE)
4401 if (length == NULL_TREE)
4403 error_at (OMP_CLAUSE_LOCATION (c),
4404 "for pointer type length expression must be specified");
4405 return error_mark_node;
4407 /* If there is a pointer type anywhere but in the very first
4408 array-section-subscript, the array section can't be contiguous. */
4409 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
4410 && TREE_CODE (TREE_CHAIN (t)) == TREE_LIST)
4412 error_at (OMP_CLAUSE_LOCATION (c),
4413 "array section is not contiguous in %qs clause",
4414 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4415 return error_mark_node;
4418 else
4420 error_at (OMP_CLAUSE_LOCATION (c),
4421 "%qE does not have pointer or array type", ret);
4422 return error_mark_node;
4424 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND)
4425 types.safe_push (TREE_TYPE (ret));
4426 /* We will need to evaluate lb more than once. */
4427 tree lb = cp_save_expr (low_bound);
4428 if (lb != low_bound)
4430 TREE_PURPOSE (t) = lb;
4431 low_bound = lb;
4433 ret = grok_array_decl (OMP_CLAUSE_LOCATION (c), ret, low_bound, false);
4434 return ret;
4437 /* Handle array sections for clause C. */
4439 static bool
4440 handle_omp_array_sections (tree c)
4442 bool maybe_zero_len = false;
4443 unsigned int first_non_one = 0;
4444 auto_vec<tree> types;
4445 tree first = handle_omp_array_sections_1 (c, OMP_CLAUSE_DECL (c), types,
4446 maybe_zero_len, first_non_one);
4447 if (first == error_mark_node)
4448 return true;
4449 if (first == NULL_TREE)
4450 return false;
4451 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND)
4453 tree t = OMP_CLAUSE_DECL (c);
4454 tree tem = NULL_TREE;
4455 if (processing_template_decl)
4456 return false;
4457 /* Need to evaluate side effects in the length expressions
4458 if any. */
4459 while (TREE_CODE (t) == TREE_LIST)
4461 if (TREE_VALUE (t) && TREE_SIDE_EFFECTS (TREE_VALUE (t)))
4463 if (tem == NULL_TREE)
4464 tem = TREE_VALUE (t);
4465 else
4466 tem = build2 (COMPOUND_EXPR, TREE_TYPE (tem),
4467 TREE_VALUE (t), tem);
4469 t = TREE_CHAIN (t);
4471 if (tem)
4472 first = build2 (COMPOUND_EXPR, TREE_TYPE (first), tem, first);
4473 OMP_CLAUSE_DECL (c) = first;
4475 else
4477 unsigned int num = types.length (), i;
4478 tree t, side_effects = NULL_TREE, size = NULL_TREE;
4479 tree condition = NULL_TREE;
4481 if (int_size_in_bytes (TREE_TYPE (first)) <= 0)
4482 maybe_zero_len = true;
4483 if (processing_template_decl && maybe_zero_len)
4484 return false;
4486 for (i = num, t = OMP_CLAUSE_DECL (c); i > 0;
4487 t = TREE_CHAIN (t))
4489 tree low_bound = TREE_PURPOSE (t);
4490 tree length = TREE_VALUE (t);
4492 i--;
4493 if (low_bound
4494 && TREE_CODE (low_bound) == INTEGER_CST
4495 && TYPE_PRECISION (TREE_TYPE (low_bound))
4496 > TYPE_PRECISION (sizetype))
4497 low_bound = fold_convert (sizetype, low_bound);
4498 if (length
4499 && TREE_CODE (length) == INTEGER_CST
4500 && TYPE_PRECISION (TREE_TYPE (length))
4501 > TYPE_PRECISION (sizetype))
4502 length = fold_convert (sizetype, length);
4503 if (low_bound == NULL_TREE)
4504 low_bound = integer_zero_node;
4505 if (!maybe_zero_len && i > first_non_one)
4507 if (integer_nonzerop (low_bound))
4508 goto do_warn_noncontiguous;
4509 if (length != NULL_TREE
4510 && TREE_CODE (length) == INTEGER_CST
4511 && TYPE_DOMAIN (types[i])
4512 && TYPE_MAX_VALUE (TYPE_DOMAIN (types[i]))
4513 && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])))
4514 == INTEGER_CST)
4516 tree size;
4517 size = size_binop (PLUS_EXPR,
4518 TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])),
4519 size_one_node);
4520 if (!tree_int_cst_equal (length, size))
4522 do_warn_noncontiguous:
4523 error_at (OMP_CLAUSE_LOCATION (c),
4524 "array section is not contiguous in %qs "
4525 "clause",
4526 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4527 return true;
4530 if (!processing_template_decl
4531 && length != NULL_TREE
4532 && TREE_SIDE_EFFECTS (length))
4534 if (side_effects == NULL_TREE)
4535 side_effects = length;
4536 else
4537 side_effects = build2 (COMPOUND_EXPR,
4538 TREE_TYPE (side_effects),
4539 length, side_effects);
4542 else if (processing_template_decl)
4543 continue;
4544 else
4546 tree l;
4548 if (i > first_non_one && length && integer_nonzerop (length))
4549 continue;
4550 if (length)
4551 l = fold_convert (sizetype, length);
4552 else
4554 l = size_binop (PLUS_EXPR,
4555 TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])),
4556 size_one_node);
4557 l = size_binop (MINUS_EXPR, l,
4558 fold_convert (sizetype, low_bound));
4560 if (i > first_non_one)
4562 l = fold_build2 (NE_EXPR, boolean_type_node, l,
4563 size_zero_node);
4564 if (condition == NULL_TREE)
4565 condition = l;
4566 else
4567 condition = fold_build2 (BIT_AND_EXPR, boolean_type_node,
4568 l, condition);
4570 else if (size == NULL_TREE)
4572 size = size_in_bytes (TREE_TYPE (types[i]));
4573 size = size_binop (MULT_EXPR, size, l);
4574 if (condition)
4575 size = fold_build3 (COND_EXPR, sizetype, condition,
4576 size, size_zero_node);
4578 else
4579 size = size_binop (MULT_EXPR, size, l);
4582 if (!processing_template_decl)
4584 if (side_effects)
4585 size = build2 (COMPOUND_EXPR, sizetype, side_effects, size);
4586 OMP_CLAUSE_DECL (c) = first;
4587 OMP_CLAUSE_SIZE (c) = size;
4588 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
4589 return false;
4590 tree c2 = build_omp_clause (OMP_CLAUSE_LOCATION (c),
4591 OMP_CLAUSE_MAP);
4592 OMP_CLAUSE_MAP_KIND (c2) = OMP_CLAUSE_MAP_POINTER;
4593 if (!cxx_mark_addressable (t))
4594 return false;
4595 OMP_CLAUSE_DECL (c2) = t;
4596 t = build_fold_addr_expr (first);
4597 t = fold_convert_loc (OMP_CLAUSE_LOCATION (c),
4598 ptrdiff_type_node, t);
4599 tree ptr = OMP_CLAUSE_DECL (c2);
4600 ptr = convert_from_reference (ptr);
4601 if (!POINTER_TYPE_P (TREE_TYPE (ptr)))
4602 ptr = build_fold_addr_expr (ptr);
4603 t = fold_build2_loc (OMP_CLAUSE_LOCATION (c), MINUS_EXPR,
4604 ptrdiff_type_node, t,
4605 fold_convert_loc (OMP_CLAUSE_LOCATION (c),
4606 ptrdiff_type_node, ptr));
4607 OMP_CLAUSE_SIZE (c2) = t;
4608 OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (c);
4609 OMP_CLAUSE_CHAIN (c) = c2;
4610 ptr = OMP_CLAUSE_DECL (c2);
4611 if (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
4612 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (ptr))))
4614 tree c3 = build_omp_clause (OMP_CLAUSE_LOCATION (c),
4615 OMP_CLAUSE_MAP);
4616 OMP_CLAUSE_MAP_KIND (c3) = OMP_CLAUSE_MAP_POINTER;
4617 OMP_CLAUSE_DECL (c3) = ptr;
4618 OMP_CLAUSE_DECL (c2) = convert_from_reference (ptr);
4619 OMP_CLAUSE_SIZE (c3) = size_zero_node;
4620 OMP_CLAUSE_CHAIN (c3) = OMP_CLAUSE_CHAIN (c2);
4621 OMP_CLAUSE_CHAIN (c2) = c3;
4625 return false;
4628 /* Return identifier to look up for omp declare reduction. */
4630 tree
4631 omp_reduction_id (enum tree_code reduction_code, tree reduction_id, tree type)
4633 const char *p = NULL;
4634 const char *m = NULL;
4635 switch (reduction_code)
4637 case PLUS_EXPR:
4638 case MULT_EXPR:
4639 case MINUS_EXPR:
4640 case BIT_AND_EXPR:
4641 case BIT_XOR_EXPR:
4642 case BIT_IOR_EXPR:
4643 case TRUTH_ANDIF_EXPR:
4644 case TRUTH_ORIF_EXPR:
4645 reduction_id = ansi_opname (reduction_code);
4646 break;
4647 case MIN_EXPR:
4648 p = "min";
4649 break;
4650 case MAX_EXPR:
4651 p = "max";
4652 break;
4653 default:
4654 break;
4657 if (p == NULL)
4659 if (TREE_CODE (reduction_id) != IDENTIFIER_NODE)
4660 return error_mark_node;
4661 p = IDENTIFIER_POINTER (reduction_id);
4664 if (type != NULL_TREE)
4665 m = mangle_type_string (TYPE_MAIN_VARIANT (type));
4667 const char prefix[] = "omp declare reduction ";
4668 size_t lenp = sizeof (prefix);
4669 if (strncmp (p, prefix, lenp - 1) == 0)
4670 lenp = 1;
4671 size_t len = strlen (p);
4672 size_t lenm = m ? strlen (m) + 1 : 0;
4673 char *name = XALLOCAVEC (char, lenp + len + lenm);
4674 if (lenp > 1)
4675 memcpy (name, prefix, lenp - 1);
4676 memcpy (name + lenp - 1, p, len + 1);
4677 if (m)
4679 name[lenp + len - 1] = '~';
4680 memcpy (name + lenp + len, m, lenm);
4682 return get_identifier (name);
4685 /* Lookup OpenMP UDR ID for TYPE, return the corresponding artificial
4686 FUNCTION_DECL or NULL_TREE if not found. */
4688 static tree
4689 omp_reduction_lookup (location_t loc, tree id, tree type, tree *baselinkp,
4690 vec<tree> *ambiguousp)
4692 tree orig_id = id;
4693 tree baselink = NULL_TREE;
4694 if (identifier_p (id))
4696 cp_id_kind idk;
4697 bool nonint_cst_expression_p;
4698 const char *error_msg;
4699 id = omp_reduction_id (ERROR_MARK, id, type);
4700 tree decl = lookup_name (id);
4701 if (decl == NULL_TREE)
4702 decl = error_mark_node;
4703 id = finish_id_expression (id, decl, NULL_TREE, &idk, false, true,
4704 &nonint_cst_expression_p, false, true, false,
4705 false, &error_msg, loc);
4706 if (idk == CP_ID_KIND_UNQUALIFIED
4707 && identifier_p (id))
4709 vec<tree, va_gc> *args = NULL;
4710 vec_safe_push (args, build_reference_type (type));
4711 id = perform_koenig_lookup (id, args, tf_none);
4714 else if (TREE_CODE (id) == SCOPE_REF)
4715 id = lookup_qualified_name (TREE_OPERAND (id, 0),
4716 omp_reduction_id (ERROR_MARK,
4717 TREE_OPERAND (id, 1),
4718 type),
4719 false, false);
4720 tree fns = id;
4721 if (id && is_overloaded_fn (id))
4722 id = get_fns (id);
4723 for (; id; id = OVL_NEXT (id))
4725 tree fndecl = OVL_CURRENT (id);
4726 if (TREE_CODE (fndecl) == FUNCTION_DECL)
4728 tree argtype = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl)));
4729 if (same_type_p (TREE_TYPE (argtype), type))
4730 break;
4733 if (id && BASELINK_P (fns))
4735 if (baselinkp)
4736 *baselinkp = fns;
4737 else
4738 baselink = fns;
4740 if (id == NULL_TREE && CLASS_TYPE_P (type) && TYPE_BINFO (type))
4742 vec<tree> ambiguous = vNULL;
4743 tree binfo = TYPE_BINFO (type), base_binfo, ret = NULL_TREE;
4744 unsigned int ix;
4745 if (ambiguousp == NULL)
4746 ambiguousp = &ambiguous;
4747 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
4749 id = omp_reduction_lookup (loc, orig_id, BINFO_TYPE (base_binfo),
4750 baselinkp ? baselinkp : &baselink,
4751 ambiguousp);
4752 if (id == NULL_TREE)
4753 continue;
4754 if (!ambiguousp->is_empty ())
4755 ambiguousp->safe_push (id);
4756 else if (ret != NULL_TREE)
4758 ambiguousp->safe_push (ret);
4759 ambiguousp->safe_push (id);
4760 ret = NULL_TREE;
4762 else
4763 ret = id;
4765 if (ambiguousp != &ambiguous)
4766 return ret;
4767 if (!ambiguous.is_empty ())
4769 const char *str = _("candidates are:");
4770 unsigned int idx;
4771 tree udr;
4772 error_at (loc, "user defined reduction lookup is ambiguous");
4773 FOR_EACH_VEC_ELT (ambiguous, idx, udr)
4775 inform (DECL_SOURCE_LOCATION (udr), "%s %#D", str, udr);
4776 if (idx == 0)
4777 str = get_spaces (str);
4779 ambiguous.release ();
4780 ret = error_mark_node;
4781 baselink = NULL_TREE;
4783 id = ret;
4785 if (id && baselink)
4786 perform_or_defer_access_check (BASELINK_BINFO (baselink),
4787 id, id, tf_warning_or_error);
4788 return id;
4791 /* Helper function for cp_parser_omp_declare_reduction_exprs
4792 and tsubst_omp_udr.
4793 Remove CLEANUP_STMT for data (omp_priv variable).
4794 Also append INIT_EXPR for DECL_INITIAL of omp_priv after its
4795 DECL_EXPR. */
4797 tree
4798 cp_remove_omp_priv_cleanup_stmt (tree *tp, int *walk_subtrees, void *data)
4800 if (TYPE_P (*tp))
4801 *walk_subtrees = 0;
4802 else if (TREE_CODE (*tp) == CLEANUP_STMT && CLEANUP_DECL (*tp) == (tree) data)
4803 *tp = CLEANUP_BODY (*tp);
4804 else if (TREE_CODE (*tp) == DECL_EXPR)
4806 tree decl = DECL_EXPR_DECL (*tp);
4807 if (!processing_template_decl
4808 && decl == (tree) data
4809 && DECL_INITIAL (decl)
4810 && DECL_INITIAL (decl) != error_mark_node)
4812 tree list = NULL_TREE;
4813 append_to_statement_list_force (*tp, &list);
4814 tree init_expr = build2 (INIT_EXPR, void_type_node,
4815 decl, DECL_INITIAL (decl));
4816 DECL_INITIAL (decl) = NULL_TREE;
4817 append_to_statement_list_force (init_expr, &list);
4818 *tp = list;
4821 return NULL_TREE;
4824 /* Data passed from cp_check_omp_declare_reduction to
4825 cp_check_omp_declare_reduction_r. */
4827 struct cp_check_omp_declare_reduction_data
4829 location_t loc;
4830 tree stmts[7];
4831 bool combiner_p;
4834 /* Helper function for cp_check_omp_declare_reduction, called via
4835 cp_walk_tree. */
4837 static tree
4838 cp_check_omp_declare_reduction_r (tree *tp, int *, void *data)
4840 struct cp_check_omp_declare_reduction_data *udr_data
4841 = (struct cp_check_omp_declare_reduction_data *) data;
4842 if (SSA_VAR_P (*tp)
4843 && !DECL_ARTIFICIAL (*tp)
4844 && *tp != DECL_EXPR_DECL (udr_data->stmts[udr_data->combiner_p ? 0 : 3])
4845 && *tp != DECL_EXPR_DECL (udr_data->stmts[udr_data->combiner_p ? 1 : 4]))
4847 location_t loc = udr_data->loc;
4848 if (udr_data->combiner_p)
4849 error_at (loc, "%<#pragma omp declare reduction%> combiner refers to "
4850 "variable %qD which is not %<omp_out%> nor %<omp_in%>",
4851 *tp);
4852 else
4853 error_at (loc, "%<#pragma omp declare reduction%> initializer refers "
4854 "to variable %qD which is not %<omp_priv%> nor "
4855 "%<omp_orig%>",
4856 *tp);
4857 return *tp;
4859 return NULL_TREE;
4862 /* Diagnose violation of OpenMP #pragma omp declare reduction restrictions. */
4864 void
4865 cp_check_omp_declare_reduction (tree udr)
4867 tree type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (udr)));
4868 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
4869 type = TREE_TYPE (type);
4870 int i;
4871 location_t loc = DECL_SOURCE_LOCATION (udr);
4873 if (type == error_mark_node)
4874 return;
4875 if (ARITHMETIC_TYPE_P (type))
4877 static enum tree_code predef_codes[]
4878 = { PLUS_EXPR, MULT_EXPR, MINUS_EXPR, BIT_AND_EXPR, BIT_XOR_EXPR,
4879 BIT_IOR_EXPR, TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR };
4880 for (i = 0; i < 8; i++)
4882 tree id = omp_reduction_id (predef_codes[i], NULL_TREE, NULL_TREE);
4883 const char *n1 = IDENTIFIER_POINTER (DECL_NAME (udr));
4884 const char *n2 = IDENTIFIER_POINTER (id);
4885 if (strncmp (n1, n2, IDENTIFIER_LENGTH (id)) == 0
4886 && (n1[IDENTIFIER_LENGTH (id)] == '~'
4887 || n1[IDENTIFIER_LENGTH (id)] == '\0'))
4888 break;
4891 if (i == 8
4892 && TREE_CODE (type) != COMPLEX_EXPR)
4894 const char prefix_minmax[] = "omp declare reduction m";
4895 size_t prefix_size = sizeof (prefix_minmax) - 1;
4896 const char *n = IDENTIFIER_POINTER (DECL_NAME (udr));
4897 if (strncmp (IDENTIFIER_POINTER (DECL_NAME (udr)),
4898 prefix_minmax, prefix_size) == 0
4899 && ((n[prefix_size] == 'i' && n[prefix_size + 1] == 'n')
4900 || (n[prefix_size] == 'a' && n[prefix_size + 1] == 'x'))
4901 && (n[prefix_size + 2] == '~' || n[prefix_size + 2] == '\0'))
4902 i = 0;
4904 if (i < 8)
4906 error_at (loc, "predeclared arithmetic type %qT in "
4907 "%<#pragma omp declare reduction%>", type);
4908 return;
4911 else if (TREE_CODE (type) == FUNCTION_TYPE
4912 || TREE_CODE (type) == METHOD_TYPE
4913 || TREE_CODE (type) == ARRAY_TYPE)
4915 error_at (loc, "function or array type %qT in "
4916 "%<#pragma omp declare reduction%>", type);
4917 return;
4919 else if (TREE_CODE (type) == REFERENCE_TYPE)
4921 error_at (loc, "reference type %qT in %<#pragma omp declare reduction%>",
4922 type);
4923 return;
4925 else if (TYPE_QUALS_NO_ADDR_SPACE (type))
4927 error_at (loc, "const, volatile or __restrict qualified type %qT in "
4928 "%<#pragma omp declare reduction%>", type);
4929 return;
4932 tree body = DECL_SAVED_TREE (udr);
4933 if (body == NULL_TREE || TREE_CODE (body) != STATEMENT_LIST)
4934 return;
4936 tree_stmt_iterator tsi;
4937 struct cp_check_omp_declare_reduction_data data;
4938 memset (data.stmts, 0, sizeof data.stmts);
4939 for (i = 0, tsi = tsi_start (body);
4940 i < 7 && !tsi_end_p (tsi);
4941 i++, tsi_next (&tsi))
4942 data.stmts[i] = tsi_stmt (tsi);
4943 data.loc = loc;
4944 gcc_assert (tsi_end_p (tsi));
4945 if (i >= 3)
4947 gcc_assert (TREE_CODE (data.stmts[0]) == DECL_EXPR
4948 && TREE_CODE (data.stmts[1]) == DECL_EXPR);
4949 if (TREE_NO_WARNING (DECL_EXPR_DECL (data.stmts[0])))
4950 return;
4951 data.combiner_p = true;
4952 if (cp_walk_tree (&data.stmts[2], cp_check_omp_declare_reduction_r,
4953 &data, NULL))
4954 TREE_NO_WARNING (DECL_EXPR_DECL (data.stmts[0])) = 1;
4956 if (i >= 6)
4958 gcc_assert (TREE_CODE (data.stmts[3]) == DECL_EXPR
4959 && TREE_CODE (data.stmts[4]) == DECL_EXPR);
4960 data.combiner_p = false;
4961 if (cp_walk_tree (&data.stmts[5], cp_check_omp_declare_reduction_r,
4962 &data, NULL)
4963 || cp_walk_tree (&DECL_INITIAL (DECL_EXPR_DECL (data.stmts[3])),
4964 cp_check_omp_declare_reduction_r, &data, NULL))
4965 TREE_NO_WARNING (DECL_EXPR_DECL (data.stmts[0])) = 1;
4966 if (i == 7)
4967 gcc_assert (TREE_CODE (data.stmts[6]) == DECL_EXPR);
4971 /* Helper function of finish_omp_clauses. Clone STMT as if we were making
4972 an inline call. But, remap
4973 the OMP_DECL1 VAR_DECL (omp_out resp. omp_orig) to PLACEHOLDER
4974 and OMP_DECL2 VAR_DECL (omp_in resp. omp_priv) to DECL. */
4976 static tree
4977 clone_omp_udr (tree stmt, tree omp_decl1, tree omp_decl2,
4978 tree decl, tree placeholder)
4980 copy_body_data id;
4981 struct pointer_map_t *decl_map = pointer_map_create ();
4983 *pointer_map_insert (decl_map, omp_decl1) = placeholder;
4984 *pointer_map_insert (decl_map, omp_decl2) = decl;
4985 memset (&id, 0, sizeof (id));
4986 id.src_fn = DECL_CONTEXT (omp_decl1);
4987 id.dst_fn = current_function_decl;
4988 id.src_cfun = DECL_STRUCT_FUNCTION (id.src_fn);
4989 id.decl_map = decl_map;
4991 id.copy_decl = copy_decl_no_change;
4992 id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4993 id.transform_new_cfg = true;
4994 id.transform_return_to_modify = false;
4995 id.transform_lang_insert_block = NULL;
4996 id.eh_lp_nr = 0;
4997 walk_tree (&stmt, copy_tree_body_r, &id, NULL);
4998 pointer_map_destroy (decl_map);
4999 return stmt;
5002 /* Helper function of finish_omp_clauses, called via cp_walk_tree.
5003 Find OMP_CLAUSE_PLACEHOLDER (passed in DATA) in *TP. */
5005 static tree
5006 find_omp_placeholder_r (tree *tp, int *, void *data)
5008 if (*tp == (tree) data)
5009 return *tp;
5010 return NULL_TREE;
5013 /* Helper function of finish_omp_clauses. Handle OMP_CLAUSE_REDUCTION C.
5014 Return true if there is some error and the clause should be removed. */
5016 static bool
5017 finish_omp_reduction_clause (tree c, bool *need_default_ctor, bool *need_dtor)
5019 tree t = OMP_CLAUSE_DECL (c);
5020 bool predefined = false;
5021 tree type = TREE_TYPE (t);
5022 if (TREE_CODE (type) == REFERENCE_TYPE)
5023 type = TREE_TYPE (type);
5024 if (type == error_mark_node)
5025 return true;
5026 else if (ARITHMETIC_TYPE_P (type))
5027 switch (OMP_CLAUSE_REDUCTION_CODE (c))
5029 case PLUS_EXPR:
5030 case MULT_EXPR:
5031 case MINUS_EXPR:
5032 predefined = true;
5033 break;
5034 case MIN_EXPR:
5035 case MAX_EXPR:
5036 if (TREE_CODE (type) == COMPLEX_TYPE)
5037 break;
5038 predefined = true;
5039 break;
5040 case BIT_AND_EXPR:
5041 case BIT_IOR_EXPR:
5042 case BIT_XOR_EXPR:
5043 if (FLOAT_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
5044 break;
5045 predefined = true;
5046 break;
5047 case TRUTH_ANDIF_EXPR:
5048 case TRUTH_ORIF_EXPR:
5049 if (FLOAT_TYPE_P (type))
5050 break;
5051 predefined = true;
5052 break;
5053 default:
5054 break;
5056 else if (TREE_CODE (type) == ARRAY_TYPE || TYPE_READONLY (type))
5058 error ("%qE has invalid type for %<reduction%>", t);
5059 return true;
5061 else if (!processing_template_decl)
5063 t = require_complete_type (t);
5064 if (t == error_mark_node)
5065 return true;
5066 OMP_CLAUSE_DECL (c) = t;
5069 if (predefined)
5071 OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = NULL_TREE;
5072 return false;
5074 else if (processing_template_decl)
5075 return false;
5077 tree id = OMP_CLAUSE_REDUCTION_PLACEHOLDER (c);
5079 type = TYPE_MAIN_VARIANT (TREE_TYPE (t));
5080 if (TREE_CODE (type) == REFERENCE_TYPE)
5081 type = TREE_TYPE (type);
5082 OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = NULL_TREE;
5083 if (id == NULL_TREE)
5084 id = omp_reduction_id (OMP_CLAUSE_REDUCTION_CODE (c),
5085 NULL_TREE, NULL_TREE);
5086 id = omp_reduction_lookup (OMP_CLAUSE_LOCATION (c), id, type, NULL, NULL);
5087 if (id)
5089 if (id == error_mark_node)
5090 return true;
5091 id = OVL_CURRENT (id);
5092 mark_used (id);
5093 tree body = DECL_SAVED_TREE (id);
5094 if (TREE_CODE (body) == STATEMENT_LIST)
5096 tree_stmt_iterator tsi;
5097 tree placeholder = NULL_TREE;
5098 int i;
5099 tree stmts[7];
5100 tree atype = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (id)));
5101 atype = TREE_TYPE (atype);
5102 bool need_static_cast = !same_type_p (type, atype);
5103 memset (stmts, 0, sizeof stmts);
5104 for (i = 0, tsi = tsi_start (body);
5105 i < 7 && !tsi_end_p (tsi);
5106 i++, tsi_next (&tsi))
5107 stmts[i] = tsi_stmt (tsi);
5108 gcc_assert (tsi_end_p (tsi));
5110 if (i >= 3)
5112 gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
5113 && TREE_CODE (stmts[1]) == DECL_EXPR);
5114 placeholder = build_lang_decl (VAR_DECL, NULL_TREE, type);
5115 DECL_ARTIFICIAL (placeholder) = 1;
5116 DECL_IGNORED_P (placeholder) = 1;
5117 OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = placeholder;
5118 if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[0])))
5119 cxx_mark_addressable (placeholder);
5120 if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[1]))
5121 && TREE_CODE (TREE_TYPE (OMP_CLAUSE_DECL (c)))
5122 != REFERENCE_TYPE)
5123 cxx_mark_addressable (OMP_CLAUSE_DECL (c));
5124 tree omp_out = placeholder;
5125 tree omp_in = convert_from_reference (OMP_CLAUSE_DECL (c));
5126 if (need_static_cast)
5128 tree rtype = build_reference_type (atype);
5129 omp_out = build_static_cast (rtype, omp_out,
5130 tf_warning_or_error);
5131 omp_in = build_static_cast (rtype, omp_in,
5132 tf_warning_or_error);
5133 if (omp_out == error_mark_node || omp_in == error_mark_node)
5134 return true;
5135 omp_out = convert_from_reference (omp_out);
5136 omp_in = convert_from_reference (omp_in);
5138 OMP_CLAUSE_REDUCTION_MERGE (c)
5139 = clone_omp_udr (stmts[2], DECL_EXPR_DECL (stmts[0]),
5140 DECL_EXPR_DECL (stmts[1]), omp_in, omp_out);
5142 if (i >= 6)
5144 gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
5145 && TREE_CODE (stmts[4]) == DECL_EXPR);
5146 if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[3])))
5147 cxx_mark_addressable (OMP_CLAUSE_DECL (c));
5148 if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[4])))
5149 cxx_mark_addressable (placeholder);
5150 tree omp_priv = convert_from_reference (OMP_CLAUSE_DECL (c));
5151 tree omp_orig = placeholder;
5152 if (need_static_cast)
5154 if (i == 7)
5156 error_at (OMP_CLAUSE_LOCATION (c),
5157 "user defined reduction with constructor "
5158 "initializer for base class %qT", atype);
5159 return true;
5161 tree rtype = build_reference_type (atype);
5162 omp_priv = build_static_cast (rtype, omp_priv,
5163 tf_warning_or_error);
5164 omp_orig = build_static_cast (rtype, omp_orig,
5165 tf_warning_or_error);
5166 if (omp_priv == error_mark_node
5167 || omp_orig == error_mark_node)
5168 return true;
5169 omp_priv = convert_from_reference (omp_priv);
5170 omp_orig = convert_from_reference (omp_orig);
5172 if (i == 6)
5173 *need_default_ctor = true;
5174 OMP_CLAUSE_REDUCTION_INIT (c)
5175 = clone_omp_udr (stmts[5], DECL_EXPR_DECL (stmts[4]),
5176 DECL_EXPR_DECL (stmts[3]),
5177 omp_priv, omp_orig);
5178 if (cp_walk_tree (&OMP_CLAUSE_REDUCTION_INIT (c),
5179 find_omp_placeholder_r, placeholder, NULL))
5180 OMP_CLAUSE_REDUCTION_OMP_ORIG_REF (c) = 1;
5182 else if (i >= 3)
5184 if (CLASS_TYPE_P (type) && !pod_type_p (type))
5185 *need_default_ctor = true;
5186 else
5188 tree init;
5189 tree v = convert_from_reference (t);
5190 if (AGGREGATE_TYPE_P (TREE_TYPE (v)))
5191 init = build_constructor (TREE_TYPE (v), NULL);
5192 else
5193 init = fold_convert (TREE_TYPE (v), integer_zero_node);
5194 OMP_CLAUSE_REDUCTION_INIT (c)
5195 = build2 (INIT_EXPR, TREE_TYPE (v), v, init);
5200 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
5201 *need_dtor = true;
5202 else
5204 error ("user defined reduction not found for %qD", t);
5205 return true;
5207 return false;
5210 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
5211 Remove any elements from the list that are invalid. */
5213 tree
5214 finish_omp_clauses (tree clauses)
5216 bitmap_head generic_head, firstprivate_head, lastprivate_head;
5217 bitmap_head aligned_head;
5218 tree c, t, *pc = &clauses;
5219 bool branch_seen = false;
5220 bool copyprivate_seen = false;
5222 bitmap_obstack_initialize (NULL);
5223 bitmap_initialize (&generic_head, &bitmap_default_obstack);
5224 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
5225 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
5226 bitmap_initialize (&aligned_head, &bitmap_default_obstack);
5228 for (pc = &clauses, c = clauses; c ; c = *pc)
5230 bool remove = false;
5232 switch (OMP_CLAUSE_CODE (c))
5234 case OMP_CLAUSE_SHARED:
5235 goto check_dup_generic;
5236 case OMP_CLAUSE_PRIVATE:
5237 goto check_dup_generic;
5238 case OMP_CLAUSE_REDUCTION:
5239 goto check_dup_generic;
5240 case OMP_CLAUSE_COPYPRIVATE:
5241 copyprivate_seen = true;
5242 goto check_dup_generic;
5243 case OMP_CLAUSE_COPYIN:
5244 goto check_dup_generic;
5245 case OMP_CLAUSE_LINEAR:
5246 t = OMP_CLAUSE_DECL (c);
5247 if (!type_dependent_expression_p (t)
5248 && !INTEGRAL_TYPE_P (TREE_TYPE (t))
5249 && TREE_CODE (TREE_TYPE (t)) != POINTER_TYPE)
5251 error ("linear clause applied to non-integral non-pointer "
5252 "variable with %qT type", TREE_TYPE (t));
5253 remove = true;
5254 break;
5256 t = OMP_CLAUSE_LINEAR_STEP (c);
5257 if (t == NULL_TREE)
5258 t = integer_one_node;
5259 if (t == error_mark_node)
5261 remove = true;
5262 break;
5264 else if (!type_dependent_expression_p (t)
5265 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5267 error ("linear step expression must be integral");
5268 remove = true;
5269 break;
5271 else
5273 t = mark_rvalue_use (t);
5274 if (!processing_template_decl)
5276 if (TREE_CODE (OMP_CLAUSE_DECL (c)) == PARM_DECL)
5277 t = maybe_constant_value (t);
5278 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5279 if (TREE_CODE (TREE_TYPE (OMP_CLAUSE_DECL (c)))
5280 == POINTER_TYPE)
5282 t = pointer_int_sum (OMP_CLAUSE_LOCATION (c), PLUS_EXPR,
5283 OMP_CLAUSE_DECL (c), t);
5284 t = fold_build2_loc (OMP_CLAUSE_LOCATION (c),
5285 MINUS_EXPR, sizetype, t,
5286 OMP_CLAUSE_DECL (c));
5287 if (t == error_mark_node)
5289 remove = true;
5290 break;
5293 else
5294 t = fold_convert (TREE_TYPE (OMP_CLAUSE_DECL (c)), t);
5296 OMP_CLAUSE_LINEAR_STEP (c) = t;
5298 goto check_dup_generic;
5299 check_dup_generic:
5300 t = OMP_CLAUSE_DECL (c);
5301 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5303 if (processing_template_decl)
5304 break;
5305 if (DECL_P (t))
5306 error ("%qD is not a variable in clause %qs", t,
5307 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5308 else
5309 error ("%qE is not a variable in clause %qs", t,
5310 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5311 remove = true;
5313 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
5314 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
5315 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
5317 error ("%qD appears more than once in data clauses", t);
5318 remove = true;
5320 else
5321 bitmap_set_bit (&generic_head, DECL_UID (t));
5322 break;
5324 case OMP_CLAUSE_FIRSTPRIVATE:
5325 t = OMP_CLAUSE_DECL (c);
5326 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5328 if (processing_template_decl)
5329 break;
5330 if (DECL_P (t))
5331 error ("%qD is not a variable in clause %<firstprivate%>", t);
5332 else
5333 error ("%qE is not a variable in clause %<firstprivate%>", t);
5334 remove = true;
5336 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
5337 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
5339 error ("%qD appears more than once in data clauses", t);
5340 remove = true;
5342 else
5343 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
5344 break;
5346 case OMP_CLAUSE_LASTPRIVATE:
5347 t = OMP_CLAUSE_DECL (c);
5348 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5350 if (processing_template_decl)
5351 break;
5352 if (DECL_P (t))
5353 error ("%qD is not a variable in clause %<lastprivate%>", t);
5354 else
5355 error ("%qE is not a variable in clause %<lastprivate%>", t);
5356 remove = true;
5358 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
5359 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
5361 error ("%qD appears more than once in data clauses", t);
5362 remove = true;
5364 else
5365 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
5366 break;
5368 case OMP_CLAUSE_IF:
5369 t = OMP_CLAUSE_IF_EXPR (c);
5370 t = maybe_convert_cond (t);
5371 if (t == error_mark_node)
5372 remove = true;
5373 else if (!processing_template_decl)
5374 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5375 OMP_CLAUSE_IF_EXPR (c) = t;
5376 break;
5378 case OMP_CLAUSE_FINAL:
5379 t = OMP_CLAUSE_FINAL_EXPR (c);
5380 t = maybe_convert_cond (t);
5381 if (t == error_mark_node)
5382 remove = true;
5383 else if (!processing_template_decl)
5384 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5385 OMP_CLAUSE_FINAL_EXPR (c) = t;
5386 break;
5388 case OMP_CLAUSE_NUM_THREADS:
5389 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
5390 if (t == error_mark_node)
5391 remove = true;
5392 else if (!type_dependent_expression_p (t)
5393 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5395 error ("num_threads expression must be integral");
5396 remove = true;
5398 else
5400 t = mark_rvalue_use (t);
5401 if (!processing_template_decl)
5402 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5403 OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
5405 break;
5407 case OMP_CLAUSE_SCHEDULE:
5408 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
5409 if (t == NULL)
5411 else if (t == error_mark_node)
5412 remove = true;
5413 else if (!type_dependent_expression_p (t)
5414 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5416 error ("schedule chunk size expression must be integral");
5417 remove = true;
5419 else
5421 t = mark_rvalue_use (t);
5422 if (!processing_template_decl)
5423 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5424 OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
5426 break;
5428 case OMP_CLAUSE_SIMDLEN:
5429 case OMP_CLAUSE_SAFELEN:
5430 t = OMP_CLAUSE_OPERAND (c, 0);
5431 if (t == error_mark_node)
5432 remove = true;
5433 else if (!type_dependent_expression_p (t)
5434 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5436 error ("%qs length expression must be integral",
5437 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5438 remove = true;
5440 else
5442 t = mark_rvalue_use (t);
5443 t = maybe_constant_value (t);
5444 if (!processing_template_decl)
5446 if (TREE_CODE (t) != INTEGER_CST
5447 || tree_int_cst_sgn (t) != 1)
5449 error ("%qs length expression must be positive constant"
5450 " integer expression",
5451 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5452 remove = true;
5455 OMP_CLAUSE_OPERAND (c, 0) = t;
5457 break;
5459 case OMP_CLAUSE_NUM_TEAMS:
5460 t = OMP_CLAUSE_NUM_TEAMS_EXPR (c);
5461 if (t == error_mark_node)
5462 remove = true;
5463 else if (!type_dependent_expression_p (t)
5464 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5466 error ("%<num_teams%> expression must be integral");
5467 remove = true;
5469 else
5471 t = mark_rvalue_use (t);
5472 if (!processing_template_decl)
5473 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5474 OMP_CLAUSE_NUM_TEAMS_EXPR (c) = t;
5476 break;
5478 case OMP_CLAUSE_THREAD_LIMIT:
5479 t = OMP_CLAUSE_THREAD_LIMIT_EXPR (c);
5480 if (t == error_mark_node)
5481 remove = true;
5482 else if (!type_dependent_expression_p (t)
5483 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5485 error ("%<thread_limit%> expression must be integral");
5486 remove = true;
5488 else
5490 t = mark_rvalue_use (t);
5491 if (!processing_template_decl)
5492 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5493 OMP_CLAUSE_THREAD_LIMIT_EXPR (c) = t;
5495 break;
5497 case OMP_CLAUSE_DEVICE:
5498 t = OMP_CLAUSE_DEVICE_ID (c);
5499 if (t == error_mark_node)
5500 remove = true;
5501 else if (!type_dependent_expression_p (t)
5502 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5504 error ("%<device%> id must be integral");
5505 remove = true;
5507 else
5509 t = mark_rvalue_use (t);
5510 if (!processing_template_decl)
5511 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5512 OMP_CLAUSE_DEVICE_ID (c) = t;
5514 break;
5516 case OMP_CLAUSE_DIST_SCHEDULE:
5517 t = OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (c);
5518 if (t == NULL)
5520 else if (t == error_mark_node)
5521 remove = true;
5522 else if (!type_dependent_expression_p (t)
5523 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5525 error ("%<dist_schedule%> chunk size expression must be "
5526 "integral");
5527 remove = true;
5529 else
5531 t = mark_rvalue_use (t);
5532 if (!processing_template_decl)
5533 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5534 OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (c) = t;
5536 break;
5538 case OMP_CLAUSE_ALIGNED:
5539 t = OMP_CLAUSE_DECL (c);
5540 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
5542 if (processing_template_decl)
5543 break;
5544 if (DECL_P (t))
5545 error ("%qD is not a variable in %<aligned%> clause", t);
5546 else
5547 error ("%qE is not a variable in %<aligned%> clause", t);
5548 remove = true;
5550 else if (!type_dependent_expression_p (t)
5551 && TREE_CODE (TREE_TYPE (t)) != POINTER_TYPE
5552 && TREE_CODE (TREE_TYPE (t)) != ARRAY_TYPE
5553 && (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE
5554 || (!POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (t)))
5555 && (TREE_CODE (TREE_TYPE (TREE_TYPE (t)))
5556 != ARRAY_TYPE))))
5558 error_at (OMP_CLAUSE_LOCATION (c),
5559 "%qE in %<aligned%> clause is neither a pointer nor "
5560 "an array nor a reference to pointer or array", t);
5561 remove = true;
5563 else if (bitmap_bit_p (&aligned_head, DECL_UID (t)))
5565 error ("%qD appears more than once in %<aligned%> clauses", t);
5566 remove = true;
5568 else
5569 bitmap_set_bit (&aligned_head, DECL_UID (t));
5570 t = OMP_CLAUSE_ALIGNED_ALIGNMENT (c);
5571 if (t == error_mark_node)
5572 remove = true;
5573 else if (t == NULL_TREE)
5574 break;
5575 else if (!type_dependent_expression_p (t)
5576 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5578 error ("%<aligned%> clause alignment expression must "
5579 "be integral");
5580 remove = true;
5582 else
5584 t = mark_rvalue_use (t);
5585 t = maybe_constant_value (t);
5586 if (!processing_template_decl)
5588 if (TREE_CODE (t) != INTEGER_CST
5589 || tree_int_cst_sgn (t) != 1)
5591 error ("%<aligned%> clause alignment expression must be "
5592 "positive constant integer expression");
5593 remove = true;
5596 OMP_CLAUSE_ALIGNED_ALIGNMENT (c) = t;
5598 break;
5600 case OMP_CLAUSE_DEPEND:
5601 t = OMP_CLAUSE_DECL (c);
5602 if (TREE_CODE (t) == TREE_LIST)
5604 if (handle_omp_array_sections (c))
5605 remove = true;
5606 break;
5608 if (t == error_mark_node)
5609 remove = true;
5610 else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
5612 if (processing_template_decl)
5613 break;
5614 if (DECL_P (t))
5615 error ("%qD is not a variable in %<depend%> clause", t);
5616 else
5617 error ("%qE is not a variable in %<depend%> clause", t);
5618 remove = true;
5620 else if (!processing_template_decl
5621 && !cxx_mark_addressable (t))
5622 remove = true;
5623 break;
5625 case OMP_CLAUSE_MAP:
5626 case OMP_CLAUSE_TO:
5627 case OMP_CLAUSE_FROM:
5628 t = OMP_CLAUSE_DECL (c);
5629 if (TREE_CODE (t) == TREE_LIST)
5631 if (handle_omp_array_sections (c))
5632 remove = true;
5633 else
5635 t = OMP_CLAUSE_DECL (c);
5636 if (TREE_CODE (t) != TREE_LIST
5637 && !type_dependent_expression_p (t)
5638 && !cp_omp_mappable_type (TREE_TYPE (t)))
5640 error_at (OMP_CLAUSE_LOCATION (c),
5641 "array section does not have mappable type "
5642 "in %qs clause",
5643 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5644 remove = true;
5647 break;
5649 if (t == error_mark_node)
5650 remove = true;
5651 else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
5653 if (processing_template_decl)
5654 break;
5655 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
5656 && OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_POINTER)
5657 break;
5658 if (DECL_P (t))
5659 error ("%qD is not a variable in %qs clause", t,
5660 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5661 else
5662 error ("%qE is not a variable in %qs clause", t,
5663 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5664 remove = true;
5666 else if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
5668 error ("%qD is threadprivate variable in %qs clause", t,
5669 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5670 remove = true;
5672 else if (!processing_template_decl
5673 && TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE
5674 && !cxx_mark_addressable (t))
5675 remove = true;
5676 else if (!(OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
5677 && OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_POINTER)
5678 && !type_dependent_expression_p (t)
5679 && !cp_omp_mappable_type ((TREE_CODE (TREE_TYPE (t))
5680 == REFERENCE_TYPE)
5681 ? TREE_TYPE (TREE_TYPE (t))
5682 : TREE_TYPE (t)))
5684 error_at (OMP_CLAUSE_LOCATION (c),
5685 "%qD does not have a mappable type in %qs clause", t,
5686 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5687 remove = true;
5689 else if (bitmap_bit_p (&generic_head, DECL_UID (t)))
5691 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
5692 error ("%qD appears more than once in motion clauses", t);
5693 else
5694 error ("%qD appears more than once in map clauses", t);
5695 remove = true;
5697 else
5698 bitmap_set_bit (&generic_head, DECL_UID (t));
5699 break;
5701 case OMP_CLAUSE_UNIFORM:
5702 t = OMP_CLAUSE_DECL (c);
5703 if (TREE_CODE (t) != PARM_DECL)
5705 if (processing_template_decl)
5706 break;
5707 if (DECL_P (t))
5708 error ("%qD is not an argument in %<uniform%> clause", t);
5709 else
5710 error ("%qE is not an argument in %<uniform%> clause", t);
5711 remove = true;
5712 break;
5714 goto check_dup_generic;
5716 case OMP_CLAUSE_NOWAIT:
5717 case OMP_CLAUSE_ORDERED:
5718 case OMP_CLAUSE_DEFAULT:
5719 case OMP_CLAUSE_UNTIED:
5720 case OMP_CLAUSE_COLLAPSE:
5721 case OMP_CLAUSE_MERGEABLE:
5722 case OMP_CLAUSE_PARALLEL:
5723 case OMP_CLAUSE_FOR:
5724 case OMP_CLAUSE_SECTIONS:
5725 case OMP_CLAUSE_TASKGROUP:
5726 case OMP_CLAUSE_PROC_BIND:
5727 break;
5729 case OMP_CLAUSE_INBRANCH:
5730 case OMP_CLAUSE_NOTINBRANCH:
5731 if (branch_seen)
5733 error ("%<inbranch%> clause is incompatible with "
5734 "%<notinbranch%>");
5735 remove = true;
5737 branch_seen = true;
5738 break;
5740 default:
5741 gcc_unreachable ();
5744 if (remove)
5745 *pc = OMP_CLAUSE_CHAIN (c);
5746 else
5747 pc = &OMP_CLAUSE_CHAIN (c);
5750 for (pc = &clauses, c = clauses; c ; c = *pc)
5752 enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
5753 bool remove = false;
5754 bool need_complete_non_reference = false;
5755 bool need_default_ctor = false;
5756 bool need_copy_ctor = false;
5757 bool need_copy_assignment = false;
5758 bool need_implicitly_determined = false;
5759 bool need_dtor = false;
5760 tree type, inner_type;
5762 switch (c_kind)
5764 case OMP_CLAUSE_SHARED:
5765 need_implicitly_determined = true;
5766 break;
5767 case OMP_CLAUSE_PRIVATE:
5768 need_complete_non_reference = true;
5769 need_default_ctor = true;
5770 need_dtor = true;
5771 need_implicitly_determined = true;
5772 break;
5773 case OMP_CLAUSE_FIRSTPRIVATE:
5774 need_complete_non_reference = true;
5775 need_copy_ctor = true;
5776 need_dtor = true;
5777 need_implicitly_determined = true;
5778 break;
5779 case OMP_CLAUSE_LASTPRIVATE:
5780 need_complete_non_reference = true;
5781 need_copy_assignment = true;
5782 need_implicitly_determined = true;
5783 break;
5784 case OMP_CLAUSE_REDUCTION:
5785 need_implicitly_determined = true;
5786 break;
5787 case OMP_CLAUSE_COPYPRIVATE:
5788 need_copy_assignment = true;
5789 break;
5790 case OMP_CLAUSE_COPYIN:
5791 need_copy_assignment = true;
5792 break;
5793 case OMP_CLAUSE_NOWAIT:
5794 if (copyprivate_seen)
5796 error_at (OMP_CLAUSE_LOCATION (c),
5797 "%<nowait%> clause must not be used together "
5798 "with %<copyprivate%>");
5799 *pc = OMP_CLAUSE_CHAIN (c);
5800 continue;
5802 /* FALLTHRU */
5803 default:
5804 pc = &OMP_CLAUSE_CHAIN (c);
5805 continue;
5808 t = OMP_CLAUSE_DECL (c);
5809 if (processing_template_decl
5810 && !VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5812 pc = &OMP_CLAUSE_CHAIN (c);
5813 continue;
5816 switch (c_kind)
5818 case OMP_CLAUSE_LASTPRIVATE:
5819 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
5821 need_default_ctor = true;
5822 need_dtor = true;
5824 break;
5826 case OMP_CLAUSE_REDUCTION:
5827 if (finish_omp_reduction_clause (c, &need_default_ctor,
5828 &need_dtor))
5829 remove = true;
5830 else
5831 t = OMP_CLAUSE_DECL (c);
5832 break;
5834 case OMP_CLAUSE_COPYIN:
5835 if (!VAR_P (t) || !DECL_THREAD_LOCAL_P (t))
5837 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
5838 remove = true;
5840 break;
5842 default:
5843 break;
5846 if (need_complete_non_reference || need_copy_assignment)
5848 t = require_complete_type (t);
5849 if (t == error_mark_node)
5850 remove = true;
5851 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
5852 && need_complete_non_reference)
5854 error ("%qE has reference type for %qs", t,
5855 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5856 remove = true;
5859 if (need_implicitly_determined)
5861 const char *share_name = NULL;
5863 if (VAR_P (t) && DECL_THREAD_LOCAL_P (t))
5864 share_name = "threadprivate";
5865 else switch (cxx_omp_predetermined_sharing (t))
5867 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
5868 break;
5869 case OMP_CLAUSE_DEFAULT_SHARED:
5870 /* const vars may be specified in firstprivate clause. */
5871 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
5872 && cxx_omp_const_qual_no_mutable (t))
5873 break;
5874 share_name = "shared";
5875 break;
5876 case OMP_CLAUSE_DEFAULT_PRIVATE:
5877 share_name = "private";
5878 break;
5879 default:
5880 gcc_unreachable ();
5882 if (share_name)
5884 error ("%qE is predetermined %qs for %qs",
5885 t, share_name, omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5886 remove = true;
5890 /* We're interested in the base element, not arrays. */
5891 inner_type = type = TREE_TYPE (t);
5892 while (TREE_CODE (inner_type) == ARRAY_TYPE)
5893 inner_type = TREE_TYPE (inner_type);
5895 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
5896 && TREE_CODE (inner_type) == REFERENCE_TYPE)
5897 inner_type = TREE_TYPE (inner_type);
5899 /* Check for special function availability by building a call to one.
5900 Save the results, because later we won't be in the right context
5901 for making these queries. */
5902 if (CLASS_TYPE_P (inner_type)
5903 && COMPLETE_TYPE_P (inner_type)
5904 && (need_default_ctor || need_copy_ctor
5905 || need_copy_assignment || need_dtor)
5906 && !type_dependent_expression_p (t)
5907 && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
5908 need_copy_ctor, need_copy_assignment,
5909 need_dtor))
5910 remove = true;
5912 if (remove)
5913 *pc = OMP_CLAUSE_CHAIN (c);
5914 else
5915 pc = &OMP_CLAUSE_CHAIN (c);
5918 bitmap_obstack_release (NULL);
5919 return clauses;
5922 /* For all variables in the tree_list VARS, mark them as thread local. */
5924 void
5925 finish_omp_threadprivate (tree vars)
5927 tree t;
5929 /* Mark every variable in VARS to be assigned thread local storage. */
5930 for (t = vars; t; t = TREE_CHAIN (t))
5932 tree v = TREE_PURPOSE (t);
5934 if (error_operand_p (v))
5936 else if (!VAR_P (v))
5937 error ("%<threadprivate%> %qD is not file, namespace "
5938 "or block scope variable", v);
5939 /* If V had already been marked threadprivate, it doesn't matter
5940 whether it had been used prior to this point. */
5941 else if (TREE_USED (v)
5942 && (DECL_LANG_SPECIFIC (v) == NULL
5943 || !CP_DECL_THREADPRIVATE_P (v)))
5944 error ("%qE declared %<threadprivate%> after first use", v);
5945 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
5946 error ("automatic variable %qE cannot be %<threadprivate%>", v);
5947 else if (! COMPLETE_TYPE_P (complete_type (TREE_TYPE (v))))
5948 error ("%<threadprivate%> %qE has incomplete type", v);
5949 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
5950 && CP_DECL_CONTEXT (v) != current_class_type)
5951 error ("%<threadprivate%> %qE directive not "
5952 "in %qT definition", v, CP_DECL_CONTEXT (v));
5953 else
5955 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
5956 if (DECL_LANG_SPECIFIC (v) == NULL)
5958 retrofit_lang_decl (v);
5960 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
5961 after the allocation of the lang_decl structure. */
5962 if (DECL_DISCRIMINATOR_P (v))
5963 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
5966 if (! DECL_THREAD_LOCAL_P (v))
5968 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
5969 /* If rtl has been already set for this var, call
5970 make_decl_rtl once again, so that encode_section_info
5971 has a chance to look at the new decl flags. */
5972 if (DECL_RTL_SET_P (v))
5973 make_decl_rtl (v);
5975 CP_DECL_THREADPRIVATE_P (v) = 1;
5980 /* Build an OpenMP structured block. */
5982 tree
5983 begin_omp_structured_block (void)
5985 return do_pushlevel (sk_omp);
5988 tree
5989 finish_omp_structured_block (tree block)
5991 return do_poplevel (block);
5994 /* Similarly, except force the retention of the BLOCK. */
5996 tree
5997 begin_omp_parallel (void)
5999 keep_next_level (true);
6000 return begin_omp_structured_block ();
6003 tree
6004 finish_omp_parallel (tree clauses, tree body)
6006 tree stmt;
6008 body = finish_omp_structured_block (body);
6010 stmt = make_node (OMP_PARALLEL);
6011 TREE_TYPE (stmt) = void_type_node;
6012 OMP_PARALLEL_CLAUSES (stmt) = clauses;
6013 OMP_PARALLEL_BODY (stmt) = body;
6015 return add_stmt (stmt);
6018 tree
6019 begin_omp_task (void)
6021 keep_next_level (true);
6022 return begin_omp_structured_block ();
6025 tree
6026 finish_omp_task (tree clauses, tree body)
6028 tree stmt;
6030 body = finish_omp_structured_block (body);
6032 stmt = make_node (OMP_TASK);
6033 TREE_TYPE (stmt) = void_type_node;
6034 OMP_TASK_CLAUSES (stmt) = clauses;
6035 OMP_TASK_BODY (stmt) = body;
6037 return add_stmt (stmt);
6040 /* Helper function for finish_omp_for. Convert Ith random access iterator
6041 into integral iterator. Return FALSE if successful. */
6043 static bool
6044 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
6045 tree condv, tree incrv, tree *body,
6046 tree *pre_body, tree clauses)
6048 tree diff, iter_init, iter_incr = NULL, last;
6049 tree incr_var = NULL, orig_pre_body, orig_body, c;
6050 tree decl = TREE_VEC_ELT (declv, i);
6051 tree init = TREE_VEC_ELT (initv, i);
6052 tree cond = TREE_VEC_ELT (condv, i);
6053 tree incr = TREE_VEC_ELT (incrv, i);
6054 tree iter = decl;
6055 location_t elocus = locus;
6057 if (init && EXPR_HAS_LOCATION (init))
6058 elocus = EXPR_LOCATION (init);
6060 switch (TREE_CODE (cond))
6062 case GT_EXPR:
6063 case GE_EXPR:
6064 case LT_EXPR:
6065 case LE_EXPR:
6066 if (TREE_OPERAND (cond, 1) == iter)
6067 cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
6068 TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
6069 if (TREE_OPERAND (cond, 0) != iter)
6070 cond = error_mark_node;
6071 else
6073 tree tem = build_x_binary_op (EXPR_LOCATION (cond),
6074 TREE_CODE (cond),
6075 iter, ERROR_MARK,
6076 TREE_OPERAND (cond, 1), ERROR_MARK,
6077 NULL, tf_warning_or_error);
6078 if (error_operand_p (tem))
6079 return true;
6081 break;
6082 default:
6083 cond = error_mark_node;
6084 break;
6086 if (cond == error_mark_node)
6088 error_at (elocus, "invalid controlling predicate");
6089 return true;
6091 diff = build_x_binary_op (elocus, MINUS_EXPR, TREE_OPERAND (cond, 1),
6092 ERROR_MARK, iter, ERROR_MARK, NULL,
6093 tf_warning_or_error);
6094 if (error_operand_p (diff))
6095 return true;
6096 if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
6098 error_at (elocus, "difference between %qE and %qD does not have integer type",
6099 TREE_OPERAND (cond, 1), iter);
6100 return true;
6103 switch (TREE_CODE (incr))
6105 case PREINCREMENT_EXPR:
6106 case PREDECREMENT_EXPR:
6107 case POSTINCREMENT_EXPR:
6108 case POSTDECREMENT_EXPR:
6109 if (TREE_OPERAND (incr, 0) != iter)
6111 incr = error_mark_node;
6112 break;
6114 iter_incr = build_x_unary_op (EXPR_LOCATION (incr),
6115 TREE_CODE (incr), iter,
6116 tf_warning_or_error);
6117 if (error_operand_p (iter_incr))
6118 return true;
6119 else if (TREE_CODE (incr) == PREINCREMENT_EXPR
6120 || TREE_CODE (incr) == POSTINCREMENT_EXPR)
6121 incr = integer_one_node;
6122 else
6123 incr = integer_minus_one_node;
6124 break;
6125 case MODIFY_EXPR:
6126 if (TREE_OPERAND (incr, 0) != iter)
6127 incr = error_mark_node;
6128 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
6129 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
6131 tree rhs = TREE_OPERAND (incr, 1);
6132 if (TREE_OPERAND (rhs, 0) == iter)
6134 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
6135 != INTEGER_TYPE)
6136 incr = error_mark_node;
6137 else
6139 iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
6140 iter, TREE_CODE (rhs),
6141 TREE_OPERAND (rhs, 1),
6142 tf_warning_or_error);
6143 if (error_operand_p (iter_incr))
6144 return true;
6145 incr = TREE_OPERAND (rhs, 1);
6146 incr = cp_convert (TREE_TYPE (diff), incr,
6147 tf_warning_or_error);
6148 if (TREE_CODE (rhs) == MINUS_EXPR)
6150 incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
6151 incr = fold_if_not_in_template (incr);
6153 if (TREE_CODE (incr) != INTEGER_CST
6154 && (TREE_CODE (incr) != NOP_EXPR
6155 || (TREE_CODE (TREE_OPERAND (incr, 0))
6156 != INTEGER_CST)))
6157 iter_incr = NULL;
6160 else if (TREE_OPERAND (rhs, 1) == iter)
6162 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
6163 || TREE_CODE (rhs) != PLUS_EXPR)
6164 incr = error_mark_node;
6165 else
6167 iter_incr = build_x_binary_op (EXPR_LOCATION (rhs),
6168 PLUS_EXPR,
6169 TREE_OPERAND (rhs, 0),
6170 ERROR_MARK, iter,
6171 ERROR_MARK, NULL,
6172 tf_warning_or_error);
6173 if (error_operand_p (iter_incr))
6174 return true;
6175 iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
6176 iter, NOP_EXPR,
6177 iter_incr,
6178 tf_warning_or_error);
6179 if (error_operand_p (iter_incr))
6180 return true;
6181 incr = TREE_OPERAND (rhs, 0);
6182 iter_incr = NULL;
6185 else
6186 incr = error_mark_node;
6188 else
6189 incr = error_mark_node;
6190 break;
6191 default:
6192 incr = error_mark_node;
6193 break;
6196 if (incr == error_mark_node)
6198 error_at (elocus, "invalid increment expression");
6199 return true;
6202 incr = cp_convert (TREE_TYPE (diff), incr, tf_warning_or_error);
6203 for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
6204 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
6205 && OMP_CLAUSE_DECL (c) == iter)
6206 break;
6208 decl = create_temporary_var (TREE_TYPE (diff));
6209 pushdecl (decl);
6210 add_decl_expr (decl);
6211 last = create_temporary_var (TREE_TYPE (diff));
6212 pushdecl (last);
6213 add_decl_expr (last);
6214 if (c && iter_incr == NULL)
6216 incr_var = create_temporary_var (TREE_TYPE (diff));
6217 pushdecl (incr_var);
6218 add_decl_expr (incr_var);
6220 gcc_assert (stmts_are_full_exprs_p ());
6222 orig_pre_body = *pre_body;
6223 *pre_body = push_stmt_list ();
6224 if (orig_pre_body)
6225 add_stmt (orig_pre_body);
6226 if (init != NULL)
6227 finish_expr_stmt (build_x_modify_expr (elocus,
6228 iter, NOP_EXPR, init,
6229 tf_warning_or_error));
6230 init = build_int_cst (TREE_TYPE (diff), 0);
6231 if (c && iter_incr == NULL)
6233 finish_expr_stmt (build_x_modify_expr (elocus,
6234 incr_var, NOP_EXPR,
6235 incr, tf_warning_or_error));
6236 incr = incr_var;
6237 iter_incr = build_x_modify_expr (elocus,
6238 iter, PLUS_EXPR, incr,
6239 tf_warning_or_error);
6241 finish_expr_stmt (build_x_modify_expr (elocus,
6242 last, NOP_EXPR, init,
6243 tf_warning_or_error));
6244 *pre_body = pop_stmt_list (*pre_body);
6246 cond = cp_build_binary_op (elocus,
6247 TREE_CODE (cond), decl, diff,
6248 tf_warning_or_error);
6249 incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
6250 elocus, incr, NULL_TREE);
6252 orig_body = *body;
6253 *body = push_stmt_list ();
6254 iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
6255 iter_init = build_x_modify_expr (elocus,
6256 iter, PLUS_EXPR, iter_init,
6257 tf_warning_or_error);
6258 iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
6259 finish_expr_stmt (iter_init);
6260 finish_expr_stmt (build_x_modify_expr (elocus,
6261 last, NOP_EXPR, decl,
6262 tf_warning_or_error));
6263 add_stmt (orig_body);
6264 *body = pop_stmt_list (*body);
6266 if (c)
6268 OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
6269 finish_expr_stmt (iter_incr);
6270 OMP_CLAUSE_LASTPRIVATE_STMT (c)
6271 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
6274 TREE_VEC_ELT (declv, i) = decl;
6275 TREE_VEC_ELT (initv, i) = init;
6276 TREE_VEC_ELT (condv, i) = cond;
6277 TREE_VEC_ELT (incrv, i) = incr;
6279 return false;
6282 /* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
6283 are directly for their associated operands in the statement. DECL
6284 and INIT are a combo; if DECL is NULL then INIT ought to be a
6285 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
6286 optional statements that need to go before the loop into its
6287 sk_omp scope. */
6289 tree
6290 finish_omp_for (location_t locus, enum tree_code code, tree declv, tree initv,
6291 tree condv, tree incrv, tree body, tree pre_body, tree clauses)
6293 tree omp_for = NULL, orig_incr = NULL;
6294 tree decl, init, cond, incr;
6295 location_t elocus;
6296 int i;
6298 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
6299 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
6300 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
6301 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
6303 decl = TREE_VEC_ELT (declv, i);
6304 init = TREE_VEC_ELT (initv, i);
6305 cond = TREE_VEC_ELT (condv, i);
6306 incr = TREE_VEC_ELT (incrv, i);
6307 elocus = locus;
6309 if (decl == NULL)
6311 if (init != NULL)
6312 switch (TREE_CODE (init))
6314 case MODIFY_EXPR:
6315 decl = TREE_OPERAND (init, 0);
6316 init = TREE_OPERAND (init, 1);
6317 break;
6318 case MODOP_EXPR:
6319 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
6321 decl = TREE_OPERAND (init, 0);
6322 init = TREE_OPERAND (init, 2);
6324 break;
6325 default:
6326 break;
6329 if (decl == NULL)
6331 error_at (locus,
6332 "expected iteration declaration or initialization");
6333 return NULL;
6337 if (init && EXPR_HAS_LOCATION (init))
6338 elocus = EXPR_LOCATION (init);
6340 if (cond == NULL)
6342 error_at (elocus, "missing controlling predicate");
6343 return NULL;
6346 if (incr == NULL)
6348 error_at (elocus, "missing increment expression");
6349 return NULL;
6352 TREE_VEC_ELT (declv, i) = decl;
6353 TREE_VEC_ELT (initv, i) = init;
6356 if (dependent_omp_for_p (declv, initv, condv, incrv))
6358 tree stmt;
6360 stmt = make_node (code);
6362 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
6364 /* This is really just a place-holder. We'll be decomposing this
6365 again and going through the cp_build_modify_expr path below when
6366 we instantiate the thing. */
6367 TREE_VEC_ELT (initv, i)
6368 = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
6369 TREE_VEC_ELT (initv, i));
6372 TREE_TYPE (stmt) = void_type_node;
6373 OMP_FOR_INIT (stmt) = initv;
6374 OMP_FOR_COND (stmt) = condv;
6375 OMP_FOR_INCR (stmt) = incrv;
6376 OMP_FOR_BODY (stmt) = body;
6377 OMP_FOR_PRE_BODY (stmt) = pre_body;
6378 OMP_FOR_CLAUSES (stmt) = clauses;
6380 SET_EXPR_LOCATION (stmt, locus);
6381 return add_stmt (stmt);
6384 if (processing_template_decl)
6385 orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
6387 for (i = 0; i < TREE_VEC_LENGTH (declv); )
6389 decl = TREE_VEC_ELT (declv, i);
6390 init = TREE_VEC_ELT (initv, i);
6391 cond = TREE_VEC_ELT (condv, i);
6392 incr = TREE_VEC_ELT (incrv, i);
6393 if (orig_incr)
6394 TREE_VEC_ELT (orig_incr, i) = incr;
6395 elocus = locus;
6397 if (init && EXPR_HAS_LOCATION (init))
6398 elocus = EXPR_LOCATION (init);
6400 if (!DECL_P (decl))
6402 error_at (elocus, "expected iteration declaration or initialization");
6403 return NULL;
6406 if (incr && TREE_CODE (incr) == MODOP_EXPR)
6408 if (orig_incr)
6409 TREE_VEC_ELT (orig_incr, i) = incr;
6410 incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
6411 TREE_CODE (TREE_OPERAND (incr, 1)),
6412 TREE_OPERAND (incr, 2),
6413 tf_warning_or_error);
6416 if (CLASS_TYPE_P (TREE_TYPE (decl)))
6418 if (code == OMP_SIMD)
6420 error_at (elocus, "%<#pragma omp simd%> used with class "
6421 "iteration variable %qE", decl);
6422 return NULL;
6424 if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
6425 incrv, &body, &pre_body, clauses))
6426 return NULL;
6427 continue;
6430 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
6431 && !TYPE_PTR_P (TREE_TYPE (decl)))
6433 error_at (elocus, "invalid type for iteration variable %qE", decl);
6434 return NULL;
6437 if (!processing_template_decl)
6439 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
6440 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
6442 else
6443 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
6444 if (cond
6445 && TREE_SIDE_EFFECTS (cond)
6446 && COMPARISON_CLASS_P (cond)
6447 && !processing_template_decl)
6449 tree t = TREE_OPERAND (cond, 0);
6450 if (TREE_SIDE_EFFECTS (t)
6451 && t != decl
6452 && (TREE_CODE (t) != NOP_EXPR
6453 || TREE_OPERAND (t, 0) != decl))
6454 TREE_OPERAND (cond, 0)
6455 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6457 t = TREE_OPERAND (cond, 1);
6458 if (TREE_SIDE_EFFECTS (t)
6459 && t != decl
6460 && (TREE_CODE (t) != NOP_EXPR
6461 || TREE_OPERAND (t, 0) != decl))
6462 TREE_OPERAND (cond, 1)
6463 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6465 if (decl == error_mark_node || init == error_mark_node)
6466 return NULL;
6468 TREE_VEC_ELT (declv, i) = decl;
6469 TREE_VEC_ELT (initv, i) = init;
6470 TREE_VEC_ELT (condv, i) = cond;
6471 TREE_VEC_ELT (incrv, i) = incr;
6472 i++;
6475 if (IS_EMPTY_STMT (pre_body))
6476 pre_body = NULL;
6478 omp_for = c_finish_omp_for (locus, code, declv, initv, condv, incrv,
6479 body, pre_body);
6481 if (omp_for == NULL)
6482 return NULL;
6484 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
6486 decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
6487 incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
6489 if (TREE_CODE (incr) != MODIFY_EXPR)
6490 continue;
6492 if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
6493 && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
6494 && !processing_template_decl)
6496 tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
6497 if (TREE_SIDE_EFFECTS (t)
6498 && t != decl
6499 && (TREE_CODE (t) != NOP_EXPR
6500 || TREE_OPERAND (t, 0) != decl))
6501 TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
6502 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6504 t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
6505 if (TREE_SIDE_EFFECTS (t)
6506 && t != decl
6507 && (TREE_CODE (t) != NOP_EXPR
6508 || TREE_OPERAND (t, 0) != decl))
6509 TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
6510 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6513 if (orig_incr)
6514 TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
6516 if (omp_for != NULL)
6517 OMP_FOR_CLAUSES (omp_for) = clauses;
6518 return omp_for;
6521 void
6522 finish_omp_atomic (enum tree_code code, enum tree_code opcode, tree lhs,
6523 tree rhs, tree v, tree lhs1, tree rhs1, bool seq_cst)
6525 tree orig_lhs;
6526 tree orig_rhs;
6527 tree orig_v;
6528 tree orig_lhs1;
6529 tree orig_rhs1;
6530 bool dependent_p;
6531 tree stmt;
6533 orig_lhs = lhs;
6534 orig_rhs = rhs;
6535 orig_v = v;
6536 orig_lhs1 = lhs1;
6537 orig_rhs1 = rhs1;
6538 dependent_p = false;
6539 stmt = NULL_TREE;
6541 /* Even in a template, we can detect invalid uses of the atomic
6542 pragma if neither LHS nor RHS is type-dependent. */
6543 if (processing_template_decl)
6545 dependent_p = (type_dependent_expression_p (lhs)
6546 || (rhs && type_dependent_expression_p (rhs))
6547 || (v && type_dependent_expression_p (v))
6548 || (lhs1 && type_dependent_expression_p (lhs1))
6549 || (rhs1 && type_dependent_expression_p (rhs1)));
6550 if (!dependent_p)
6552 lhs = build_non_dependent_expr (lhs);
6553 if (rhs)
6554 rhs = build_non_dependent_expr (rhs);
6555 if (v)
6556 v = build_non_dependent_expr (v);
6557 if (lhs1)
6558 lhs1 = build_non_dependent_expr (lhs1);
6559 if (rhs1)
6560 rhs1 = build_non_dependent_expr (rhs1);
6563 if (!dependent_p)
6565 bool swapped = false;
6566 if (rhs1 && cp_tree_equal (lhs, rhs))
6568 tree tem = rhs;
6569 rhs = rhs1;
6570 rhs1 = tem;
6571 swapped = !commutative_tree_code (opcode);
6573 if (rhs1 && !cp_tree_equal (lhs, rhs1))
6575 if (code == OMP_ATOMIC)
6576 error ("%<#pragma omp atomic update%> uses two different "
6577 "expressions for memory");
6578 else
6579 error ("%<#pragma omp atomic capture%> uses two different "
6580 "expressions for memory");
6581 return;
6583 if (lhs1 && !cp_tree_equal (lhs, lhs1))
6585 if (code == OMP_ATOMIC)
6586 error ("%<#pragma omp atomic update%> uses two different "
6587 "expressions for memory");
6588 else
6589 error ("%<#pragma omp atomic capture%> uses two different "
6590 "expressions for memory");
6591 return;
6593 stmt = c_finish_omp_atomic (input_location, code, opcode, lhs, rhs,
6594 v, lhs1, rhs1, swapped, seq_cst);
6595 if (stmt == error_mark_node)
6596 return;
6598 if (processing_template_decl)
6600 if (code == OMP_ATOMIC_READ)
6602 stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs),
6603 OMP_ATOMIC_READ, orig_lhs);
6604 OMP_ATOMIC_SEQ_CST (stmt) = seq_cst;
6605 stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
6607 else
6609 if (opcode == NOP_EXPR)
6610 stmt = build2 (MODIFY_EXPR, void_type_node, orig_lhs, orig_rhs);
6611 else
6612 stmt = build2 (opcode, void_type_node, orig_lhs, orig_rhs);
6613 if (orig_rhs1)
6614 stmt = build_min_nt_loc (EXPR_LOCATION (orig_rhs1),
6615 COMPOUND_EXPR, orig_rhs1, stmt);
6616 if (code != OMP_ATOMIC)
6618 stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs1),
6619 code, orig_lhs1, stmt);
6620 OMP_ATOMIC_SEQ_CST (stmt) = seq_cst;
6621 stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
6624 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
6625 OMP_ATOMIC_SEQ_CST (stmt) = seq_cst;
6627 finish_expr_stmt (stmt);
6630 void
6631 finish_omp_barrier (void)
6633 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
6634 vec<tree, va_gc> *vec = make_tree_vector ();
6635 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6636 release_tree_vector (vec);
6637 finish_expr_stmt (stmt);
6640 void
6641 finish_omp_flush (void)
6643 tree fn = builtin_decl_explicit (BUILT_IN_SYNC_SYNCHRONIZE);
6644 vec<tree, va_gc> *vec = make_tree_vector ();
6645 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6646 release_tree_vector (vec);
6647 finish_expr_stmt (stmt);
6650 void
6651 finish_omp_taskwait (void)
6653 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKWAIT);
6654 vec<tree, va_gc> *vec = make_tree_vector ();
6655 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6656 release_tree_vector (vec);
6657 finish_expr_stmt (stmt);
6660 void
6661 finish_omp_taskyield (void)
6663 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKYIELD);
6664 vec<tree, va_gc> *vec = make_tree_vector ();
6665 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6666 release_tree_vector (vec);
6667 finish_expr_stmt (stmt);
6670 void
6671 finish_omp_cancel (tree clauses)
6673 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
6674 int mask = 0;
6675 if (find_omp_clause (clauses, OMP_CLAUSE_PARALLEL))
6676 mask = 1;
6677 else if (find_omp_clause (clauses, OMP_CLAUSE_FOR))
6678 mask = 2;
6679 else if (find_omp_clause (clauses, OMP_CLAUSE_SECTIONS))
6680 mask = 4;
6681 else if (find_omp_clause (clauses, OMP_CLAUSE_TASKGROUP))
6682 mask = 8;
6683 else
6685 error ("%<#pragma omp cancel must specify one of "
6686 "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> clauses");
6687 return;
6689 vec<tree, va_gc> *vec = make_tree_vector ();
6690 tree ifc = find_omp_clause (clauses, OMP_CLAUSE_IF);
6691 if (ifc != NULL_TREE)
6693 tree type = TREE_TYPE (OMP_CLAUSE_IF_EXPR (ifc));
6694 ifc = fold_build2_loc (OMP_CLAUSE_LOCATION (ifc), NE_EXPR,
6695 boolean_type_node, OMP_CLAUSE_IF_EXPR (ifc),
6696 build_zero_cst (type));
6698 else
6699 ifc = boolean_true_node;
6700 vec->quick_push (build_int_cst (integer_type_node, mask));
6701 vec->quick_push (ifc);
6702 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6703 release_tree_vector (vec);
6704 finish_expr_stmt (stmt);
6707 void
6708 finish_omp_cancellation_point (tree clauses)
6710 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_CANCELLATION_POINT);
6711 int mask = 0;
6712 if (find_omp_clause (clauses, OMP_CLAUSE_PARALLEL))
6713 mask = 1;
6714 else if (find_omp_clause (clauses, OMP_CLAUSE_FOR))
6715 mask = 2;
6716 else if (find_omp_clause (clauses, OMP_CLAUSE_SECTIONS))
6717 mask = 4;
6718 else if (find_omp_clause (clauses, OMP_CLAUSE_TASKGROUP))
6719 mask = 8;
6720 else
6722 error ("%<#pragma omp cancellation point must specify one of "
6723 "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> clauses");
6724 return;
6726 vec<tree, va_gc> *vec
6727 = make_tree_vector_single (build_int_cst (integer_type_node, mask));
6728 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6729 release_tree_vector (vec);
6730 finish_expr_stmt (stmt);
6733 /* Begin a __transaction_atomic or __transaction_relaxed statement.
6734 If PCOMPOUND is non-null, this is for a function-transaction-block, and we
6735 should create an extra compound stmt. */
6737 tree
6738 begin_transaction_stmt (location_t loc, tree *pcompound, int flags)
6740 tree r;
6742 if (pcompound)
6743 *pcompound = begin_compound_stmt (0);
6745 r = build_stmt (loc, TRANSACTION_EXPR, NULL_TREE);
6747 /* Only add the statement to the function if support enabled. */
6748 if (flag_tm)
6749 add_stmt (r);
6750 else
6751 error_at (loc, ((flags & TM_STMT_ATTR_RELAXED) != 0
6752 ? G_("%<__transaction_relaxed%> without "
6753 "transactional memory support enabled")
6754 : G_("%<__transaction_atomic%> without "
6755 "transactional memory support enabled")));
6757 TRANSACTION_EXPR_BODY (r) = push_stmt_list ();
6758 TREE_SIDE_EFFECTS (r) = 1;
6759 return r;
6762 /* End a __transaction_atomic or __transaction_relaxed statement.
6763 If COMPOUND_STMT is non-null, this is for a function-transaction-block,
6764 and we should end the compound. If NOEX is non-NULL, we wrap the body in
6765 a MUST_NOT_THROW_EXPR with NOEX as condition. */
6767 void
6768 finish_transaction_stmt (tree stmt, tree compound_stmt, int flags, tree noex)
6770 TRANSACTION_EXPR_BODY (stmt) = pop_stmt_list (TRANSACTION_EXPR_BODY (stmt));
6771 TRANSACTION_EXPR_OUTER (stmt) = (flags & TM_STMT_ATTR_OUTER) != 0;
6772 TRANSACTION_EXPR_RELAXED (stmt) = (flags & TM_STMT_ATTR_RELAXED) != 0;
6773 TRANSACTION_EXPR_IS_STMT (stmt) = 1;
6775 /* noexcept specifications are not allowed for function transactions. */
6776 gcc_assert (!(noex && compound_stmt));
6777 if (noex)
6779 tree body = build_must_not_throw_expr (TRANSACTION_EXPR_BODY (stmt),
6780 noex);
6781 /* This may not be true when the STATEMENT_LIST is empty. */
6782 if (EXPR_P (body))
6783 SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt)));
6784 TREE_SIDE_EFFECTS (body) = 1;
6785 TRANSACTION_EXPR_BODY (stmt) = body;
6788 if (compound_stmt)
6789 finish_compound_stmt (compound_stmt);
6792 /* Build a __transaction_atomic or __transaction_relaxed expression. If
6793 NOEX is non-NULL, we wrap the body in a MUST_NOT_THROW_EXPR with NOEX as
6794 condition. */
6796 tree
6797 build_transaction_expr (location_t loc, tree expr, int flags, tree noex)
6799 tree ret;
6800 if (noex)
6802 expr = build_must_not_throw_expr (expr, noex);
6803 if (EXPR_P (expr))
6804 SET_EXPR_LOCATION (expr, loc);
6805 TREE_SIDE_EFFECTS (expr) = 1;
6807 ret = build1 (TRANSACTION_EXPR, TREE_TYPE (expr), expr);
6808 if (flags & TM_STMT_ATTR_RELAXED)
6809 TRANSACTION_EXPR_RELAXED (ret) = 1;
6810 TREE_SIDE_EFFECTS (ret) = 1;
6811 SET_EXPR_LOCATION (ret, loc);
6812 return ret;
6815 void
6816 init_cp_semantics (void)
6820 /* Build a STATIC_ASSERT for a static assertion with the condition
6821 CONDITION and the message text MESSAGE. LOCATION is the location
6822 of the static assertion in the source code. When MEMBER_P, this
6823 static assertion is a member of a class. */
6824 void
6825 finish_static_assert (tree condition, tree message, location_t location,
6826 bool member_p)
6828 if (message == NULL_TREE
6829 || message == error_mark_node
6830 || condition == NULL_TREE
6831 || condition == error_mark_node)
6832 return;
6834 if (check_for_bare_parameter_packs (condition))
6835 condition = error_mark_node;
6837 if (type_dependent_expression_p (condition)
6838 || value_dependent_expression_p (condition))
6840 /* We're in a template; build a STATIC_ASSERT and put it in
6841 the right place. */
6842 tree assertion;
6844 assertion = make_node (STATIC_ASSERT);
6845 STATIC_ASSERT_CONDITION (assertion) = condition;
6846 STATIC_ASSERT_MESSAGE (assertion) = message;
6847 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
6849 if (member_p)
6850 maybe_add_class_template_decl_list (current_class_type,
6851 assertion,
6852 /*friend_p=*/0);
6853 else
6854 add_stmt (assertion);
6856 return;
6859 /* Fold the expression and convert it to a boolean value. */
6860 condition = fold_non_dependent_expr (condition);
6861 condition = cp_convert (boolean_type_node, condition, tf_warning_or_error);
6862 condition = maybe_constant_value (condition);
6864 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
6865 /* Do nothing; the condition is satisfied. */
6867 else
6869 location_t saved_loc = input_location;
6871 input_location = location;
6872 if (TREE_CODE (condition) == INTEGER_CST
6873 && integer_zerop (condition))
6874 /* Report the error. */
6875 error ("static assertion failed: %s", TREE_STRING_POINTER (message));
6876 else if (condition && condition != error_mark_node)
6878 error ("non-constant condition for static assertion");
6879 if (require_potential_rvalue_constant_expression (condition))
6880 cxx_constant_value (condition);
6882 input_location = saved_loc;
6886 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
6887 suitable for use as a type-specifier.
6889 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
6890 id-expression or a class member access, FALSE when it was parsed as
6891 a full expression. */
6893 tree
6894 finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
6895 tsubst_flags_t complain)
6897 tree type = NULL_TREE;
6899 if (!expr || error_operand_p (expr))
6900 return error_mark_node;
6902 if (TYPE_P (expr)
6903 || TREE_CODE (expr) == TYPE_DECL
6904 || (TREE_CODE (expr) == BIT_NOT_EXPR
6905 && TYPE_P (TREE_OPERAND (expr, 0))))
6907 if (complain & tf_error)
6908 error ("argument to decltype must be an expression");
6909 return error_mark_node;
6912 /* Depending on the resolution of DR 1172, we may later need to distinguish
6913 instantiation-dependent but not type-dependent expressions so that, say,
6914 A<decltype(sizeof(T))>::U doesn't require 'typename'. */
6915 if (instantiation_dependent_expression_p (expr))
6917 type = cxx_make_type (DECLTYPE_TYPE);
6918 DECLTYPE_TYPE_EXPR (type) = expr;
6919 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
6920 = id_expression_or_member_access_p;
6921 SET_TYPE_STRUCTURAL_EQUALITY (type);
6923 return type;
6926 /* The type denoted by decltype(e) is defined as follows: */
6928 expr = resolve_nondeduced_context (expr);
6930 if (invalid_nonstatic_memfn_p (expr, complain))
6931 return error_mark_node;
6933 if (type_unknown_p (expr))
6935 if (complain & tf_error)
6936 error ("decltype cannot resolve address of overloaded function");
6937 return error_mark_node;
6940 /* To get the size of a static data member declared as an array of
6941 unknown bound, we need to instantiate it. */
6942 if (VAR_P (expr)
6943 && VAR_HAD_UNKNOWN_BOUND (expr)
6944 && DECL_TEMPLATE_INSTANTIATION (expr))
6945 instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
6947 if (id_expression_or_member_access_p)
6949 /* If e is an id-expression or a class member access (5.2.5
6950 [expr.ref]), decltype(e) is defined as the type of the entity
6951 named by e. If there is no such entity, or e names a set of
6952 overloaded functions, the program is ill-formed. */
6953 if (identifier_p (expr))
6954 expr = lookup_name (expr);
6956 if (INDIRECT_REF_P (expr))
6957 /* This can happen when the expression is, e.g., "a.b". Just
6958 look at the underlying operand. */
6959 expr = TREE_OPERAND (expr, 0);
6961 if (TREE_CODE (expr) == OFFSET_REF
6962 || TREE_CODE (expr) == MEMBER_REF
6963 || TREE_CODE (expr) == SCOPE_REF)
6964 /* We're only interested in the field itself. If it is a
6965 BASELINK, we will need to see through it in the next
6966 step. */
6967 expr = TREE_OPERAND (expr, 1);
6969 if (BASELINK_P (expr))
6970 /* See through BASELINK nodes to the underlying function. */
6971 expr = BASELINK_FUNCTIONS (expr);
6973 switch (TREE_CODE (expr))
6975 case FIELD_DECL:
6976 if (DECL_BIT_FIELD_TYPE (expr))
6978 type = DECL_BIT_FIELD_TYPE (expr);
6979 break;
6981 /* Fall through for fields that aren't bitfields. */
6983 case FUNCTION_DECL:
6984 case VAR_DECL:
6985 case CONST_DECL:
6986 case PARM_DECL:
6987 case RESULT_DECL:
6988 case TEMPLATE_PARM_INDEX:
6989 expr = mark_type_use (expr);
6990 type = TREE_TYPE (expr);
6991 break;
6993 case ERROR_MARK:
6994 type = error_mark_node;
6995 break;
6997 case COMPONENT_REF:
6998 case COMPOUND_EXPR:
6999 mark_type_use (expr);
7000 type = is_bitfield_expr_with_lowered_type (expr);
7001 if (!type)
7002 type = TREE_TYPE (TREE_OPERAND (expr, 1));
7003 break;
7005 case BIT_FIELD_REF:
7006 gcc_unreachable ();
7008 case INTEGER_CST:
7009 case PTRMEM_CST:
7010 /* We can get here when the id-expression refers to an
7011 enumerator or non-type template parameter. */
7012 type = TREE_TYPE (expr);
7013 break;
7015 default:
7016 /* Handle instantiated template non-type arguments. */
7017 type = TREE_TYPE (expr);
7018 break;
7021 else
7023 /* Within a lambda-expression:
7025 Every occurrence of decltype((x)) where x is a possibly
7026 parenthesized id-expression that names an entity of
7027 automatic storage duration is treated as if x were
7028 transformed into an access to a corresponding data member
7029 of the closure type that would have been declared if x
7030 were a use of the denoted entity. */
7031 if (outer_automatic_var_p (expr)
7032 && current_function_decl
7033 && LAMBDA_FUNCTION_P (current_function_decl))
7034 type = capture_decltype (expr);
7035 else if (error_operand_p (expr))
7036 type = error_mark_node;
7037 else if (expr == current_class_ptr)
7038 /* If the expression is just "this", we want the
7039 cv-unqualified pointer for the "this" type. */
7040 type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
7041 else
7043 /* Otherwise, where T is the type of e, if e is an lvalue,
7044 decltype(e) is defined as T&; if an xvalue, T&&; otherwise, T. */
7045 cp_lvalue_kind clk = lvalue_kind (expr);
7046 type = unlowered_expr_type (expr);
7047 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
7049 /* For vector types, pick a non-opaque variant. */
7050 if (TREE_CODE (type) == VECTOR_TYPE)
7051 type = strip_typedefs (type);
7053 if (clk != clk_none && !(clk & clk_class))
7054 type = cp_build_reference_type (type, (clk & clk_rvalueref));
7058 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type)
7059 && (flag_iso || warn_vla > 0))
7061 if (complain & tf_warning_or_error)
7062 pedwarn (input_location, OPT_Wvla,
7063 "taking decltype of array of runtime bound");
7064 else
7065 return error_mark_node;
7068 return type;
7071 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or
7072 __has_nothrow_copy, depending on assign_p. */
7074 static bool
7075 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
7077 tree fns;
7079 if (assign_p)
7081 int ix;
7082 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
7083 if (ix < 0)
7084 return false;
7085 fns = (*CLASSTYPE_METHOD_VEC (type))[ix];
7087 else if (TYPE_HAS_COPY_CTOR (type))
7089 /* If construction of the copy constructor was postponed, create
7090 it now. */
7091 if (CLASSTYPE_LAZY_COPY_CTOR (type))
7092 lazily_declare_fn (sfk_copy_constructor, type);
7093 if (CLASSTYPE_LAZY_MOVE_CTOR (type))
7094 lazily_declare_fn (sfk_move_constructor, type);
7095 fns = CLASSTYPE_CONSTRUCTORS (type);
7097 else
7098 return false;
7100 for (; fns; fns = OVL_NEXT (fns))
7102 tree fn = OVL_CURRENT (fns);
7104 if (assign_p)
7106 if (copy_fn_p (fn) == 0)
7107 continue;
7109 else if (copy_fn_p (fn) <= 0)
7110 continue;
7112 maybe_instantiate_noexcept (fn);
7113 if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
7114 return false;
7117 return true;
7120 /* Actually evaluates the trait. */
7122 static bool
7123 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
7125 enum tree_code type_code1;
7126 tree t;
7128 type_code1 = TREE_CODE (type1);
7130 switch (kind)
7132 case CPTK_HAS_NOTHROW_ASSIGN:
7133 type1 = strip_array_types (type1);
7134 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
7135 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
7136 || (CLASS_TYPE_P (type1)
7137 && classtype_has_nothrow_assign_or_copy_p (type1,
7138 true))));
7140 case CPTK_HAS_TRIVIAL_ASSIGN:
7141 /* ??? The standard seems to be missing the "or array of such a class
7142 type" wording for this trait. */
7143 type1 = strip_array_types (type1);
7144 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
7145 && (trivial_type_p (type1)
7146 || (CLASS_TYPE_P (type1)
7147 && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
7149 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
7150 type1 = strip_array_types (type1);
7151 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
7152 || (CLASS_TYPE_P (type1)
7153 && (t = locate_ctor (type1))
7154 && (maybe_instantiate_noexcept (t),
7155 TYPE_NOTHROW_P (TREE_TYPE (t)))));
7157 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
7158 type1 = strip_array_types (type1);
7159 return (trivial_type_p (type1)
7160 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
7162 case CPTK_HAS_NOTHROW_COPY:
7163 type1 = strip_array_types (type1);
7164 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
7165 || (CLASS_TYPE_P (type1)
7166 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
7168 case CPTK_HAS_TRIVIAL_COPY:
7169 /* ??? The standard seems to be missing the "or array of such a class
7170 type" wording for this trait. */
7171 type1 = strip_array_types (type1);
7172 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
7173 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
7175 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
7176 type1 = strip_array_types (type1);
7177 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
7178 || (CLASS_TYPE_P (type1)
7179 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
7181 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
7182 return type_has_virtual_destructor (type1);
7184 case CPTK_IS_ABSTRACT:
7185 return (ABSTRACT_CLASS_TYPE_P (type1));
7187 case CPTK_IS_BASE_OF:
7188 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
7189 && (same_type_ignoring_top_level_qualifiers_p (type1, type2)
7190 || DERIVED_FROM_P (type1, type2)));
7192 case CPTK_IS_CLASS:
7193 return (NON_UNION_CLASS_TYPE_P (type1));
7195 case CPTK_IS_CONVERTIBLE_TO:
7196 /* TODO */
7197 return false;
7199 case CPTK_IS_EMPTY:
7200 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
7202 case CPTK_IS_ENUM:
7203 return (type_code1 == ENUMERAL_TYPE);
7205 case CPTK_IS_FINAL:
7206 return (CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1));
7208 case CPTK_IS_LITERAL_TYPE:
7209 return (literal_type_p (type1));
7211 case CPTK_IS_POD:
7212 return (pod_type_p (type1));
7214 case CPTK_IS_POLYMORPHIC:
7215 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
7217 case CPTK_IS_STD_LAYOUT:
7218 return (std_layout_type_p (type1));
7220 case CPTK_IS_TRIVIAL:
7221 return (trivial_type_p (type1));
7223 case CPTK_IS_UNION:
7224 return (type_code1 == UNION_TYPE);
7226 default:
7227 gcc_unreachable ();
7228 return false;
7232 /* If TYPE is an array of unknown bound, or (possibly cv-qualified)
7233 void, or a complete type, returns it, otherwise NULL_TREE. */
7235 static tree
7236 check_trait_type (tree type)
7238 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7239 && COMPLETE_TYPE_P (TREE_TYPE (type)))
7240 return type;
7242 if (VOID_TYPE_P (type))
7243 return type;
7245 return complete_type_or_else (strip_array_types (type), NULL_TREE);
7248 /* Process a trait expression. */
7250 tree
7251 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
7253 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
7254 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
7255 || kind == CPTK_HAS_NOTHROW_COPY
7256 || kind == CPTK_HAS_TRIVIAL_ASSIGN
7257 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
7258 || kind == CPTK_HAS_TRIVIAL_COPY
7259 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
7260 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
7261 || kind == CPTK_IS_ABSTRACT
7262 || kind == CPTK_IS_BASE_OF
7263 || kind == CPTK_IS_CLASS
7264 || kind == CPTK_IS_CONVERTIBLE_TO
7265 || kind == CPTK_IS_EMPTY
7266 || kind == CPTK_IS_ENUM
7267 || kind == CPTK_IS_FINAL
7268 || kind == CPTK_IS_LITERAL_TYPE
7269 || kind == CPTK_IS_POD
7270 || kind == CPTK_IS_POLYMORPHIC
7271 || kind == CPTK_IS_STD_LAYOUT
7272 || kind == CPTK_IS_TRIVIAL
7273 || kind == CPTK_IS_UNION);
7275 if (kind == CPTK_IS_CONVERTIBLE_TO)
7277 sorry ("__is_convertible_to");
7278 return error_mark_node;
7281 if (type1 == error_mark_node
7282 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
7283 && type2 == error_mark_node))
7284 return error_mark_node;
7286 if (processing_template_decl)
7288 tree trait_expr = make_node (TRAIT_EXPR);
7289 TREE_TYPE (trait_expr) = boolean_type_node;
7290 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
7291 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
7292 TRAIT_EXPR_KIND (trait_expr) = kind;
7293 return trait_expr;
7296 switch (kind)
7298 case CPTK_HAS_NOTHROW_ASSIGN:
7299 case CPTK_HAS_TRIVIAL_ASSIGN:
7300 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
7301 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
7302 case CPTK_HAS_NOTHROW_COPY:
7303 case CPTK_HAS_TRIVIAL_COPY:
7304 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
7305 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
7306 case CPTK_IS_ABSTRACT:
7307 case CPTK_IS_EMPTY:
7308 case CPTK_IS_FINAL:
7309 case CPTK_IS_LITERAL_TYPE:
7310 case CPTK_IS_POD:
7311 case CPTK_IS_POLYMORPHIC:
7312 case CPTK_IS_STD_LAYOUT:
7313 case CPTK_IS_TRIVIAL:
7314 if (!check_trait_type (type1))
7315 return error_mark_node;
7316 break;
7318 case CPTK_IS_BASE_OF:
7319 if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
7320 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
7321 && !complete_type_or_else (type2, NULL_TREE))
7322 /* We already issued an error. */
7323 return error_mark_node;
7324 break;
7326 case CPTK_IS_CLASS:
7327 case CPTK_IS_ENUM:
7328 case CPTK_IS_UNION:
7329 break;
7331 case CPTK_IS_CONVERTIBLE_TO:
7332 default:
7333 gcc_unreachable ();
7336 return (trait_expr_value (kind, type1, type2)
7337 ? boolean_true_node : boolean_false_node);
7340 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
7341 which is ignored for C++. */
7343 void
7344 set_float_const_decimal64 (void)
7348 void
7349 clear_float_const_decimal64 (void)
7353 bool
7354 float_const_decimal64_p (void)
7356 return 0;
7360 /* Return true if T is a literal type. */
7362 bool
7363 literal_type_p (tree t)
7365 if (SCALAR_TYPE_P (t)
7366 || TREE_CODE (t) == VECTOR_TYPE
7367 || TREE_CODE (t) == REFERENCE_TYPE)
7368 return true;
7369 if (CLASS_TYPE_P (t))
7371 t = complete_type (t);
7372 gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
7373 return CLASSTYPE_LITERAL_P (t);
7375 if (TREE_CODE (t) == ARRAY_TYPE)
7376 return literal_type_p (strip_array_types (t));
7377 return false;
7380 /* If DECL is a variable declared `constexpr', require its type
7381 be literal. Return the DECL if OK, otherwise NULL. */
7383 tree
7384 ensure_literal_type_for_constexpr_object (tree decl)
7386 tree type = TREE_TYPE (decl);
7387 if (VAR_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl)
7388 && !processing_template_decl)
7390 tree stype = strip_array_types (type);
7391 if (CLASS_TYPE_P (stype) && !COMPLETE_TYPE_P (complete_type (stype)))
7392 /* Don't complain here, we'll complain about incompleteness
7393 when we try to initialize the variable. */;
7394 else if (!literal_type_p (type))
7396 error ("the type %qT of constexpr variable %qD is not literal",
7397 type, decl);
7398 explain_non_literal_class (type);
7399 return NULL;
7402 return decl;
7405 /* Representation of entries in the constexpr function definition table. */
7407 typedef struct GTY(()) constexpr_fundef {
7408 tree decl;
7409 tree body;
7410 } constexpr_fundef;
7412 /* This table holds all constexpr function definitions seen in
7413 the current translation unit. */
7415 static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
7417 /* Utility function used for managing the constexpr function table.
7418 Return true if the entries pointed to by P and Q are for the
7419 same constexpr function. */
7421 static inline int
7422 constexpr_fundef_equal (const void *p, const void *q)
7424 const constexpr_fundef *lhs = (const constexpr_fundef *) p;
7425 const constexpr_fundef *rhs = (const constexpr_fundef *) q;
7426 return lhs->decl == rhs->decl;
7429 /* Utility function used for managing the constexpr function table.
7430 Return a hash value for the entry pointed to by Q. */
7432 static inline hashval_t
7433 constexpr_fundef_hash (const void *p)
7435 const constexpr_fundef *fundef = (const constexpr_fundef *) p;
7436 return DECL_UID (fundef->decl);
7439 /* Return a previously saved definition of function FUN. */
7441 static constexpr_fundef *
7442 retrieve_constexpr_fundef (tree fun)
7444 constexpr_fundef fundef = { NULL, NULL };
7445 if (constexpr_fundef_table == NULL)
7446 return NULL;
7448 fundef.decl = fun;
7449 return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
7452 /* Check whether the parameter and return types of FUN are valid for a
7453 constexpr function, and complain if COMPLAIN. */
7455 static bool
7456 is_valid_constexpr_fn (tree fun, bool complain)
7458 bool ret = true;
7460 if (DECL_INHERITED_CTOR_BASE (fun)
7461 && TREE_CODE (fun) == TEMPLATE_DECL)
7463 ret = false;
7464 if (complain)
7465 error ("inherited constructor %qD is not constexpr",
7466 get_inherited_ctor (fun));
7468 else
7470 for (tree parm = FUNCTION_FIRST_USER_PARM (fun);
7471 parm != NULL_TREE; parm = TREE_CHAIN (parm))
7472 if (!literal_type_p (TREE_TYPE (parm)))
7474 ret = false;
7475 if (complain)
7477 error ("invalid type for parameter %d of constexpr "
7478 "function %q+#D", DECL_PARM_INDEX (parm), fun);
7479 explain_non_literal_class (TREE_TYPE (parm));
7484 if (!DECL_CONSTRUCTOR_P (fun))
7486 tree rettype = TREE_TYPE (TREE_TYPE (fun));
7487 if (!literal_type_p (rettype))
7489 ret = false;
7490 if (complain)
7492 error ("invalid return type %qT of constexpr function %q+D",
7493 rettype, fun);
7494 explain_non_literal_class (rettype);
7498 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
7499 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
7501 ret = false;
7502 if (complain)
7504 error ("enclosing class of constexpr non-static member "
7505 "function %q+#D is not a literal type", fun);
7506 explain_non_literal_class (DECL_CONTEXT (fun));
7510 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
7512 ret = false;
7513 if (complain)
7514 error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
7517 return ret;
7520 /* Subroutine of build_data_member_initialization. MEMBER is a COMPONENT_REF
7521 for a member of an anonymous aggregate, INIT is the initializer for that
7522 member, and VEC_OUTER is the vector of constructor elements for the class
7523 whose constructor we are processing. Add the initializer to the vector
7524 and return true to indicate success. */
7526 static bool
7527 build_anon_member_initialization (tree member, tree init,
7528 vec<constructor_elt, va_gc> **vec_outer)
7530 /* MEMBER presents the relevant fields from the inside out, but we need
7531 to build up the initializer from the outside in so that we can reuse
7532 previously built CONSTRUCTORs if this is, say, the second field in an
7533 anonymous struct. So we use a vec as a stack. */
7534 auto_vec<tree, 2> fields;
7537 fields.safe_push (TREE_OPERAND (member, 1));
7538 member = TREE_OPERAND (member, 0);
7540 while (ANON_AGGR_TYPE_P (TREE_TYPE (member))
7541 && TREE_CODE (member) == COMPONENT_REF);
7543 /* VEC has the constructor elements vector for the context of FIELD.
7544 If FIELD is an anonymous aggregate, we will push inside it. */
7545 vec<constructor_elt, va_gc> **vec = vec_outer;
7546 tree field;
7547 while (field = fields.pop(),
7548 ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7550 tree ctor;
7551 /* If there is already an outer constructor entry for the anonymous
7552 aggregate FIELD, use it; otherwise, insert one. */
7553 if (vec_safe_is_empty (*vec)
7554 || (*vec)->last().index != field)
7556 ctor = build_constructor (TREE_TYPE (field), NULL);
7557 CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
7559 else
7560 ctor = (*vec)->last().value;
7561 vec = &CONSTRUCTOR_ELTS (ctor);
7564 /* Now we're at the innermost field, the one that isn't an anonymous
7565 aggregate. Add its initializer to the CONSTRUCTOR and we're done. */
7566 gcc_assert (fields.is_empty());
7567 CONSTRUCTOR_APPEND_ELT (*vec, field, init);
7569 return true;
7572 /* Subroutine of build_constexpr_constructor_member_initializers.
7573 The expression tree T represents a data member initialization
7574 in a (constexpr) constructor definition. Build a pairing of
7575 the data member with its initializer, and prepend that pair
7576 to the existing initialization pair INITS. */
7578 static bool
7579 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
7581 tree member, init;
7582 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
7583 t = TREE_OPERAND (t, 0);
7584 if (TREE_CODE (t) == EXPR_STMT)
7585 t = TREE_OPERAND (t, 0);
7586 if (t == error_mark_node)
7587 return false;
7588 if (TREE_CODE (t) == STATEMENT_LIST)
7590 tree_stmt_iterator i;
7591 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
7593 if (! build_data_member_initialization (tsi_stmt (i), vec))
7594 return false;
7596 return true;
7598 if (TREE_CODE (t) == CLEANUP_STMT)
7600 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
7601 but we can in a constexpr constructor for a non-literal class. Just
7602 ignore it; either all the initialization will be constant, in which
7603 case the cleanup can't run, or it can't be constexpr.
7604 Still recurse into CLEANUP_BODY. */
7605 return build_data_member_initialization (CLEANUP_BODY (t), vec);
7607 if (TREE_CODE (t) == CONVERT_EXPR)
7608 t = TREE_OPERAND (t, 0);
7609 if (TREE_CODE (t) == INIT_EXPR
7610 || TREE_CODE (t) == MODIFY_EXPR)
7612 member = TREE_OPERAND (t, 0);
7613 init = break_out_target_exprs (TREE_OPERAND (t, 1));
7615 else if (TREE_CODE (t) == CALL_EXPR)
7617 member = CALL_EXPR_ARG (t, 0);
7618 /* We don't use build_cplus_new here because it complains about
7619 abstract bases. Leaving the call unwrapped means that it has the
7620 wrong type, but cxx_eval_constant_expression doesn't care. */
7621 init = break_out_target_exprs (t);
7623 else if (TREE_CODE (t) == DECL_EXPR)
7624 /* Declaring a temporary, don't add it to the CONSTRUCTOR. */
7625 return true;
7626 else
7627 gcc_unreachable ();
7628 if (INDIRECT_REF_P (member))
7629 member = TREE_OPERAND (member, 0);
7630 if (TREE_CODE (member) == NOP_EXPR)
7632 tree op = member;
7633 STRIP_NOPS (op);
7634 if (TREE_CODE (op) == ADDR_EXPR)
7636 gcc_assert (same_type_ignoring_top_level_qualifiers_p
7637 (TREE_TYPE (TREE_TYPE (op)),
7638 TREE_TYPE (TREE_TYPE (member))));
7639 /* Initializing a cv-qualified member; we need to look through
7640 the const_cast. */
7641 member = op;
7643 else if (op == current_class_ptr
7644 && (same_type_ignoring_top_level_qualifiers_p
7645 (TREE_TYPE (TREE_TYPE (member)),
7646 current_class_type)))
7647 /* Delegating constructor. */
7648 member = op;
7649 else
7651 /* This is an initializer for an empty base; keep it for now so
7652 we can check it in cxx_eval_bare_aggregate. */
7653 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
7656 if (TREE_CODE (member) == ADDR_EXPR)
7657 member = TREE_OPERAND (member, 0);
7658 if (TREE_CODE (member) == COMPONENT_REF)
7660 tree aggr = TREE_OPERAND (member, 0);
7661 if (TREE_CODE (aggr) != COMPONENT_REF)
7662 /* Normal member initialization. */
7663 member = TREE_OPERAND (member, 1);
7664 else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
7665 /* Initializing a member of an anonymous union. */
7666 return build_anon_member_initialization (member, init, vec);
7667 else
7668 /* We're initializing a vtable pointer in a base. Leave it as
7669 COMPONENT_REF so we remember the path to get to the vfield. */
7670 gcc_assert (TREE_TYPE (member) == vtbl_ptr_type_node);
7673 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
7674 return true;
7677 /* Make sure that there are no statements after LAST in the constructor
7678 body represented by LIST. */
7680 bool
7681 check_constexpr_ctor_body (tree last, tree list)
7683 bool ok = true;
7684 if (TREE_CODE (list) == STATEMENT_LIST)
7686 tree_stmt_iterator i = tsi_last (list);
7687 for (; !tsi_end_p (i); tsi_prev (&i))
7689 tree t = tsi_stmt (i);
7690 if (t == last)
7691 break;
7692 if (TREE_CODE (t) == BIND_EXPR)
7694 if (BIND_EXPR_VARS (t))
7696 ok = false;
7697 break;
7699 if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
7700 return false;
7701 else
7702 continue;
7704 /* We currently allow typedefs and static_assert.
7705 FIXME allow them in the standard, too. */
7706 if (TREE_CODE (t) != STATIC_ASSERT)
7708 ok = false;
7709 break;
7713 else if (list != last
7714 && TREE_CODE (list) != STATIC_ASSERT)
7715 ok = false;
7716 if (!ok)
7718 error ("constexpr constructor does not have empty body");
7719 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
7721 return ok;
7724 /* V is a vector of constructor elements built up for the base and member
7725 initializers of a constructor for TYPE. They need to be in increasing
7726 offset order, which they might not be yet if TYPE has a primary base
7727 which is not first in the base-clause or a vptr and at least one base
7728 all of which are non-primary. */
7730 static vec<constructor_elt, va_gc> *
7731 sort_constexpr_mem_initializers (tree type, vec<constructor_elt, va_gc> *v)
7733 tree pri = CLASSTYPE_PRIMARY_BINFO (type);
7734 tree field_type;
7735 unsigned i;
7736 constructor_elt *ce;
7738 if (pri)
7739 field_type = BINFO_TYPE (pri);
7740 else if (TYPE_CONTAINS_VPTR_P (type))
7741 field_type = vtbl_ptr_type_node;
7742 else
7743 return v;
7745 /* Find the element for the primary base or vptr and move it to the
7746 beginning of the vec. */
7747 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
7748 if (TREE_TYPE (ce->index) == field_type)
7749 break;
7751 if (i > 0 && i < vec_safe_length (v))
7753 vec<constructor_elt, va_gc> &vref = *v;
7754 constructor_elt elt = vref[i];
7755 for (; i > 0; --i)
7756 vref[i] = vref[i-1];
7757 vref[0] = elt;
7760 return v;
7763 /* Build compile-time evalable representations of member-initializer list
7764 for a constexpr constructor. */
7766 static tree
7767 build_constexpr_constructor_member_initializers (tree type, tree body)
7769 vec<constructor_elt, va_gc> *vec = NULL;
7770 bool ok = true;
7771 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
7772 || TREE_CODE (body) == EH_SPEC_BLOCK)
7773 body = TREE_OPERAND (body, 0);
7774 if (TREE_CODE (body) == STATEMENT_LIST)
7775 body = STATEMENT_LIST_HEAD (body)->stmt;
7776 body = BIND_EXPR_BODY (body);
7777 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
7779 body = TREE_OPERAND (body, 0);
7780 if (TREE_CODE (body) == EXPR_STMT)
7781 body = TREE_OPERAND (body, 0);
7782 if (TREE_CODE (body) == INIT_EXPR
7783 && (same_type_ignoring_top_level_qualifiers_p
7784 (TREE_TYPE (TREE_OPERAND (body, 0)),
7785 current_class_type)))
7787 /* Trivial copy. */
7788 return TREE_OPERAND (body, 1);
7790 ok = build_data_member_initialization (body, &vec);
7792 else if (TREE_CODE (body) == STATEMENT_LIST)
7794 tree_stmt_iterator i;
7795 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
7797 ok = build_data_member_initialization (tsi_stmt (i), &vec);
7798 if (!ok)
7799 break;
7802 else if (TREE_CODE (body) == TRY_BLOCK)
7804 error ("body of %<constexpr%> constructor cannot be "
7805 "a function-try-block");
7806 return error_mark_node;
7808 else if (EXPR_P (body))
7809 ok = build_data_member_initialization (body, &vec);
7810 else
7811 gcc_assert (errorcount > 0);
7812 if (ok)
7814 if (vec_safe_length (vec) > 0)
7816 /* In a delegating constructor, return the target. */
7817 constructor_elt *ce = &(*vec)[0];
7818 if (ce->index == current_class_ptr)
7820 body = ce->value;
7821 vec_free (vec);
7822 return body;
7825 vec = sort_constexpr_mem_initializers (type, vec);
7826 return build_constructor (type, vec);
7828 else
7829 return error_mark_node;
7832 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
7833 declared to be constexpr, or a sub-statement thereof. Returns the
7834 return value if suitable, error_mark_node for a statement not allowed in
7835 a constexpr function, or NULL_TREE if no return value was found. */
7837 static tree
7838 constexpr_fn_retval (tree body)
7840 switch (TREE_CODE (body))
7842 case STATEMENT_LIST:
7844 tree_stmt_iterator i;
7845 tree expr = NULL_TREE;
7846 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
7848 tree s = constexpr_fn_retval (tsi_stmt (i));
7849 if (s == error_mark_node)
7850 return error_mark_node;
7851 else if (s == NULL_TREE)
7852 /* Keep iterating. */;
7853 else if (expr)
7854 /* Multiple return statements. */
7855 return error_mark_node;
7856 else
7857 expr = s;
7859 return expr;
7862 case RETURN_EXPR:
7863 return break_out_target_exprs (TREE_OPERAND (body, 0));
7865 case DECL_EXPR:
7866 if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL)
7867 return NULL_TREE;
7868 return error_mark_node;
7870 case CLEANUP_POINT_EXPR:
7871 return constexpr_fn_retval (TREE_OPERAND (body, 0));
7873 case USING_STMT:
7874 return NULL_TREE;
7876 default:
7877 return error_mark_node;
7881 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
7882 FUN; do the necessary transformations to turn it into a single expression
7883 that we can store in the hash table. */
7885 static tree
7886 massage_constexpr_body (tree fun, tree body)
7888 if (DECL_CONSTRUCTOR_P (fun))
7889 body = build_constexpr_constructor_member_initializers
7890 (DECL_CONTEXT (fun), body);
7891 else
7893 if (TREE_CODE (body) == EH_SPEC_BLOCK)
7894 body = EH_SPEC_STMTS (body);
7895 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
7896 body = TREE_OPERAND (body, 0);
7897 if (TREE_CODE (body) == BIND_EXPR)
7898 body = BIND_EXPR_BODY (body);
7899 body = constexpr_fn_retval (body);
7901 return body;
7904 /* FUN is a constexpr constructor with massaged body BODY. Return true
7905 if some bases/fields are uninitialized, and complain if COMPLAIN. */
7907 static bool
7908 cx_check_missing_mem_inits (tree fun, tree body, bool complain)
7910 bool bad;
7911 tree field;
7912 unsigned i, nelts;
7913 tree ctype;
7915 if (TREE_CODE (body) != CONSTRUCTOR)
7916 return false;
7918 nelts = CONSTRUCTOR_NELTS (body);
7919 ctype = DECL_CONTEXT (fun);
7920 field = TYPE_FIELDS (ctype);
7922 if (TREE_CODE (ctype) == UNION_TYPE)
7924 if (nelts == 0 && next_initializable_field (field))
7926 if (complain)
7927 error ("%<constexpr%> constructor for union %qT must "
7928 "initialize exactly one non-static data member", ctype);
7929 return true;
7931 return false;
7934 bad = false;
7935 for (i = 0; i <= nelts; ++i)
7937 tree index;
7938 if (i == nelts)
7939 index = NULL_TREE;
7940 else
7942 index = CONSTRUCTOR_ELT (body, i)->index;
7943 /* Skip base and vtable inits. */
7944 if (TREE_CODE (index) != FIELD_DECL
7945 || DECL_ARTIFICIAL (index))
7946 continue;
7948 for (; field != index; field = DECL_CHAIN (field))
7950 tree ftype;
7951 if (TREE_CODE (field) != FIELD_DECL
7952 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
7953 || DECL_ARTIFICIAL (field))
7954 continue;
7955 ftype = strip_array_types (TREE_TYPE (field));
7956 if (type_has_constexpr_default_constructor (ftype))
7958 /* It's OK to skip a member with a trivial constexpr ctor.
7959 A constexpr ctor that isn't trivial should have been
7960 added in by now. */
7961 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
7962 || errorcount != 0);
7963 continue;
7965 if (!complain)
7966 return true;
7967 error ("uninitialized member %qD in %<constexpr%> constructor",
7968 field);
7969 bad = true;
7971 if (field == NULL_TREE)
7972 break;
7973 field = DECL_CHAIN (field);
7976 return bad;
7979 /* We are processing the definition of the constexpr function FUN.
7980 Check that its BODY fulfills the propriate requirements and
7981 enter it in the constexpr function definition table.
7982 For constructor BODY is actually the TREE_LIST of the
7983 member-initializer list. */
7985 tree
7986 register_constexpr_fundef (tree fun, tree body)
7988 constexpr_fundef entry;
7989 constexpr_fundef **slot;
7991 if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
7992 return NULL;
7994 body = massage_constexpr_body (fun, body);
7995 if (body == NULL_TREE || body == error_mark_node)
7997 if (!DECL_CONSTRUCTOR_P (fun))
7998 error ("body of constexpr function %qD not a return-statement", fun);
7999 return NULL;
8002 if (!potential_rvalue_constant_expression (body))
8004 if (!DECL_GENERATED_P (fun))
8005 require_potential_rvalue_constant_expression (body);
8006 return NULL;
8009 if (DECL_CONSTRUCTOR_P (fun)
8010 && cx_check_missing_mem_inits (fun, body, !DECL_GENERATED_P (fun)))
8011 return NULL;
8013 /* Create the constexpr function table if necessary. */
8014 if (constexpr_fundef_table == NULL)
8015 constexpr_fundef_table = htab_create_ggc (101,
8016 constexpr_fundef_hash,
8017 constexpr_fundef_equal,
8018 ggc_free);
8019 entry.decl = fun;
8020 entry.body = body;
8021 slot = (constexpr_fundef **)
8022 htab_find_slot (constexpr_fundef_table, &entry, INSERT);
8024 gcc_assert (*slot == NULL);
8025 *slot = ggc_alloc_constexpr_fundef ();
8026 **slot = entry;
8028 return fun;
8031 /* FUN is a non-constexpr function called in a context that requires a
8032 constant expression. If it comes from a constexpr template, explain why
8033 the instantiation isn't constexpr. */
8035 void
8036 explain_invalid_constexpr_fn (tree fun)
8038 static struct pointer_set_t *diagnosed;
8039 tree body;
8040 location_t save_loc;
8041 /* Only diagnose defaulted functions or instantiations. */
8042 if (!DECL_DEFAULTED_FN (fun)
8043 && !is_instantiation_of_constexpr (fun))
8044 return;
8045 if (diagnosed == NULL)
8046 diagnosed = pointer_set_create ();
8047 if (pointer_set_insert (diagnosed, fun) != 0)
8048 /* Already explained. */
8049 return;
8051 save_loc = input_location;
8052 input_location = DECL_SOURCE_LOCATION (fun);
8053 inform (0, "%q+D is not usable as a constexpr function because:", fun);
8054 /* First check the declaration. */
8055 if (is_valid_constexpr_fn (fun, true))
8057 /* Then if it's OK, the body. */
8058 if (DECL_DEFAULTED_FN (fun))
8059 explain_implicit_non_constexpr (fun);
8060 else
8062 body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
8063 require_potential_rvalue_constant_expression (body);
8064 if (DECL_CONSTRUCTOR_P (fun))
8065 cx_check_missing_mem_inits (fun, body, true);
8068 input_location = save_loc;
8071 /* Objects of this type represent calls to constexpr functions
8072 along with the bindings of parameters to their arguments, for
8073 the purpose of compile time evaluation. */
8075 typedef struct GTY(()) constexpr_call {
8076 /* Description of the constexpr function definition. */
8077 constexpr_fundef *fundef;
8078 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
8079 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
8080 Note: This arrangement is made to accommodate the use of
8081 iterative_hash_template_arg (see pt.c). If you change this
8082 representation, also change the hash calculation in
8083 cxx_eval_call_expression. */
8084 tree bindings;
8085 /* Result of the call.
8086 NULL means the call is being evaluated.
8087 error_mark_node means that the evaluation was erroneous;
8088 otherwise, the actuall value of the call. */
8089 tree result;
8090 /* The hash of this call; we remember it here to avoid having to
8091 recalculate it when expanding the hash table. */
8092 hashval_t hash;
8093 } constexpr_call;
8095 /* A table of all constexpr calls that have been evaluated by the
8096 compiler in this translation unit. */
8098 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
8100 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
8101 bool, bool, bool *, bool *);
8103 /* Compute a hash value for a constexpr call representation. */
8105 static hashval_t
8106 constexpr_call_hash (const void *p)
8108 const constexpr_call *info = (const constexpr_call *) p;
8109 return info->hash;
8112 /* Return 1 if the objects pointed to by P and Q represent calls
8113 to the same constexpr function with the same arguments.
8114 Otherwise, return 0. */
8116 static int
8117 constexpr_call_equal (const void *p, const void *q)
8119 const constexpr_call *lhs = (const constexpr_call *) p;
8120 const constexpr_call *rhs = (const constexpr_call *) q;
8121 tree lhs_bindings;
8122 tree rhs_bindings;
8123 if (lhs == rhs)
8124 return 1;
8125 if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
8126 return 0;
8127 lhs_bindings = lhs->bindings;
8128 rhs_bindings = rhs->bindings;
8129 while (lhs_bindings != NULL && rhs_bindings != NULL)
8131 tree lhs_arg = TREE_VALUE (lhs_bindings);
8132 tree rhs_arg = TREE_VALUE (rhs_bindings);
8133 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
8134 if (!cp_tree_equal (lhs_arg, rhs_arg))
8135 return 0;
8136 lhs_bindings = TREE_CHAIN (lhs_bindings);
8137 rhs_bindings = TREE_CHAIN (rhs_bindings);
8139 return lhs_bindings == rhs_bindings;
8142 /* Initialize the constexpr call table, if needed. */
8144 static void
8145 maybe_initialize_constexpr_call_table (void)
8147 if (constexpr_call_table == NULL)
8148 constexpr_call_table = htab_create_ggc (101,
8149 constexpr_call_hash,
8150 constexpr_call_equal,
8151 ggc_free);
8154 /* Return true if T designates the implied `this' parameter. */
8156 static inline bool
8157 is_this_parameter (tree t)
8159 return t == current_class_ptr;
8162 /* We have an expression tree T that represents a call, either CALL_EXPR
8163 or AGGR_INIT_EXPR. If the call is lexically to a named function,
8164 retrun the _DECL for that function. */
8166 static tree
8167 get_function_named_in_call (tree t)
8169 tree fun = NULL;
8170 switch (TREE_CODE (t))
8172 case CALL_EXPR:
8173 fun = CALL_EXPR_FN (t);
8174 break;
8176 case AGGR_INIT_EXPR:
8177 fun = AGGR_INIT_EXPR_FN (t);
8178 break;
8180 default:
8181 gcc_unreachable();
8182 break;
8184 if (TREE_CODE (fun) == ADDR_EXPR
8185 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
8186 fun = TREE_OPERAND (fun, 0);
8187 return fun;
8190 /* We have an expression tree T that represents a call, either CALL_EXPR
8191 or AGGR_INIT_EXPR. Return the Nth argument. */
8193 static inline tree
8194 get_nth_callarg (tree t, int n)
8196 switch (TREE_CODE (t))
8198 case CALL_EXPR:
8199 return CALL_EXPR_ARG (t, n);
8201 case AGGR_INIT_EXPR:
8202 return AGGR_INIT_EXPR_ARG (t, n);
8204 default:
8205 gcc_unreachable ();
8206 return NULL;
8210 /* Look up the binding of the function parameter T in a constexpr
8211 function call context CALL. */
8213 static tree
8214 lookup_parameter_binding (const constexpr_call *call, tree t)
8216 tree b = purpose_member (t, call->bindings);
8217 return TREE_VALUE (b);
8220 /* Attempt to evaluate T which represents a call to a builtin function.
8221 We assume here that all builtin functions evaluate to scalar types
8222 represented by _CST nodes. */
8224 static tree
8225 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
8226 bool allow_non_constant, bool addr,
8227 bool *non_constant_p, bool *overflow_p)
8229 const int nargs = call_expr_nargs (t);
8230 tree *args = (tree *) alloca (nargs * sizeof (tree));
8231 tree new_call;
8232 int i;
8233 for (i = 0; i < nargs; ++i)
8235 args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
8236 allow_non_constant, addr,
8237 non_constant_p, overflow_p);
8238 if (allow_non_constant && *non_constant_p)
8239 return t;
8241 if (*non_constant_p)
8242 return t;
8243 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
8244 CALL_EXPR_FN (t), nargs, args);
8245 new_call = fold (new_call);
8246 VERIFY_CONSTANT (new_call);
8247 return new_call;
8250 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
8251 the type of the value to match. */
8253 static tree
8254 adjust_temp_type (tree type, tree temp)
8256 if (TREE_TYPE (temp) == type)
8257 return temp;
8258 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
8259 if (TREE_CODE (temp) == CONSTRUCTOR)
8260 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
8261 gcc_assert (scalarish_type_p (type));
8262 return cp_fold_convert (type, temp);
8265 /* Subroutine of cxx_eval_call_expression.
8266 We are processing a call expression (either CALL_EXPR or
8267 AGGR_INIT_EXPR) in the call context of OLD_CALL. Evaluate
8268 all arguments and bind their values to correspondings
8269 parameters, making up the NEW_CALL context. */
8271 static void
8272 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
8273 constexpr_call *new_call,
8274 bool allow_non_constant,
8275 bool *non_constant_p, bool *overflow_p)
8277 const int nargs = call_expr_nargs (t);
8278 tree fun = new_call->fundef->decl;
8279 tree parms = DECL_ARGUMENTS (fun);
8280 int i;
8281 for (i = 0; i < nargs; ++i)
8283 tree x, arg;
8284 tree type = parms ? TREE_TYPE (parms) : void_type_node;
8285 /* For member function, the first argument is a pointer to the implied
8286 object. And for an object construction, don't bind `this' before
8287 it is fully constructed. */
8288 if (i == 0 && DECL_CONSTRUCTOR_P (fun))
8289 goto next;
8290 x = get_nth_callarg (t, i);
8291 if (parms && DECL_BY_REFERENCE (parms))
8293 /* cp_genericize made this a reference for argument passing, but
8294 we don't want to treat it like one for constexpr evaluation. */
8295 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
8296 gcc_assert (TREE_CODE (TREE_TYPE (x)) == REFERENCE_TYPE);
8297 type = TREE_TYPE (type);
8298 x = convert_from_reference (x);
8300 arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
8301 TREE_CODE (type) == REFERENCE_TYPE,
8302 non_constant_p, overflow_p);
8303 /* Don't VERIFY_CONSTANT here. */
8304 if (*non_constant_p && allow_non_constant)
8305 return;
8306 /* Just discard ellipsis args after checking their constantitude. */
8307 if (!parms)
8308 continue;
8309 if (*non_constant_p)
8310 /* Don't try to adjust the type of non-constant args. */
8311 goto next;
8313 /* Make sure the binding has the same type as the parm. */
8314 if (TREE_CODE (type) != REFERENCE_TYPE)
8315 arg = adjust_temp_type (type, arg);
8316 new_call->bindings = tree_cons (parms, arg, new_call->bindings);
8317 next:
8318 parms = TREE_CHAIN (parms);
8322 /* Variables and functions to manage constexpr call expansion context.
8323 These do not need to be marked for PCH or GC. */
8325 /* FIXME remember and print actual constant arguments. */
8326 static vec<tree> call_stack = vNULL;
8327 static int call_stack_tick;
8328 static int last_cx_error_tick;
8330 static bool
8331 push_cx_call_context (tree call)
8333 ++call_stack_tick;
8334 if (!EXPR_HAS_LOCATION (call))
8335 SET_EXPR_LOCATION (call, input_location);
8336 call_stack.safe_push (call);
8337 if (call_stack.length () > (unsigned) max_constexpr_depth)
8338 return false;
8339 return true;
8342 static void
8343 pop_cx_call_context (void)
8345 ++call_stack_tick;
8346 call_stack.pop ();
8349 vec<tree>
8350 cx_error_context (void)
8352 vec<tree> r = vNULL;
8353 if (call_stack_tick != last_cx_error_tick
8354 && !call_stack.is_empty ())
8355 r = call_stack;
8356 last_cx_error_tick = call_stack_tick;
8357 return r;
8360 /* Subroutine of cxx_eval_constant_expression.
8361 Evaluate the call expression tree T in the context of OLD_CALL expression
8362 evaluation. */
8364 static tree
8365 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
8366 bool allow_non_constant, bool addr,
8367 bool *non_constant_p, bool *overflow_p)
8369 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
8370 tree fun = get_function_named_in_call (t);
8371 tree result;
8372 constexpr_call new_call = { NULL, NULL, NULL, 0 };
8373 constexpr_call **slot;
8374 constexpr_call *entry;
8375 bool depth_ok;
8377 if (TREE_CODE (fun) != FUNCTION_DECL)
8379 /* Might be a constexpr function pointer. */
8380 fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
8381 /*addr*/false, non_constant_p, overflow_p);
8382 if (TREE_CODE (fun) == ADDR_EXPR)
8383 fun = TREE_OPERAND (fun, 0);
8385 if (TREE_CODE (fun) != FUNCTION_DECL)
8387 if (!allow_non_constant && !*non_constant_p)
8388 error_at (loc, "expression %qE does not designate a constexpr "
8389 "function", fun);
8390 *non_constant_p = true;
8391 return t;
8393 if (DECL_CLONED_FUNCTION_P (fun))
8394 fun = DECL_CLONED_FUNCTION (fun);
8395 if (is_builtin_fn (fun))
8396 return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
8397 addr, non_constant_p, overflow_p);
8398 if (!DECL_DECLARED_CONSTEXPR_P (fun))
8400 if (!allow_non_constant)
8402 error_at (loc, "call to non-constexpr function %qD", fun);
8403 explain_invalid_constexpr_fn (fun);
8405 *non_constant_p = true;
8406 return t;
8409 /* Shortcut trivial constructor/op=. */
8410 if (trivial_fn_p (fun))
8412 if (call_expr_nargs (t) == 2)
8414 tree arg = convert_from_reference (get_nth_callarg (t, 1));
8415 return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
8416 addr, non_constant_p, overflow_p);
8418 else if (TREE_CODE (t) == AGGR_INIT_EXPR
8419 && AGGR_INIT_ZERO_FIRST (t))
8420 return build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
8423 /* If in direct recursive call, optimize definition search. */
8424 if (old_call != NULL && old_call->fundef->decl == fun)
8425 new_call.fundef = old_call->fundef;
8426 else
8428 new_call.fundef = retrieve_constexpr_fundef (fun);
8429 if (new_call.fundef == NULL || new_call.fundef->body == NULL)
8431 if (!allow_non_constant)
8433 if (DECL_INITIAL (fun))
8435 /* The definition of fun was somehow unsuitable. */
8436 error_at (loc, "%qD called in a constant expression", fun);
8437 explain_invalid_constexpr_fn (fun);
8439 else
8440 error_at (loc, "%qD used before its definition", fun);
8442 *non_constant_p = true;
8443 return t;
8446 cxx_bind_parameters_in_call (old_call, t, &new_call,
8447 allow_non_constant, non_constant_p, overflow_p);
8448 if (*non_constant_p)
8449 return t;
8451 depth_ok = push_cx_call_context (t);
8453 new_call.hash
8454 = iterative_hash_template_arg (new_call.bindings,
8455 constexpr_fundef_hash (new_call.fundef));
8457 /* If we have seen this call before, we are done. */
8458 maybe_initialize_constexpr_call_table ();
8459 slot = (constexpr_call **)
8460 htab_find_slot (constexpr_call_table, &new_call, INSERT);
8461 entry = *slot;
8462 if (entry == NULL)
8464 /* We need to keep a pointer to the entry, not just the slot, as the
8465 slot can move in the call to cxx_eval_builtin_function_call. */
8466 *slot = entry = ggc_alloc_constexpr_call ();
8467 *entry = new_call;
8469 /* Calls which are in progress have their result set to NULL
8470 so that we can detect circular dependencies. */
8471 else if (entry->result == NULL)
8473 if (!allow_non_constant)
8474 error ("call has circular dependency");
8475 *non_constant_p = true;
8476 entry->result = result = error_mark_node;
8479 if (!depth_ok)
8481 if (!allow_non_constant)
8482 error ("constexpr evaluation depth exceeds maximum of %d (use "
8483 "-fconstexpr-depth= to increase the maximum)",
8484 max_constexpr_depth);
8485 *non_constant_p = true;
8486 entry->result = result = error_mark_node;
8488 else
8490 result = entry->result;
8491 if (!result || result == error_mark_node)
8492 result = (cxx_eval_constant_expression
8493 (&new_call, new_call.fundef->body,
8494 allow_non_constant, addr,
8495 non_constant_p, overflow_p));
8496 if (result == error_mark_node)
8497 *non_constant_p = true;
8498 if (*non_constant_p)
8499 entry->result = result = error_mark_node;
8500 else
8502 /* If this was a call to initialize an object, set the type of
8503 the CONSTRUCTOR to the type of that object. */
8504 if (DECL_CONSTRUCTOR_P (fun))
8506 tree ob_arg = get_nth_callarg (t, 0);
8507 STRIP_NOPS (ob_arg);
8508 gcc_assert (TYPE_PTR_P (TREE_TYPE (ob_arg))
8509 && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
8510 result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
8511 result);
8513 entry->result = result;
8517 pop_cx_call_context ();
8518 return unshare_expr (result);
8521 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
8523 bool
8524 reduced_constant_expression_p (tree t)
8526 switch (TREE_CODE (t))
8528 case PTRMEM_CST:
8529 /* Even if we can't lower this yet, it's constant. */
8530 return true;
8532 case CONSTRUCTOR:
8533 /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
8534 tree elt; unsigned HOST_WIDE_INT idx;
8535 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), idx, elt)
8536 if (!reduced_constant_expression_p (elt))
8537 return false;
8538 return true;
8540 default:
8541 /* FIXME are we calling this too much? */
8542 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
8546 /* Some expressions may have constant operands but are not constant
8547 themselves, such as 1/0. Call this function (or rather, the macro
8548 following it) to check for that condition.
8550 We only call this in places that require an arithmetic constant, not in
8551 places where we might have a non-constant expression that can be a
8552 component of a constant expression, such as the address of a constexpr
8553 variable that might be dereferenced later. */
8555 static bool
8556 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p,
8557 bool *overflow_p)
8559 if (!*non_constant_p && !reduced_constant_expression_p (t))
8561 if (!allow_non_constant)
8562 error ("%q+E is not a constant expression", t);
8563 *non_constant_p = true;
8565 if (TREE_OVERFLOW_P (t))
8567 if (!allow_non_constant)
8569 permerror (input_location, "overflow in constant expression");
8570 /* If we're being permissive (and are in an enforcing
8571 context), ignore the overflow. */
8572 if (flag_permissive)
8573 return *non_constant_p;
8575 *overflow_p = true;
8577 return *non_constant_p;
8580 /* Subroutine of cxx_eval_constant_expression.
8581 Attempt to reduce the unary expression tree T to a compile time value.
8582 If successful, return the value. Otherwise issue a diagnostic
8583 and return error_mark_node. */
8585 static tree
8586 cxx_eval_unary_expression (const constexpr_call *call, tree t,
8587 bool allow_non_constant, bool addr,
8588 bool *non_constant_p, bool *overflow_p)
8590 tree r;
8591 tree orig_arg = TREE_OPERAND (t, 0);
8592 tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
8593 addr, non_constant_p, overflow_p);
8594 VERIFY_CONSTANT (arg);
8595 if (arg == orig_arg)
8596 return t;
8597 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
8598 VERIFY_CONSTANT (r);
8599 return r;
8602 /* Subroutine of cxx_eval_constant_expression.
8603 Like cxx_eval_unary_expression, except for binary expressions. */
8605 static tree
8606 cxx_eval_binary_expression (const constexpr_call *call, tree t,
8607 bool allow_non_constant, bool addr,
8608 bool *non_constant_p, bool *overflow_p)
8610 tree r;
8611 tree orig_lhs = TREE_OPERAND (t, 0);
8612 tree orig_rhs = TREE_OPERAND (t, 1);
8613 tree lhs, rhs;
8614 lhs = cxx_eval_constant_expression (call, orig_lhs,
8615 allow_non_constant, addr,
8616 non_constant_p, overflow_p);
8617 VERIFY_CONSTANT (lhs);
8618 rhs = cxx_eval_constant_expression (call, orig_rhs,
8619 allow_non_constant, addr,
8620 non_constant_p, overflow_p);
8621 VERIFY_CONSTANT (rhs);
8622 if (lhs == orig_lhs && rhs == orig_rhs)
8623 return t;
8624 r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
8625 VERIFY_CONSTANT (r);
8626 return r;
8629 /* Subroutine of cxx_eval_constant_expression.
8630 Attempt to evaluate condition expressions. Dead branches are not
8631 looked into. */
8633 static tree
8634 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
8635 bool allow_non_constant, bool addr,
8636 bool *non_constant_p, bool *overflow_p)
8638 tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
8639 allow_non_constant, addr,
8640 non_constant_p, overflow_p);
8641 VERIFY_CONSTANT (val);
8642 /* Don't VERIFY_CONSTANT the other operands. */
8643 if (integer_zerop (val))
8644 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
8645 allow_non_constant, addr,
8646 non_constant_p, overflow_p);
8647 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
8648 allow_non_constant, addr,
8649 non_constant_p, overflow_p);
8652 /* Subroutine of cxx_eval_constant_expression.
8653 Attempt to reduce a reference to an array slot. */
8655 static tree
8656 cxx_eval_array_reference (const constexpr_call *call, tree t,
8657 bool allow_non_constant, bool addr,
8658 bool *non_constant_p, bool *overflow_p)
8660 tree oldary = TREE_OPERAND (t, 0);
8661 tree ary = cxx_eval_constant_expression (call, oldary,
8662 allow_non_constant, addr,
8663 non_constant_p, overflow_p);
8664 tree index, oldidx;
8665 HOST_WIDE_INT i;
8666 tree elem_type;
8667 unsigned len, elem_nchars = 1;
8668 if (*non_constant_p)
8669 return t;
8670 oldidx = TREE_OPERAND (t, 1);
8671 index = cxx_eval_constant_expression (call, oldidx,
8672 allow_non_constant, false,
8673 non_constant_p, overflow_p);
8674 VERIFY_CONSTANT (index);
8675 if (addr && ary == oldary && index == oldidx)
8676 return t;
8677 else if (addr)
8678 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
8679 elem_type = TREE_TYPE (TREE_TYPE (ary));
8680 if (TREE_CODE (ary) == CONSTRUCTOR)
8681 len = CONSTRUCTOR_NELTS (ary);
8682 else if (TREE_CODE (ary) == STRING_CST)
8684 elem_nchars = (TYPE_PRECISION (elem_type)
8685 / TYPE_PRECISION (char_type_node));
8686 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
8688 else
8690 /* We can't do anything with other tree codes, so use
8691 VERIFY_CONSTANT to complain and fail. */
8692 VERIFY_CONSTANT (ary);
8693 gcc_unreachable ();
8695 if (compare_tree_int (index, len) >= 0)
8697 if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
8699 /* If it's within the array bounds but doesn't have an explicit
8700 initializer, it's value-initialized. */
8701 tree val = build_value_init (elem_type, tf_warning_or_error);
8702 return cxx_eval_constant_expression (call, val,
8703 allow_non_constant, addr,
8704 non_constant_p, overflow_p);
8707 if (!allow_non_constant)
8708 error ("array subscript out of bound");
8709 *non_constant_p = true;
8710 return t;
8712 else if (tree_int_cst_lt (index, integer_zero_node))
8714 if (!allow_non_constant)
8715 error ("negative array subscript");
8716 *non_constant_p = true;
8717 return t;
8719 i = tree_to_shwi (index);
8720 if (TREE_CODE (ary) == CONSTRUCTOR)
8721 return (*CONSTRUCTOR_ELTS (ary))[i].value;
8722 else if (elem_nchars == 1)
8723 return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
8724 TREE_STRING_POINTER (ary)[i]);
8725 else
8727 tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
8728 return native_interpret_expr (type, (const unsigned char *)
8729 TREE_STRING_POINTER (ary)
8730 + i * elem_nchars, elem_nchars);
8732 /* Don't VERIFY_CONSTANT here. */
8735 /* Subroutine of cxx_eval_constant_expression.
8736 Attempt to reduce a field access of a value of class type. */
8738 static tree
8739 cxx_eval_component_reference (const constexpr_call *call, tree t,
8740 bool allow_non_constant, bool addr,
8741 bool *non_constant_p, bool *overflow_p)
8743 unsigned HOST_WIDE_INT i;
8744 tree field;
8745 tree value;
8746 tree part = TREE_OPERAND (t, 1);
8747 tree orig_whole = TREE_OPERAND (t, 0);
8748 tree whole = cxx_eval_constant_expression (call, orig_whole,
8749 allow_non_constant, addr,
8750 non_constant_p, overflow_p);
8751 if (whole == orig_whole)
8752 return t;
8753 if (addr)
8754 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
8755 whole, part, NULL_TREE);
8756 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
8757 CONSTRUCTOR. */
8758 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
8760 if (!allow_non_constant)
8761 error ("%qE is not a constant expression", orig_whole);
8762 *non_constant_p = true;
8764 if (DECL_MUTABLE_P (part))
8766 if (!allow_non_constant)
8767 error ("mutable %qD is not usable in a constant expression", part);
8768 *non_constant_p = true;
8770 if (*non_constant_p)
8771 return t;
8772 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
8774 if (field == part)
8775 return value;
8777 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
8778 && CONSTRUCTOR_NELTS (whole) > 0)
8780 /* DR 1188 says we don't have to deal with this. */
8781 if (!allow_non_constant)
8782 error ("accessing %qD member instead of initialized %qD member in "
8783 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
8784 *non_constant_p = true;
8785 return t;
8788 /* If there's no explicit init for this field, it's value-initialized. */
8789 value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
8790 return cxx_eval_constant_expression (call, value,
8791 allow_non_constant, addr,
8792 non_constant_p, overflow_p);
8795 /* Subroutine of cxx_eval_constant_expression.
8796 Attempt to reduce a field access of a value of class type that is
8797 expressed as a BIT_FIELD_REF. */
8799 static tree
8800 cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
8801 bool allow_non_constant, bool addr,
8802 bool *non_constant_p, bool *overflow_p)
8804 tree orig_whole = TREE_OPERAND (t, 0);
8805 tree retval, fldval, utype, mask;
8806 bool fld_seen = false;
8807 HOST_WIDE_INT istart, isize;
8808 tree whole = cxx_eval_constant_expression (call, orig_whole,
8809 allow_non_constant, addr,
8810 non_constant_p, overflow_p);
8811 tree start, field, value;
8812 unsigned HOST_WIDE_INT i;
8814 if (whole == orig_whole)
8815 return t;
8816 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
8817 CONSTRUCTOR. */
8818 if (!*non_constant_p
8819 && TREE_CODE (whole) != VECTOR_CST
8820 && TREE_CODE (whole) != CONSTRUCTOR)
8822 if (!allow_non_constant)
8823 error ("%qE is not a constant expression", orig_whole);
8824 *non_constant_p = true;
8826 if (*non_constant_p)
8827 return t;
8829 if (TREE_CODE (whole) == VECTOR_CST)
8830 return fold_ternary (BIT_FIELD_REF, TREE_TYPE (t), whole,
8831 TREE_OPERAND (t, 1), TREE_OPERAND (t, 2));
8833 start = TREE_OPERAND (t, 2);
8834 istart = tree_to_shwi (start);
8835 isize = tree_to_shwi (TREE_OPERAND (t, 1));
8836 utype = TREE_TYPE (t);
8837 if (!TYPE_UNSIGNED (utype))
8838 utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
8839 retval = build_int_cst (utype, 0);
8840 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
8842 tree bitpos = bit_position (field);
8843 if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
8844 return value;
8845 if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
8846 && TREE_CODE (value) == INTEGER_CST
8847 && tree_fits_shwi_p (bitpos)
8848 && tree_fits_shwi_p (DECL_SIZE (field)))
8850 HOST_WIDE_INT bit = tree_to_shwi (bitpos);
8851 HOST_WIDE_INT sz = tree_to_shwi (DECL_SIZE (field));
8852 HOST_WIDE_INT shift;
8853 if (bit >= istart && bit + sz <= istart + isize)
8855 fldval = fold_convert (utype, value);
8856 mask = build_int_cst_type (utype, -1);
8857 mask = fold_build2 (LSHIFT_EXPR, utype, mask,
8858 size_int (TYPE_PRECISION (utype) - sz));
8859 mask = fold_build2 (RSHIFT_EXPR, utype, mask,
8860 size_int (TYPE_PRECISION (utype) - sz));
8861 fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
8862 shift = bit - istart;
8863 if (BYTES_BIG_ENDIAN)
8864 shift = TYPE_PRECISION (utype) - shift - sz;
8865 fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
8866 size_int (shift));
8867 retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
8868 fld_seen = true;
8872 if (fld_seen)
8873 return fold_convert (TREE_TYPE (t), retval);
8874 gcc_unreachable ();
8875 return error_mark_node;
8878 /* Subroutine of cxx_eval_constant_expression.
8879 Evaluate a short-circuited logical expression T in the context
8880 of a given constexpr CALL. BAILOUT_VALUE is the value for
8881 early return. CONTINUE_VALUE is used here purely for
8882 sanity check purposes. */
8884 static tree
8885 cxx_eval_logical_expression (const constexpr_call *call, tree t,
8886 tree bailout_value, tree continue_value,
8887 bool allow_non_constant, bool addr,
8888 bool *non_constant_p, bool *overflow_p)
8890 tree r;
8891 tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
8892 allow_non_constant, addr,
8893 non_constant_p, overflow_p);
8894 VERIFY_CONSTANT (lhs);
8895 if (tree_int_cst_equal (lhs, bailout_value))
8896 return lhs;
8897 gcc_assert (tree_int_cst_equal (lhs, continue_value));
8898 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
8899 allow_non_constant, addr, non_constant_p, overflow_p);
8900 VERIFY_CONSTANT (r);
8901 return r;
8904 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
8905 CONSTRUCTOR elements to initialize (part of) an object containing that
8906 field. Return a pointer to the constructor_elt corresponding to the
8907 initialization of the field. */
8909 static constructor_elt *
8910 base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref)
8912 tree aggr = TREE_OPERAND (ref, 0);
8913 tree field = TREE_OPERAND (ref, 1);
8914 HOST_WIDE_INT i;
8915 constructor_elt *ce;
8917 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
8919 if (TREE_CODE (aggr) == COMPONENT_REF)
8921 constructor_elt *base_ce
8922 = base_field_constructor_elt (v, aggr);
8923 v = CONSTRUCTOR_ELTS (base_ce->value);
8926 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
8927 if (ce->index == field)
8928 return ce;
8930 gcc_unreachable ();
8931 return NULL;
8934 /* Subroutine of cxx_eval_constant_expression.
8935 The expression tree T denotes a C-style array or a C-style
8936 aggregate. Reduce it to a constant expression. */
8938 static tree
8939 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
8940 bool allow_non_constant, bool addr,
8941 bool *non_constant_p, bool *overflow_p)
8943 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
8944 vec<constructor_elt, va_gc> *n;
8945 vec_alloc (n, vec_safe_length (v));
8946 constructor_elt *ce;
8947 HOST_WIDE_INT i;
8948 bool changed = false;
8949 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
8950 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
8952 tree elt = cxx_eval_constant_expression (call, ce->value,
8953 allow_non_constant, addr,
8954 non_constant_p, overflow_p);
8955 /* Don't VERIFY_CONSTANT here. */
8956 if (allow_non_constant && *non_constant_p)
8957 goto fail;
8958 if (elt != ce->value)
8959 changed = true;
8960 if (ce->index && TREE_CODE (ce->index) == COMPONENT_REF)
8962 /* This is an initialization of a vfield inside a base
8963 subaggregate that we already initialized; push this
8964 initialization into the previous initialization. */
8965 constructor_elt *inner = base_field_constructor_elt (n, ce->index);
8966 inner->value = elt;
8968 else if (ce->index
8969 && (TREE_CODE (ce->index) == NOP_EXPR
8970 || TREE_CODE (ce->index) == POINTER_PLUS_EXPR))
8972 /* This is an initializer for an empty base; now that we've
8973 checked that it's constant, we can ignore it. */
8974 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (ce->index))));
8976 else
8977 CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
8979 if (*non_constant_p || !changed)
8981 fail:
8982 vec_free (n);
8983 return t;
8985 t = build_constructor (TREE_TYPE (t), n);
8986 TREE_CONSTANT (t) = true;
8987 if (TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
8988 t = fold (t);
8989 return t;
8992 /* Subroutine of cxx_eval_constant_expression.
8993 The expression tree T is a VEC_INIT_EXPR which denotes the desired
8994 initialization of a non-static data member of array type. Reduce it to a
8995 CONSTRUCTOR.
8997 Note that apart from value-initialization (when VALUE_INIT is true),
8998 this is only intended to support value-initialization and the
8999 initializations done by defaulted constructors for classes with
9000 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
9001 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
9002 for the copy/move constructor. */
9004 static tree
9005 cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
9006 bool value_init, bool allow_non_constant, bool addr,
9007 bool *non_constant_p, bool *overflow_p)
9009 tree elttype = TREE_TYPE (atype);
9010 int max = tree_to_shwi (array_type_nelts (atype));
9011 vec<constructor_elt, va_gc> *n;
9012 vec_alloc (n, max + 1);
9013 bool pre_init = false;
9014 int i;
9016 /* For the default constructor, build up a call to the default
9017 constructor of the element type. We only need to handle class types
9018 here, as for a constructor to be constexpr, all members must be
9019 initialized, which for a defaulted default constructor means they must
9020 be of a class type with a constexpr default constructor. */
9021 if (TREE_CODE (elttype) == ARRAY_TYPE)
9022 /* We only do this at the lowest level. */;
9023 else if (value_init)
9025 init = build_value_init (elttype, tf_warning_or_error);
9026 init = cxx_eval_constant_expression
9027 (call, init, allow_non_constant, addr, non_constant_p, overflow_p);
9028 pre_init = true;
9030 else if (!init)
9032 vec<tree, va_gc> *argvec = make_tree_vector ();
9033 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
9034 &argvec, elttype, LOOKUP_NORMAL,
9035 tf_warning_or_error);
9036 release_tree_vector (argvec);
9037 init = cxx_eval_constant_expression (call, init, allow_non_constant,
9038 addr, non_constant_p, overflow_p);
9039 pre_init = true;
9042 if (*non_constant_p && !allow_non_constant)
9043 goto fail;
9045 for (i = 0; i <= max; ++i)
9047 tree idx = build_int_cst (size_type_node, i);
9048 tree eltinit;
9049 if (TREE_CODE (elttype) == ARRAY_TYPE)
9051 /* A multidimensional array; recurse. */
9052 if (value_init || init == NULL_TREE)
9053 eltinit = NULL_TREE;
9054 else
9055 eltinit = cp_build_array_ref (input_location, init, idx,
9056 tf_warning_or_error);
9057 eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
9058 allow_non_constant, addr,
9059 non_constant_p, overflow_p);
9061 else if (pre_init)
9063 /* Initializing an element using value or default initialization
9064 we just pre-built above. */
9065 if (i == 0)
9066 eltinit = init;
9067 else
9068 eltinit = unshare_expr (init);
9070 else
9072 /* Copying an element. */
9073 gcc_assert (same_type_ignoring_top_level_qualifiers_p
9074 (atype, TREE_TYPE (init)));
9075 eltinit = cp_build_array_ref (input_location, init, idx,
9076 tf_warning_or_error);
9077 if (!real_lvalue_p (init))
9078 eltinit = move (eltinit);
9079 eltinit = force_rvalue (eltinit, tf_warning_or_error);
9080 eltinit = cxx_eval_constant_expression
9081 (call, eltinit, allow_non_constant, addr, non_constant_p, overflow_p);
9083 if (*non_constant_p && !allow_non_constant)
9084 goto fail;
9085 CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
9088 if (!*non_constant_p)
9090 init = build_constructor (atype, n);
9091 TREE_CONSTANT (init) = true;
9092 return init;
9095 fail:
9096 vec_free (n);
9097 return init;
9100 static tree
9101 cxx_eval_vec_init (const constexpr_call *call, tree t,
9102 bool allow_non_constant, bool addr,
9103 bool *non_constant_p, bool *overflow_p)
9105 tree atype = TREE_TYPE (t);
9106 tree init = VEC_INIT_EXPR_INIT (t);
9107 tree r = cxx_eval_vec_init_1 (call, atype, init,
9108 VEC_INIT_EXPR_VALUE_INIT (t),
9109 allow_non_constant, addr, non_constant_p, overflow_p);
9110 if (*non_constant_p)
9111 return t;
9112 else
9113 return r;
9116 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
9117 match. We want to be less strict for simple *& folding; if we have a
9118 non-const temporary that we access through a const pointer, that should
9119 work. We handle this here rather than change fold_indirect_ref_1
9120 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
9121 don't really make sense outside of constant expression evaluation. Also
9122 we want to allow folding to COMPONENT_REF, which could cause trouble
9123 with TBAA in fold_indirect_ref_1.
9125 Try to keep this function synced with fold_indirect_ref_1. */
9127 static tree
9128 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
9130 tree sub, subtype;
9132 sub = op0;
9133 STRIP_NOPS (sub);
9134 subtype = TREE_TYPE (sub);
9135 if (!POINTER_TYPE_P (subtype))
9136 return NULL_TREE;
9138 if (TREE_CODE (sub) == ADDR_EXPR)
9140 tree op = TREE_OPERAND (sub, 0);
9141 tree optype = TREE_TYPE (op);
9143 /* *&CONST_DECL -> to the value of the const decl. */
9144 if (TREE_CODE (op) == CONST_DECL)
9145 return DECL_INITIAL (op);
9146 /* *&p => p; make sure to handle *&"str"[cst] here. */
9147 if (same_type_ignoring_top_level_qualifiers_p (optype, type))
9149 tree fop = fold_read_from_constant_string (op);
9150 if (fop)
9151 return fop;
9152 else
9153 return op;
9155 /* *(foo *)&fooarray => fooarray[0] */
9156 else if (TREE_CODE (optype) == ARRAY_TYPE
9157 && (same_type_ignoring_top_level_qualifiers_p
9158 (type, TREE_TYPE (optype))))
9160 tree type_domain = TYPE_DOMAIN (optype);
9161 tree min_val = size_zero_node;
9162 if (type_domain && TYPE_MIN_VALUE (type_domain))
9163 min_val = TYPE_MIN_VALUE (type_domain);
9164 return build4_loc (loc, ARRAY_REF, type, op, min_val,
9165 NULL_TREE, NULL_TREE);
9167 /* *(foo *)&complexfoo => __real__ complexfoo */
9168 else if (TREE_CODE (optype) == COMPLEX_TYPE
9169 && (same_type_ignoring_top_level_qualifiers_p
9170 (type, TREE_TYPE (optype))))
9171 return fold_build1_loc (loc, REALPART_EXPR, type, op);
9172 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
9173 else if (TREE_CODE (optype) == VECTOR_TYPE
9174 && (same_type_ignoring_top_level_qualifiers_p
9175 (type, TREE_TYPE (optype))))
9177 tree part_width = TYPE_SIZE (type);
9178 tree index = bitsize_int (0);
9179 return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
9181 /* Also handle conversion to an empty base class, which
9182 is represented with a NOP_EXPR. */
9183 else if (is_empty_class (type)
9184 && CLASS_TYPE_P (optype)
9185 && DERIVED_FROM_P (type, optype))
9187 *empty_base = true;
9188 return op;
9190 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
9191 else if (RECORD_OR_UNION_TYPE_P (optype))
9193 tree field = TYPE_FIELDS (optype);
9194 for (; field; field = DECL_CHAIN (field))
9195 if (TREE_CODE (field) == FIELD_DECL
9196 && integer_zerop (byte_position (field))
9197 && (same_type_ignoring_top_level_qualifiers_p
9198 (TREE_TYPE (field), type)))
9200 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
9201 break;
9205 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
9206 && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
9208 tree op00 = TREE_OPERAND (sub, 0);
9209 tree op01 = TREE_OPERAND (sub, 1);
9211 STRIP_NOPS (op00);
9212 if (TREE_CODE (op00) == ADDR_EXPR)
9214 tree op00type;
9215 op00 = TREE_OPERAND (op00, 0);
9216 op00type = TREE_TYPE (op00);
9218 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
9219 if (TREE_CODE (op00type) == VECTOR_TYPE
9220 && (same_type_ignoring_top_level_qualifiers_p
9221 (type, TREE_TYPE (op00type))))
9223 HOST_WIDE_INT offset = tree_to_shwi (op01);
9224 tree part_width = TYPE_SIZE (type);
9225 unsigned HOST_WIDE_INT part_widthi = tree_to_shwi (part_width)/BITS_PER_UNIT;
9226 unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
9227 tree index = bitsize_int (indexi);
9229 if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
9230 return fold_build3_loc (loc,
9231 BIT_FIELD_REF, type, op00,
9232 part_width, index);
9235 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
9236 else if (TREE_CODE (op00type) == COMPLEX_TYPE
9237 && (same_type_ignoring_top_level_qualifiers_p
9238 (type, TREE_TYPE (op00type))))
9240 tree size = TYPE_SIZE_UNIT (type);
9241 if (tree_int_cst_equal (size, op01))
9242 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
9244 /* ((foo *)&fooarray)[1] => fooarray[1] */
9245 else if (TREE_CODE (op00type) == ARRAY_TYPE
9246 && (same_type_ignoring_top_level_qualifiers_p
9247 (type, TREE_TYPE (op00type))))
9249 tree type_domain = TYPE_DOMAIN (op00type);
9250 tree min_val = size_zero_node;
9251 if (type_domain && TYPE_MIN_VALUE (type_domain))
9252 min_val = TYPE_MIN_VALUE (type_domain);
9253 op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
9254 TYPE_SIZE_UNIT (type));
9255 op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
9256 return build4_loc (loc, ARRAY_REF, type, op00, op01,
9257 NULL_TREE, NULL_TREE);
9259 /* Also handle conversion to an empty base class, which
9260 is represented with a NOP_EXPR. */
9261 else if (is_empty_class (type)
9262 && CLASS_TYPE_P (op00type)
9263 && DERIVED_FROM_P (type, op00type))
9265 *empty_base = true;
9266 return op00;
9268 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
9269 else if (RECORD_OR_UNION_TYPE_P (op00type))
9271 tree field = TYPE_FIELDS (op00type);
9272 for (; field; field = DECL_CHAIN (field))
9273 if (TREE_CODE (field) == FIELD_DECL
9274 && tree_int_cst_equal (byte_position (field), op01)
9275 && (same_type_ignoring_top_level_qualifiers_p
9276 (TREE_TYPE (field), type)))
9278 return fold_build3 (COMPONENT_REF, type, op00,
9279 field, NULL_TREE);
9280 break;
9285 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
9286 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
9287 && (same_type_ignoring_top_level_qualifiers_p
9288 (type, TREE_TYPE (TREE_TYPE (subtype)))))
9290 tree type_domain;
9291 tree min_val = size_zero_node;
9292 tree newsub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
9293 if (newsub)
9294 sub = newsub;
9295 else
9296 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
9297 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
9298 if (type_domain && TYPE_MIN_VALUE (type_domain))
9299 min_val = TYPE_MIN_VALUE (type_domain);
9300 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
9301 NULL_TREE);
9304 return NULL_TREE;
9307 static tree
9308 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
9309 bool allow_non_constant, bool addr,
9310 bool *non_constant_p, bool *overflow_p)
9312 tree orig_op0 = TREE_OPERAND (t, 0);
9313 tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
9314 /*addr*/false, non_constant_p, overflow_p);
9315 bool empty_base = false;
9316 tree r;
9318 /* Don't VERIFY_CONSTANT here. */
9319 if (*non_constant_p)
9320 return t;
9322 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
9323 &empty_base);
9325 if (r)
9326 r = cxx_eval_constant_expression (call, r, allow_non_constant,
9327 addr, non_constant_p, overflow_p);
9328 else
9330 tree sub = op0;
9331 STRIP_NOPS (sub);
9332 if (TREE_CODE (sub) == ADDR_EXPR)
9334 /* We couldn't fold to a constant value. Make sure it's not
9335 something we should have been able to fold. */
9336 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
9337 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
9338 /* DR 1188 says we don't have to deal with this. */
9339 if (!allow_non_constant)
9340 error ("accessing value of %qE through a %qT glvalue in a "
9341 "constant expression", build_fold_indirect_ref (sub),
9342 TREE_TYPE (t));
9343 *non_constant_p = true;
9344 return t;
9348 /* If we're pulling out the value of an empty base, make sure
9349 that the whole object is constant and then return an empty
9350 CONSTRUCTOR. */
9351 if (empty_base)
9353 VERIFY_CONSTANT (r);
9354 r = build_constructor (TREE_TYPE (t), NULL);
9355 TREE_CONSTANT (r) = true;
9358 if (r == NULL_TREE)
9360 if (addr && op0 != orig_op0)
9361 return build1 (INDIRECT_REF, TREE_TYPE (t), op0);
9362 if (!addr)
9363 VERIFY_CONSTANT (t);
9364 return t;
9366 return r;
9369 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
9370 Shared between potential_constant_expression and
9371 cxx_eval_constant_expression. */
9373 static void
9374 non_const_var_error (tree r)
9376 tree type = TREE_TYPE (r);
9377 error ("the value of %qD is not usable in a constant "
9378 "expression", r);
9379 /* Avoid error cascade. */
9380 if (DECL_INITIAL (r) == error_mark_node)
9381 return;
9382 if (DECL_DECLARED_CONSTEXPR_P (r))
9383 inform (DECL_SOURCE_LOCATION (r),
9384 "%qD used in its own initializer", r);
9385 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9387 if (!CP_TYPE_CONST_P (type))
9388 inform (DECL_SOURCE_LOCATION (r),
9389 "%q#D is not const", r);
9390 else if (CP_TYPE_VOLATILE_P (type))
9391 inform (DECL_SOURCE_LOCATION (r),
9392 "%q#D is volatile", r);
9393 else if (!DECL_INITIAL (r)
9394 || !TREE_CONSTANT (DECL_INITIAL (r)))
9395 inform (DECL_SOURCE_LOCATION (r),
9396 "%qD was not initialized with a constant "
9397 "expression", r);
9398 else
9399 gcc_unreachable ();
9401 else
9403 if (cxx_dialect >= cxx11 && !DECL_DECLARED_CONSTEXPR_P (r))
9404 inform (DECL_SOURCE_LOCATION (r),
9405 "%qD was not declared %<constexpr%>", r);
9406 else
9407 inform (DECL_SOURCE_LOCATION (r),
9408 "%qD does not have integral or enumeration type",
9413 /* Subroutine of cxx_eval_constant_expression.
9414 Like cxx_eval_unary_expression, except for trinary expressions. */
9416 static tree
9417 cxx_eval_trinary_expression (const constexpr_call *call, tree t,
9418 bool allow_non_constant, bool addr,
9419 bool *non_constant_p, bool *overflow_p)
9421 int i;
9422 tree args[3];
9423 tree val;
9425 for (i = 0; i < 3; i++)
9427 args[i] = cxx_eval_constant_expression (call, TREE_OPERAND (t, i),
9428 allow_non_constant, addr,
9429 non_constant_p, overflow_p);
9430 VERIFY_CONSTANT (args[i]);
9433 val = fold_ternary_loc (EXPR_LOCATION (t), TREE_CODE (t), TREE_TYPE (t),
9434 args[0], args[1], args[2]);
9435 if (val == NULL_TREE)
9436 return t;
9437 VERIFY_CONSTANT (val);
9438 return val;
9441 /* Attempt to reduce the expression T to a constant value.
9442 On failure, issue diagnostic and return error_mark_node. */
9443 /* FIXME unify with c_fully_fold */
9445 static tree
9446 cxx_eval_constant_expression (const constexpr_call *call, tree t,
9447 bool allow_non_constant, bool addr,
9448 bool *non_constant_p, bool *overflow_p)
9450 tree r = t;
9452 if (t == error_mark_node)
9454 *non_constant_p = true;
9455 return t;
9457 if (CONSTANT_CLASS_P (t))
9459 if (TREE_CODE (t) == PTRMEM_CST)
9460 t = cplus_expand_constant (t);
9461 else if (TREE_OVERFLOW (t) && (!flag_permissive || allow_non_constant))
9462 *overflow_p = true;
9463 return t;
9465 if (TREE_CODE (t) != NOP_EXPR
9466 && reduced_constant_expression_p (t))
9467 return fold (t);
9469 switch (TREE_CODE (t))
9471 case VAR_DECL:
9472 if (addr)
9473 return t;
9474 /* else fall through. */
9475 case CONST_DECL:
9476 r = integral_constant_value (t);
9477 if (TREE_CODE (r) == TARGET_EXPR
9478 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
9479 r = TARGET_EXPR_INITIAL (r);
9480 if (DECL_P (r))
9482 if (!allow_non_constant)
9483 non_const_var_error (r);
9484 *non_constant_p = true;
9486 break;
9488 case FUNCTION_DECL:
9489 case TEMPLATE_DECL:
9490 case LABEL_DECL:
9491 return t;
9493 case PARM_DECL:
9494 if (call && DECL_CONTEXT (t) == call->fundef->decl)
9496 if (DECL_ARTIFICIAL (t) && DECL_CONSTRUCTOR_P (DECL_CONTEXT (t)))
9498 if (!allow_non_constant)
9499 sorry ("use of the value of the object being constructed "
9500 "in a constant expression");
9501 *non_constant_p = true;
9503 else
9504 r = lookup_parameter_binding (call, t);
9506 else if (addr)
9507 /* Defer in case this is only used for its type. */;
9508 else
9510 if (!allow_non_constant)
9511 error ("%qE is not a constant expression", t);
9512 *non_constant_p = true;
9514 break;
9516 case CALL_EXPR:
9517 case AGGR_INIT_EXPR:
9518 r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
9519 non_constant_p, overflow_p);
9520 break;
9522 case TARGET_EXPR:
9523 if (!literal_type_p (TREE_TYPE (t)))
9525 if (!allow_non_constant)
9527 error ("temporary of non-literal type %qT in a "
9528 "constant expression", TREE_TYPE (t));
9529 explain_non_literal_class (TREE_TYPE (t));
9531 *non_constant_p = true;
9532 break;
9534 /* else fall through. */
9535 case INIT_EXPR:
9536 /* Pass false for 'addr' because these codes indicate
9537 initialization of a temporary. */
9538 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
9539 allow_non_constant, false,
9540 non_constant_p, overflow_p);
9541 if (!*non_constant_p)
9542 /* Adjust the type of the result to the type of the temporary. */
9543 r = adjust_temp_type (TREE_TYPE (t), r);
9544 break;
9546 case SCOPE_REF:
9547 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
9548 allow_non_constant, addr,
9549 non_constant_p, overflow_p);
9550 break;
9552 case RETURN_EXPR:
9553 case NON_LVALUE_EXPR:
9554 case TRY_CATCH_EXPR:
9555 case CLEANUP_POINT_EXPR:
9556 case MUST_NOT_THROW_EXPR:
9557 case SAVE_EXPR:
9558 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
9559 allow_non_constant, addr,
9560 non_constant_p, overflow_p);
9561 break;
9563 /* These differ from cxx_eval_unary_expression in that this doesn't
9564 check for a constant operand or result; an address can be
9565 constant without its operand being, and vice versa. */
9566 case INDIRECT_REF:
9567 r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
9568 non_constant_p, overflow_p);
9569 break;
9571 case ADDR_EXPR:
9573 tree oldop = TREE_OPERAND (t, 0);
9574 tree op = cxx_eval_constant_expression (call, oldop,
9575 allow_non_constant,
9576 /*addr*/true,
9577 non_constant_p, overflow_p);
9578 /* Don't VERIFY_CONSTANT here. */
9579 if (*non_constant_p)
9580 return t;
9581 /* This function does more aggressive folding than fold itself. */
9582 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
9583 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
9584 return t;
9585 break;
9588 case REALPART_EXPR:
9589 case IMAGPART_EXPR:
9590 case CONJ_EXPR:
9591 case FIX_TRUNC_EXPR:
9592 case FLOAT_EXPR:
9593 case NEGATE_EXPR:
9594 case ABS_EXPR:
9595 case BIT_NOT_EXPR:
9596 case TRUTH_NOT_EXPR:
9597 case FIXED_CONVERT_EXPR:
9598 r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
9599 non_constant_p, overflow_p);
9600 break;
9602 case SIZEOF_EXPR:
9603 if (SIZEOF_EXPR_TYPE_P (t))
9604 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9605 SIZEOF_EXPR, false);
9606 else if (TYPE_P (TREE_OPERAND (t, 0)))
9607 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9608 false);
9609 else
9610 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9611 false);
9612 if (r == error_mark_node)
9613 r = size_one_node;
9614 VERIFY_CONSTANT (r);
9615 break;
9617 case COMPOUND_EXPR:
9619 /* check_return_expr sometimes wraps a TARGET_EXPR in a
9620 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
9621 introduced by build_call_a. */
9622 tree op0 = TREE_OPERAND (t, 0);
9623 tree op1 = TREE_OPERAND (t, 1);
9624 STRIP_NOPS (op1);
9625 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
9626 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
9627 r = cxx_eval_constant_expression (call, op0, allow_non_constant,
9628 addr, non_constant_p, overflow_p);
9629 else
9631 /* Check that the LHS is constant and then discard it. */
9632 cxx_eval_constant_expression (call, op0, allow_non_constant,
9633 false, non_constant_p, overflow_p);
9634 op1 = TREE_OPERAND (t, 1);
9635 r = cxx_eval_constant_expression (call, op1, allow_non_constant,
9636 addr, non_constant_p, overflow_p);
9639 break;
9641 case POINTER_PLUS_EXPR:
9642 case PLUS_EXPR:
9643 case MINUS_EXPR:
9644 case MULT_EXPR:
9645 case TRUNC_DIV_EXPR:
9646 case CEIL_DIV_EXPR:
9647 case FLOOR_DIV_EXPR:
9648 case ROUND_DIV_EXPR:
9649 case TRUNC_MOD_EXPR:
9650 case CEIL_MOD_EXPR:
9651 case ROUND_MOD_EXPR:
9652 case RDIV_EXPR:
9653 case EXACT_DIV_EXPR:
9654 case MIN_EXPR:
9655 case MAX_EXPR:
9656 case LSHIFT_EXPR:
9657 case RSHIFT_EXPR:
9658 case LROTATE_EXPR:
9659 case RROTATE_EXPR:
9660 case BIT_IOR_EXPR:
9661 case BIT_XOR_EXPR:
9662 case BIT_AND_EXPR:
9663 case TRUTH_XOR_EXPR:
9664 case LT_EXPR:
9665 case LE_EXPR:
9666 case GT_EXPR:
9667 case GE_EXPR:
9668 case EQ_EXPR:
9669 case NE_EXPR:
9670 case UNORDERED_EXPR:
9671 case ORDERED_EXPR:
9672 case UNLT_EXPR:
9673 case UNLE_EXPR:
9674 case UNGT_EXPR:
9675 case UNGE_EXPR:
9676 case UNEQ_EXPR:
9677 case LTGT_EXPR:
9678 case RANGE_EXPR:
9679 case COMPLEX_EXPR:
9680 r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
9681 non_constant_p, overflow_p);
9682 break;
9684 /* fold can introduce non-IF versions of these; still treat them as
9685 short-circuiting. */
9686 case TRUTH_AND_EXPR:
9687 case TRUTH_ANDIF_EXPR:
9688 r = cxx_eval_logical_expression (call, t, boolean_false_node,
9689 boolean_true_node,
9690 allow_non_constant, addr,
9691 non_constant_p, overflow_p);
9692 break;
9694 case TRUTH_OR_EXPR:
9695 case TRUTH_ORIF_EXPR:
9696 r = cxx_eval_logical_expression (call, t, boolean_true_node,
9697 boolean_false_node,
9698 allow_non_constant, addr,
9699 non_constant_p, overflow_p);
9700 break;
9702 case ARRAY_REF:
9703 r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
9704 non_constant_p, overflow_p);
9705 break;
9707 case COMPONENT_REF:
9708 if (is_overloaded_fn (t))
9710 /* We can only get here in checking mode via
9711 build_non_dependent_expr, because any expression that
9712 calls or takes the address of the function will have
9713 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
9714 gcc_checking_assert (allow_non_constant || errorcount);
9715 *non_constant_p = true;
9716 return t;
9718 r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
9719 non_constant_p, overflow_p);
9720 break;
9722 case BIT_FIELD_REF:
9723 r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
9724 non_constant_p, overflow_p);
9725 break;
9727 case COND_EXPR:
9728 case VEC_COND_EXPR:
9729 r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
9730 non_constant_p, overflow_p);
9731 break;
9733 case CONSTRUCTOR:
9734 r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
9735 non_constant_p, overflow_p);
9736 break;
9738 case VEC_INIT_EXPR:
9739 /* We can get this in a defaulted constructor for a class with a
9740 non-static data member of array type. Either the initializer will
9741 be NULL, meaning default-initialization, or it will be an lvalue
9742 or xvalue of the same type, meaning direct-initialization from the
9743 corresponding member. */
9744 r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
9745 non_constant_p, overflow_p);
9746 break;
9748 case FMA_EXPR:
9749 case VEC_PERM_EXPR:
9750 r = cxx_eval_trinary_expression (call, t, allow_non_constant, addr,
9751 non_constant_p, overflow_p);
9752 break;
9754 case CONVERT_EXPR:
9755 case VIEW_CONVERT_EXPR:
9756 case NOP_EXPR:
9758 tree oldop = TREE_OPERAND (t, 0);
9759 tree op = cxx_eval_constant_expression (call, oldop,
9760 allow_non_constant, addr,
9761 non_constant_p, overflow_p);
9762 if (*non_constant_p)
9763 return t;
9764 if (POINTER_TYPE_P (TREE_TYPE (t))
9765 && TREE_CODE (op) == INTEGER_CST
9766 && !integer_zerop (op))
9768 if (!allow_non_constant)
9769 error_at (EXPR_LOC_OR_LOC (t, input_location),
9770 "reinterpret_cast from integer to pointer");
9771 *non_constant_p = true;
9772 return t;
9774 if (op == oldop)
9775 /* We didn't fold at the top so we could check for ptr-int
9776 conversion. */
9777 return fold (t);
9778 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), op);
9779 /* Conversion of an out-of-range value has implementation-defined
9780 behavior; the language considers it different from arithmetic
9781 overflow, which is undefined. */
9782 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
9783 TREE_OVERFLOW (r) = false;
9785 break;
9787 case EMPTY_CLASS_EXPR:
9788 /* This is good enough for a function argument that might not get
9789 used, and they can't do anything with it, so just return it. */
9790 return t;
9792 case LAMBDA_EXPR:
9793 case PREINCREMENT_EXPR:
9794 case POSTINCREMENT_EXPR:
9795 case PREDECREMENT_EXPR:
9796 case POSTDECREMENT_EXPR:
9797 case NEW_EXPR:
9798 case VEC_NEW_EXPR:
9799 case DELETE_EXPR:
9800 case VEC_DELETE_EXPR:
9801 case THROW_EXPR:
9802 case MODIFY_EXPR:
9803 case MODOP_EXPR:
9804 /* GCC internal stuff. */
9805 case VA_ARG_EXPR:
9806 case OBJ_TYPE_REF:
9807 case WITH_CLEANUP_EXPR:
9808 case STATEMENT_LIST:
9809 case BIND_EXPR:
9810 case NON_DEPENDENT_EXPR:
9811 case BASELINK:
9812 case EXPR_STMT:
9813 case OFFSET_REF:
9814 if (!allow_non_constant)
9815 error_at (EXPR_LOC_OR_LOC (t, input_location),
9816 "expression %qE is not a constant-expression", t);
9817 *non_constant_p = true;
9818 break;
9820 default:
9821 internal_error ("unexpected expression %qE of kind %s", t,
9822 get_tree_code_name (TREE_CODE (t)));
9823 *non_constant_p = true;
9824 break;
9827 if (r == error_mark_node)
9828 *non_constant_p = true;
9830 if (*non_constant_p)
9831 return t;
9832 else
9833 return r;
9836 static tree
9837 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
9839 bool non_constant_p = false;
9840 bool overflow_p = false;
9841 tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
9842 false, &non_constant_p, &overflow_p);
9844 verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
9846 if (TREE_CODE (t) != CONSTRUCTOR
9847 && cp_has_mutable_p (TREE_TYPE (t)))
9849 /* We allow a mutable type if the original expression was a
9850 CONSTRUCTOR so that we can do aggregate initialization of
9851 constexpr variables. */
9852 if (!allow_non_constant)
9853 error ("%qT cannot be the type of a complete constant expression "
9854 "because it has mutable sub-objects", TREE_TYPE (t));
9855 non_constant_p = true;
9858 /* Technically we should check this for all subexpressions, but that
9859 runs into problems with our internal representation of pointer
9860 subtraction and the 5.19 rules are still in flux. */
9861 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
9862 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
9863 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
9865 if (!allow_non_constant)
9866 error ("conversion from pointer type %qT "
9867 "to arithmetic type %qT in a constant-expression",
9868 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
9869 non_constant_p = true;
9872 if (!non_constant_p && overflow_p)
9873 non_constant_p = true;
9875 if (non_constant_p && !allow_non_constant)
9876 return error_mark_node;
9877 else if (non_constant_p && TREE_CONSTANT (r))
9879 /* This isn't actually constant, so unset TREE_CONSTANT. */
9880 if (EXPR_P (r))
9881 r = copy_node (r);
9882 else if (TREE_CODE (r) == CONSTRUCTOR)
9883 r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
9884 else
9885 r = build_nop (TREE_TYPE (r), r);
9886 TREE_CONSTANT (r) = false;
9888 else if (non_constant_p || r == t)
9889 return t;
9891 if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
9893 if (TREE_CODE (t) == TARGET_EXPR
9894 && TARGET_EXPR_INITIAL (t) == r)
9895 return t;
9896 else
9898 r = get_target_expr (r);
9899 TREE_CONSTANT (r) = true;
9900 return r;
9903 else
9904 return r;
9907 /* Returns true if T is a valid subexpression of a constant expression,
9908 even if it isn't itself a constant expression. */
9910 bool
9911 is_sub_constant_expr (tree t)
9913 bool non_constant_p = false;
9914 bool overflow_p = false;
9915 cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p,
9916 &overflow_p);
9917 return !non_constant_p && !overflow_p;
9920 /* If T represents a constant expression returns its reduced value.
9921 Otherwise return error_mark_node. If T is dependent, then
9922 return NULL. */
9924 tree
9925 cxx_constant_value (tree t)
9927 return cxx_eval_outermost_constant_expr (t, false);
9930 /* If T is a constant expression, returns its reduced value.
9931 Otherwise, if T does not have TREE_CONSTANT set, returns T.
9932 Otherwise, returns a version of T without TREE_CONSTANT. */
9934 tree
9935 maybe_constant_value (tree t)
9937 tree r;
9939 if (instantiation_dependent_expression_p (t)
9940 || type_unknown_p (t)
9941 || BRACE_ENCLOSED_INITIALIZER_P (t)
9942 || !potential_constant_expression (t))
9944 if (TREE_OVERFLOW_P (t))
9946 t = build_nop (TREE_TYPE (t), t);
9947 TREE_CONSTANT (t) = false;
9949 return t;
9952 r = cxx_eval_outermost_constant_expr (t, true);
9953 #ifdef ENABLE_CHECKING
9954 /* cp_tree_equal looks through NOPs, so allow them. */
9955 gcc_assert (r == t
9956 || CONVERT_EXPR_P (t)
9957 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
9958 || !cp_tree_equal (r, t));
9959 #endif
9960 return r;
9963 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
9964 than wrapped in a TARGET_EXPR. */
9966 tree
9967 maybe_constant_init (tree t)
9969 t = maybe_constant_value (t);
9970 if (TREE_CODE (t) == TARGET_EXPR)
9972 tree init = TARGET_EXPR_INITIAL (t);
9973 if (TREE_CODE (init) == CONSTRUCTOR)
9974 t = init;
9976 return t;
9979 #if 0
9980 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
9981 /* Return true if the object referred to by REF has automatic or thread
9982 local storage. */
9984 enum { ck_ok, ck_bad, ck_unknown };
9985 static int
9986 check_automatic_or_tls (tree ref)
9988 enum machine_mode mode;
9989 HOST_WIDE_INT bitsize, bitpos;
9990 tree offset;
9991 int volatilep = 0, unsignedp = 0;
9992 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
9993 &mode, &unsignedp, &volatilep, false);
9994 duration_kind dk;
9996 /* If there isn't a decl in the middle, we don't know the linkage here,
9997 and this isn't a constant expression anyway. */
9998 if (!DECL_P (decl))
9999 return ck_unknown;
10000 dk = decl_storage_duration (decl);
10001 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
10003 #endif
10005 /* Return true if T denotes a potentially constant expression. Issue
10006 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
10007 an lvalue-rvalue conversion is implied.
10009 C++0x [expr.const] used to say
10011 6 An expression is a potential constant expression if it is
10012 a constant expression where all occurrences of function
10013 parameters are replaced by arbitrary constant expressions
10014 of the appropriate type.
10016 2 A conditional expression is a constant expression unless it
10017 involves one of the following as a potentially evaluated
10018 subexpression (3.2), but subexpressions of logical AND (5.14),
10019 logical OR (5.15), and conditional (5.16) operations that are
10020 not evaluated are not considered. */
10022 static bool
10023 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
10025 enum { any = false, rval = true };
10026 int i;
10027 tree tmp;
10029 if (t == error_mark_node)
10030 return false;
10031 if (t == NULL_TREE)
10032 return true;
10033 if (TREE_THIS_VOLATILE (t))
10035 if (flags & tf_error)
10036 error ("expression %qE has side-effects", t);
10037 return false;
10039 if (CONSTANT_CLASS_P (t))
10040 return true;
10042 switch (TREE_CODE (t))
10044 case FUNCTION_DECL:
10045 case BASELINK:
10046 case TEMPLATE_DECL:
10047 case OVERLOAD:
10048 case TEMPLATE_ID_EXPR:
10049 case LABEL_DECL:
10050 case LABEL_EXPR:
10051 case CONST_DECL:
10052 case SIZEOF_EXPR:
10053 case ALIGNOF_EXPR:
10054 case OFFSETOF_EXPR:
10055 case NOEXCEPT_EXPR:
10056 case TEMPLATE_PARM_INDEX:
10057 case TRAIT_EXPR:
10058 case IDENTIFIER_NODE:
10059 case USERDEF_LITERAL:
10060 /* We can see a FIELD_DECL in a pointer-to-member expression. */
10061 case FIELD_DECL:
10062 case PARM_DECL:
10063 case USING_DECL:
10064 return true;
10066 case AGGR_INIT_EXPR:
10067 case CALL_EXPR:
10068 /* -- an invocation of a function other than a constexpr function
10069 or a constexpr constructor. */
10071 tree fun = get_function_named_in_call (t);
10072 const int nargs = call_expr_nargs (t);
10073 i = 0;
10075 if (is_overloaded_fn (fun))
10077 if (TREE_CODE (fun) == FUNCTION_DECL)
10079 if (builtin_valid_in_constant_expr_p (fun))
10080 return true;
10081 if (!DECL_DECLARED_CONSTEXPR_P (fun)
10082 /* Allow any built-in function; if the expansion
10083 isn't constant, we'll deal with that then. */
10084 && !is_builtin_fn (fun))
10086 if (flags & tf_error)
10088 error_at (EXPR_LOC_OR_LOC (t, input_location),
10089 "call to non-constexpr function %qD", fun);
10090 explain_invalid_constexpr_fn (fun);
10092 return false;
10094 /* A call to a non-static member function takes the address
10095 of the object as the first argument. But in a constant
10096 expression the address will be folded away, so look
10097 through it now. */
10098 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
10099 && !DECL_CONSTRUCTOR_P (fun))
10101 tree x = get_nth_callarg (t, 0);
10102 if (is_this_parameter (x))
10104 if (DECL_CONTEXT (x) == NULL_TREE
10105 || DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
10107 if (flags & tf_error)
10108 sorry ("calling a member function of the "
10109 "object being constructed in a constant "
10110 "expression");
10111 return false;
10113 /* Otherwise OK. */;
10115 else if (!potential_constant_expression_1 (x, rval, flags))
10116 return false;
10117 i = 1;
10120 else
10122 if (!potential_constant_expression_1 (fun, true, flags))
10123 return false;
10124 fun = get_first_fn (fun);
10126 /* Skip initial arguments to base constructors. */
10127 if (DECL_BASE_CONSTRUCTOR_P (fun))
10128 i = num_artificial_parms_for (fun);
10129 fun = DECL_ORIGIN (fun);
10131 else
10133 if (potential_constant_expression_1 (fun, rval, flags))
10134 /* Might end up being a constant function pointer. */;
10135 else
10136 return false;
10138 for (; i < nargs; ++i)
10140 tree x = get_nth_callarg (t, i);
10141 if (!potential_constant_expression_1 (x, rval, flags))
10142 return false;
10144 return true;
10147 case NON_LVALUE_EXPR:
10148 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
10149 -- an lvalue of integral type that refers to a non-volatile
10150 const variable or static data member initialized with
10151 constant expressions, or
10153 -- an lvalue of literal type that refers to non-volatile
10154 object defined with constexpr, or that refers to a
10155 sub-object of such an object; */
10156 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
10158 case VAR_DECL:
10159 if (want_rval && !decl_constant_var_p (t)
10160 && !dependent_type_p (TREE_TYPE (t)))
10162 if (flags & tf_error)
10163 non_const_var_error (t);
10164 return false;
10166 return true;
10168 case NOP_EXPR:
10169 case CONVERT_EXPR:
10170 case VIEW_CONVERT_EXPR:
10171 /* -- a reinterpret_cast. FIXME not implemented, and this rule
10172 may change to something more specific to type-punning (DR 1312). */
10174 tree from = TREE_OPERAND (t, 0);
10175 if (POINTER_TYPE_P (TREE_TYPE (t))
10176 && TREE_CODE (from) == INTEGER_CST
10177 && !integer_zerop (from))
10179 if (flags & tf_error)
10180 error_at (EXPR_LOC_OR_LOC (t, input_location),
10181 "reinterpret_cast from integer to pointer");
10182 return false;
10184 return (potential_constant_expression_1
10185 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
10188 case ADDR_EXPR:
10189 /* -- a unary operator & that is applied to an lvalue that
10190 designates an object with thread or automatic storage
10191 duration; */
10192 t = TREE_OPERAND (t, 0);
10194 if (TREE_CODE (t) == OFFSET_REF && PTRMEM_OK_P (t))
10195 /* A pointer-to-member constant. */
10196 return true;
10198 #if 0
10199 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
10200 any checking here, as we might dereference the pointer later. If
10201 we remove this code, also remove check_automatic_or_tls. */
10202 i = check_automatic_or_tls (t);
10203 if (i == ck_ok)
10204 return true;
10205 if (i == ck_bad)
10207 if (flags & tf_error)
10208 error ("address-of an object %qE with thread local or "
10209 "automatic storage is not a constant expression", t);
10210 return false;
10212 #endif
10213 return potential_constant_expression_1 (t, any, flags);
10215 case COMPONENT_REF:
10216 case BIT_FIELD_REF:
10217 case ARROW_EXPR:
10218 case OFFSET_REF:
10219 /* -- a class member access unless its postfix-expression is
10220 of literal type or of pointer to literal type. */
10221 /* This test would be redundant, as it follows from the
10222 postfix-expression being a potential constant expression. */
10223 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
10224 want_rval, flags);
10226 case EXPR_PACK_EXPANSION:
10227 return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
10228 want_rval, flags);
10230 case INDIRECT_REF:
10232 tree x = TREE_OPERAND (t, 0);
10233 STRIP_NOPS (x);
10234 if (is_this_parameter (x))
10236 if (DECL_CONTEXT (x)
10237 && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (x)))
10239 if (flags & tf_error)
10240 error ("use of %<this%> in a constant expression");
10241 return false;
10243 if (want_rval && DECL_CONTEXT (x)
10244 && DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
10246 if (flags & tf_error)
10247 sorry ("use of the value of the object being constructed "
10248 "in a constant expression");
10249 return false;
10251 return true;
10253 return potential_constant_expression_1 (x, rval, flags);
10256 case LAMBDA_EXPR:
10257 case DYNAMIC_CAST_EXPR:
10258 case PSEUDO_DTOR_EXPR:
10259 case PREINCREMENT_EXPR:
10260 case POSTINCREMENT_EXPR:
10261 case PREDECREMENT_EXPR:
10262 case POSTDECREMENT_EXPR:
10263 case NEW_EXPR:
10264 case VEC_NEW_EXPR:
10265 case DELETE_EXPR:
10266 case VEC_DELETE_EXPR:
10267 case THROW_EXPR:
10268 case MODIFY_EXPR:
10269 case MODOP_EXPR:
10270 case OMP_ATOMIC:
10271 case OMP_ATOMIC_READ:
10272 case OMP_ATOMIC_CAPTURE_OLD:
10273 case OMP_ATOMIC_CAPTURE_NEW:
10274 /* GCC internal stuff. */
10275 case VA_ARG_EXPR:
10276 case OBJ_TYPE_REF:
10277 case WITH_CLEANUP_EXPR:
10278 case CLEANUP_POINT_EXPR:
10279 case MUST_NOT_THROW_EXPR:
10280 case TRY_CATCH_EXPR:
10281 case STATEMENT_LIST:
10282 /* Don't bother trying to define a subset of statement-expressions to
10283 be constant-expressions, at least for now. */
10284 case STMT_EXPR:
10285 case EXPR_STMT:
10286 case BIND_EXPR:
10287 case TRANSACTION_EXPR:
10288 case IF_STMT:
10289 case DO_STMT:
10290 case FOR_STMT:
10291 case WHILE_STMT:
10292 case DECL_EXPR:
10293 if (flags & tf_error)
10294 error ("expression %qE is not a constant-expression", t);
10295 return false;
10297 case TYPEID_EXPR:
10298 /* -- a typeid expression whose operand is of polymorphic
10299 class type; */
10301 tree e = TREE_OPERAND (t, 0);
10302 if (!TYPE_P (e) && !type_dependent_expression_p (e)
10303 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
10305 if (flags & tf_error)
10306 error ("typeid-expression is not a constant expression "
10307 "because %qE is of polymorphic type", e);
10308 return false;
10310 return true;
10313 case MINUS_EXPR:
10314 /* -- a subtraction where both operands are pointers. */
10315 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
10316 && TYPE_PTR_P (TREE_OPERAND (t, 1)))
10318 if (flags & tf_error)
10319 error ("difference of two pointer expressions is not "
10320 "a constant expression");
10321 return false;
10323 want_rval = true;
10324 goto binary;
10326 case LT_EXPR:
10327 case LE_EXPR:
10328 case GT_EXPR:
10329 case GE_EXPR:
10330 case EQ_EXPR:
10331 case NE_EXPR:
10332 /* -- a relational or equality operator where at least
10333 one of the operands is a pointer. */
10334 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
10335 || TYPE_PTR_P (TREE_OPERAND (t, 1)))
10337 if (flags & tf_error)
10338 error ("pointer comparison expression is not a "
10339 "constant expression");
10340 return false;
10342 want_rval = true;
10343 goto binary;
10345 case BIT_NOT_EXPR:
10346 /* A destructor. */
10347 if (TYPE_P (TREE_OPERAND (t, 0)))
10348 return true;
10349 /* else fall through. */
10351 case REALPART_EXPR:
10352 case IMAGPART_EXPR:
10353 case CONJ_EXPR:
10354 case SAVE_EXPR:
10355 case FIX_TRUNC_EXPR:
10356 case FLOAT_EXPR:
10357 case NEGATE_EXPR:
10358 case ABS_EXPR:
10359 case TRUTH_NOT_EXPR:
10360 case FIXED_CONVERT_EXPR:
10361 case UNARY_PLUS_EXPR:
10362 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
10363 flags);
10365 case CAST_EXPR:
10366 case CONST_CAST_EXPR:
10367 case STATIC_CAST_EXPR:
10368 case REINTERPRET_CAST_EXPR:
10369 case IMPLICIT_CONV_EXPR:
10370 if (cxx_dialect < cxx11
10371 && !dependent_type_p (TREE_TYPE (t))
10372 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t)))
10373 /* In C++98, a conversion to non-integral type can't be part of a
10374 constant expression. */
10376 if (flags & tf_error)
10377 error ("cast to non-integral type %qT in a constant expression",
10378 TREE_TYPE (t));
10379 return false;
10382 return (potential_constant_expression_1
10383 (TREE_OPERAND (t, 0),
10384 TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
10386 case PAREN_EXPR:
10387 case NON_DEPENDENT_EXPR:
10388 /* For convenience. */
10389 case RETURN_EXPR:
10390 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
10391 want_rval, flags);
10393 case SCOPE_REF:
10394 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
10395 want_rval, flags);
10397 case TARGET_EXPR:
10398 if (!literal_type_p (TREE_TYPE (t)))
10400 if (flags & tf_error)
10402 error ("temporary of non-literal type %qT in a "
10403 "constant expression", TREE_TYPE (t));
10404 explain_non_literal_class (TREE_TYPE (t));
10406 return false;
10408 case INIT_EXPR:
10409 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
10410 rval, flags);
10412 case CONSTRUCTOR:
10414 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
10415 constructor_elt *ce;
10416 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
10417 if (!potential_constant_expression_1 (ce->value, want_rval, flags))
10418 return false;
10419 return true;
10422 case TREE_LIST:
10424 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
10425 || DECL_P (TREE_PURPOSE (t)));
10426 if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
10427 flags))
10428 return false;
10429 if (TREE_CHAIN (t) == NULL_TREE)
10430 return true;
10431 return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
10432 flags);
10435 case TRUNC_DIV_EXPR:
10436 case CEIL_DIV_EXPR:
10437 case FLOOR_DIV_EXPR:
10438 case ROUND_DIV_EXPR:
10439 case TRUNC_MOD_EXPR:
10440 case CEIL_MOD_EXPR:
10441 case ROUND_MOD_EXPR:
10443 tree denom = TREE_OPERAND (t, 1);
10444 if (!potential_constant_expression_1 (denom, rval, flags))
10445 return false;
10446 /* We can't call cxx_eval_outermost_constant_expr on an expression
10447 that hasn't been through fold_non_dependent_expr yet. */
10448 if (!processing_template_decl)
10449 denom = cxx_eval_outermost_constant_expr (denom, true);
10450 if (integer_zerop (denom))
10452 if (flags & tf_error)
10453 error ("division by zero is not a constant-expression");
10454 return false;
10456 else
10458 want_rval = true;
10459 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
10460 want_rval, flags);
10464 case COMPOUND_EXPR:
10466 /* check_return_expr sometimes wraps a TARGET_EXPR in a
10467 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
10468 introduced by build_call_a. */
10469 tree op0 = TREE_OPERAND (t, 0);
10470 tree op1 = TREE_OPERAND (t, 1);
10471 STRIP_NOPS (op1);
10472 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
10473 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
10474 return potential_constant_expression_1 (op0, want_rval, flags);
10475 else
10476 goto binary;
10479 /* If the first operand is the non-short-circuit constant, look at
10480 the second operand; otherwise we only care about the first one for
10481 potentiality. */
10482 case TRUTH_AND_EXPR:
10483 case TRUTH_ANDIF_EXPR:
10484 tmp = boolean_true_node;
10485 goto truth;
10486 case TRUTH_OR_EXPR:
10487 case TRUTH_ORIF_EXPR:
10488 tmp = boolean_false_node;
10489 truth:
10491 tree op = TREE_OPERAND (t, 0);
10492 if (!potential_constant_expression_1 (op, rval, flags))
10493 return false;
10494 if (!processing_template_decl)
10495 op = cxx_eval_outermost_constant_expr (op, true);
10496 if (tree_int_cst_equal (op, tmp))
10497 return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
10498 else
10499 return true;
10502 case PLUS_EXPR:
10503 case MULT_EXPR:
10504 case POINTER_PLUS_EXPR:
10505 case RDIV_EXPR:
10506 case EXACT_DIV_EXPR:
10507 case MIN_EXPR:
10508 case MAX_EXPR:
10509 case LSHIFT_EXPR:
10510 case RSHIFT_EXPR:
10511 case LROTATE_EXPR:
10512 case RROTATE_EXPR:
10513 case BIT_IOR_EXPR:
10514 case BIT_XOR_EXPR:
10515 case BIT_AND_EXPR:
10516 case TRUTH_XOR_EXPR:
10517 case UNORDERED_EXPR:
10518 case ORDERED_EXPR:
10519 case UNLT_EXPR:
10520 case UNLE_EXPR:
10521 case UNGT_EXPR:
10522 case UNGE_EXPR:
10523 case UNEQ_EXPR:
10524 case LTGT_EXPR:
10525 case RANGE_EXPR:
10526 case COMPLEX_EXPR:
10527 want_rval = true;
10528 /* Fall through. */
10529 case ARRAY_REF:
10530 case ARRAY_RANGE_REF:
10531 case MEMBER_REF:
10532 case DOTSTAR_EXPR:
10533 binary:
10534 for (i = 0; i < 2; ++i)
10535 if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
10536 want_rval, flags))
10537 return false;
10538 return true;
10540 case CILK_SYNC_STMT:
10541 case CILK_SPAWN_STMT:
10542 case ARRAY_NOTATION_REF:
10543 return false;
10545 case FMA_EXPR:
10546 case VEC_PERM_EXPR:
10547 for (i = 0; i < 3; ++i)
10548 if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
10549 true, flags))
10550 return false;
10551 return true;
10553 case COND_EXPR:
10554 case VEC_COND_EXPR:
10555 /* If the condition is a known constant, we know which of the legs we
10556 care about; otherwise we only require that the condition and
10557 either of the legs be potentially constant. */
10558 tmp = TREE_OPERAND (t, 0);
10559 if (!potential_constant_expression_1 (tmp, rval, flags))
10560 return false;
10561 if (!processing_template_decl)
10562 tmp = cxx_eval_outermost_constant_expr (tmp, true);
10563 if (integer_zerop (tmp))
10564 return potential_constant_expression_1 (TREE_OPERAND (t, 2),
10565 want_rval, flags);
10566 else if (TREE_CODE (tmp) == INTEGER_CST)
10567 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
10568 want_rval, flags);
10569 for (i = 1; i < 3; ++i)
10570 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
10571 want_rval, tf_none))
10572 return true;
10573 if (flags & tf_error)
10574 error ("expression %qE is not a constant-expression", t);
10575 return false;
10577 case VEC_INIT_EXPR:
10578 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
10579 return true;
10580 if (flags & tf_error)
10582 error ("non-constant array initialization");
10583 diagnose_non_constexpr_vec_init (t);
10585 return false;
10587 default:
10588 if (objc_is_property_ref (t))
10589 return false;
10591 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
10592 gcc_unreachable();
10593 return false;
10597 /* The main entry point to the above. */
10599 bool
10600 potential_constant_expression (tree t)
10602 return potential_constant_expression_1 (t, false, tf_none);
10605 /* As above, but require a constant rvalue. */
10607 bool
10608 potential_rvalue_constant_expression (tree t)
10610 return potential_constant_expression_1 (t, true, tf_none);
10613 /* Like above, but complain about non-constant expressions. */
10615 bool
10616 require_potential_constant_expression (tree t)
10618 return potential_constant_expression_1 (t, false, tf_warning_or_error);
10621 /* Cross product of the above. */
10623 bool
10624 require_potential_rvalue_constant_expression (tree t)
10626 return potential_constant_expression_1 (t, true, tf_warning_or_error);
10629 /* Insert the deduced return type for an auto function. */
10631 void
10632 apply_deduced_return_type (tree fco, tree return_type)
10634 tree result;
10636 if (return_type == error_mark_node)
10637 return;
10639 if (LAMBDA_FUNCTION_P (fco))
10641 tree lambda = CLASSTYPE_LAMBDA_EXPR (current_class_type);
10642 LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
10645 if (DECL_CONV_FN_P (fco))
10646 DECL_NAME (fco) = mangle_conv_op_name_for_type (return_type);
10648 TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
10650 result = DECL_RESULT (fco);
10651 if (result == NULL_TREE)
10652 return;
10653 if (TREE_TYPE (result) == return_type)
10654 return;
10656 /* We already have a DECL_RESULT from start_preparsed_function.
10657 Now we need to redo the work it and allocate_struct_function
10658 did to reflect the new type. */
10659 gcc_assert (current_function_decl == fco);
10660 result = build_decl (input_location, RESULT_DECL, NULL_TREE,
10661 TYPE_MAIN_VARIANT (return_type));
10662 DECL_ARTIFICIAL (result) = 1;
10663 DECL_IGNORED_P (result) = 1;
10664 cp_apply_type_quals_to_decl (cp_type_quals (return_type),
10665 result);
10667 DECL_RESULT (fco) = result;
10669 if (!processing_template_decl)
10671 bool aggr = aggregate_value_p (result, fco);
10672 #ifdef PCC_STATIC_STRUCT_RETURN
10673 cfun->returns_pcc_struct = aggr;
10674 #endif
10675 cfun->returns_struct = aggr;
10680 /* DECL is a local variable or parameter from the surrounding scope of a
10681 lambda-expression. Returns the decltype for a use of the capture field
10682 for DECL even if it hasn't been captured yet. */
10684 static tree
10685 capture_decltype (tree decl)
10687 tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
10688 /* FIXME do lookup instead of list walk? */
10689 tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
10690 tree type;
10692 if (cap)
10693 type = TREE_TYPE (TREE_PURPOSE (cap));
10694 else
10695 switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
10697 case CPLD_NONE:
10698 error ("%qD is not captured", decl);
10699 return error_mark_node;
10701 case CPLD_COPY:
10702 type = TREE_TYPE (decl);
10703 if (TREE_CODE (type) == REFERENCE_TYPE
10704 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
10705 type = TREE_TYPE (type);
10706 break;
10708 case CPLD_REFERENCE:
10709 type = TREE_TYPE (decl);
10710 if (TREE_CODE (type) != REFERENCE_TYPE)
10711 type = build_reference_type (TREE_TYPE (decl));
10712 break;
10714 default:
10715 gcc_unreachable ();
10718 if (TREE_CODE (type) != REFERENCE_TYPE)
10720 if (!LAMBDA_EXPR_MUTABLE_P (lam))
10721 type = cp_build_qualified_type (type, (cp_type_quals (type)
10722 |TYPE_QUAL_CONST));
10723 type = build_reference_type (type);
10725 return type;
10728 #include "gt-cp-semantics.h"