re PR c++/53821 ([c++11] multiple definitions of lambda)
[gcc.git] / gcc / cp / semantics.c
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.
5
6 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
7 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
8 Written by Mark Mitchell (mmitchell@usa.net) based on code found
9 formerly in parse.y and pt.c.
10
11 This file is part of GCC.
12
13 GCC is free software; you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 3, or (at your option)
16 any later version.
17
18 GCC is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with GCC; see the file COPYING3. If not see
25 <http://www.gnu.org/licenses/>. */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "c-family/c-common.h"
34 #include "c-family/c-objc.h"
35 #include "tree-inline.h"
36 #include "intl.h"
37 #include "toplev.h"
38 #include "flags.h"
39 #include "timevar.h"
40 #include "diagnostic.h"
41 #include "cgraph.h"
42 #include "tree-iterator.h"
43 #include "vec.h"
44 #include "target.h"
45 #include "gimple.h"
46 #include "bitmap.h"
47
48 /* There routines provide a modular interface to perform many parsing
49 operations. They may therefore be used during actual parsing, or
50 during template instantiation, which may be regarded as a
51 degenerate form of parsing. */
52
53 static tree maybe_convert_cond (tree);
54 static tree finalize_nrv_r (tree *, int *, void *);
55 static tree capture_decltype (tree);
56
57
58 /* Deferred Access Checking Overview
59 ---------------------------------
60
61 Most C++ expressions and declarations require access checking
62 to be performed during parsing. However, in several cases,
63 this has to be treated differently.
64
65 For member declarations, access checking has to be deferred
66 until more information about the declaration is known. For
67 example:
68
69 class A {
70 typedef int X;
71 public:
72 X f();
73 };
74
75 A::X A::f();
76 A::X g();
77
78 When we are parsing the function return type `A::X', we don't
79 really know if this is allowed until we parse the function name.
80
81 Furthermore, some contexts require that access checking is
82 never performed at all. These include class heads, and template
83 instantiations.
84
85 Typical use of access checking functions is described here:
86
87 1. When we enter a context that requires certain access checking
88 mode, the function `push_deferring_access_checks' is called with
89 DEFERRING argument specifying the desired mode. Access checking
90 may be performed immediately (dk_no_deferred), deferred
91 (dk_deferred), or not performed (dk_no_check).
92
93 2. When a declaration such as a type, or a variable, is encountered,
94 the function `perform_or_defer_access_check' is called. It
95 maintains a VEC of all deferred checks.
96
97 3. The global `current_class_type' or `current_function_decl' is then
98 setup by the parser. `enforce_access' relies on these information
99 to check access.
100
101 4. Upon exiting the context mentioned in step 1,
102 `perform_deferred_access_checks' is called to check all declaration
103 stored in the VEC. `pop_deferring_access_checks' is then
104 called to restore the previous access checking mode.
105
106 In case of parsing error, we simply call `pop_deferring_access_checks'
107 without `perform_deferred_access_checks'. */
108
109 typedef struct GTY(()) deferred_access {
110 /* A VEC representing name-lookups for which we have deferred
111 checking access controls. We cannot check the accessibility of
112 names used in a decl-specifier-seq until we know what is being
113 declared because code like:
114
115 class A {
116 class B {};
117 B* f();
118 }
119
120 A::B* A::f() { return 0; }
121
122 is valid, even though `A::B' is not generally accessible. */
123 VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
124
125 /* The current mode of access checks. */
126 enum deferring_kind deferring_access_checks_kind;
127
128 } deferred_access;
129 DEF_VEC_O (deferred_access);
130 DEF_VEC_ALLOC_O (deferred_access,gc);
131
132 /* Data for deferred access checking. */
133 static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
134 static GTY(()) unsigned deferred_access_no_check;
135
136 /* Save the current deferred access states and start deferred
137 access checking iff DEFER_P is true. */
138
139 void
140 push_deferring_access_checks (deferring_kind deferring)
141 {
142 /* For context like template instantiation, access checking
143 disabling applies to all nested context. */
144 if (deferred_access_no_check || deferring == dk_no_check)
145 deferred_access_no_check++;
146 else
147 {
148 deferred_access *ptr;
149
150 ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
151 ptr->deferred_access_checks = NULL;
152 ptr->deferring_access_checks_kind = deferring;
153 }
154 }
155
156 /* Resume deferring access checks again after we stopped doing
157 this previously. */
158
159 void
160 resume_deferring_access_checks (void)
161 {
162 if (!deferred_access_no_check)
163 VEC_last (deferred_access, deferred_access_stack)
164 ->deferring_access_checks_kind = dk_deferred;
165 }
166
167 /* Stop deferring access checks. */
168
169 void
170 stop_deferring_access_checks (void)
171 {
172 if (!deferred_access_no_check)
173 VEC_last (deferred_access, deferred_access_stack)
174 ->deferring_access_checks_kind = dk_no_deferred;
175 }
176
177 /* Discard the current deferred access checks and restore the
178 previous states. */
179
180 void
181 pop_deferring_access_checks (void)
182 {
183 if (deferred_access_no_check)
184 deferred_access_no_check--;
185 else
186 VEC_pop (deferred_access, deferred_access_stack);
187 }
188
189 /* Returns a TREE_LIST representing the deferred checks.
190 The TREE_PURPOSE of each node is the type through which the
191 access occurred; the TREE_VALUE is the declaration named.
192 */
193
194 VEC (deferred_access_check,gc)*
195 get_deferred_access_checks (void)
196 {
197 if (deferred_access_no_check)
198 return NULL;
199 else
200 return (VEC_last (deferred_access, deferred_access_stack)
201 ->deferred_access_checks);
202 }
203
204 /* Take current deferred checks and combine with the
205 previous states if we also defer checks previously.
206 Otherwise perform checks now. */
207
208 void
209 pop_to_parent_deferring_access_checks (void)
210 {
211 if (deferred_access_no_check)
212 deferred_access_no_check--;
213 else
214 {
215 VEC (deferred_access_check,gc) *checks;
216 deferred_access *ptr;
217
218 checks = (VEC_last (deferred_access, deferred_access_stack)
219 ->deferred_access_checks);
220
221 VEC_pop (deferred_access, deferred_access_stack);
222 ptr = VEC_last (deferred_access, deferred_access_stack);
223 if (ptr->deferring_access_checks_kind == dk_no_deferred)
224 {
225 /* Check access. */
226 perform_access_checks (checks);
227 }
228 else
229 {
230 /* Merge with parent. */
231 int i, j;
232 deferred_access_check *chk, *probe;
233
234 FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
235 {
236 FOR_EACH_VEC_ELT (deferred_access_check,
237 ptr->deferred_access_checks, j, probe)
238 {
239 if (probe->binfo == chk->binfo &&
240 probe->decl == chk->decl &&
241 probe->diag_decl == chk->diag_decl)
242 goto found;
243 }
244 /* Insert into parent's checks. */
245 VEC_safe_push (deferred_access_check, gc,
246 ptr->deferred_access_checks, chk);
247 found:;
248 }
249 }
250 }
251 }
252
253 /* Perform the access checks in CHECKS. The TREE_PURPOSE of each node
254 is the BINFO indicating the qualifying scope used to access the
255 DECL node stored in the TREE_VALUE of the node. */
256
257 void
258 perform_access_checks (VEC (deferred_access_check,gc)* checks)
259 {
260 int i;
261 deferred_access_check *chk;
262
263 if (!checks)
264 return;
265
266 FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
267 enforce_access (chk->binfo, chk->decl, chk->diag_decl);
268 }
269
270 /* Perform the deferred access checks.
271
272 After performing the checks, we still have to keep the list
273 `deferred_access_stack->deferred_access_checks' since we may want
274 to check access for them again later in a different context.
275 For example:
276
277 class A {
278 typedef int X;
279 static X a;
280 };
281 A::X A::a, x; // No error for `A::a', error for `x'
282
283 We have to perform deferred access of `A::X', first with `A::a',
284 next with `x'. */
285
286 void
287 perform_deferred_access_checks (void)
288 {
289 perform_access_checks (get_deferred_access_checks ());
290 }
291
292 /* Defer checking the accessibility of DECL, when looked up in
293 BINFO. DIAG_DECL is the declaration to use to print diagnostics. */
294
295 void
296 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
297 {
298 int i;
299 deferred_access *ptr;
300 deferred_access_check *chk;
301 deferred_access_check *new_access;
302
303
304 /* Exit if we are in a context that no access checking is performed.
305 */
306 if (deferred_access_no_check)
307 return;
308
309 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
310
311 ptr = VEC_last (deferred_access, deferred_access_stack);
312
313 /* If we are not supposed to defer access checks, just check now. */
314 if (ptr->deferring_access_checks_kind == dk_no_deferred)
315 {
316 enforce_access (binfo, decl, diag_decl);
317 return;
318 }
319
320 /* See if we are already going to perform this check. */
321 FOR_EACH_VEC_ELT (deferred_access_check,
322 ptr->deferred_access_checks, i, chk)
323 {
324 if (chk->decl == decl && chk->binfo == binfo &&
325 chk->diag_decl == diag_decl)
326 {
327 return;
328 }
329 }
330 /* If not, record the check. */
331 new_access =
332 VEC_safe_push (deferred_access_check, gc,
333 ptr->deferred_access_checks, 0);
334 new_access->binfo = binfo;
335 new_access->decl = decl;
336 new_access->diag_decl = diag_decl;
337 }
338
339 /* Used by build_over_call in LOOKUP_SPECULATIVE mode: return whether DECL
340 is accessible in BINFO, and possibly complain if not. If we're not
341 checking access, everything is accessible. */
342
343 bool
344 speculative_access_check (tree binfo, tree decl, tree diag_decl,
345 bool complain)
346 {
347 if (deferred_access_no_check)
348 return true;
349
350 /* If we're checking for implicit delete, we don't want access
351 control errors. */
352 if (!accessible_p (binfo, decl, true))
353 {
354 /* Unless we're under maybe_explain_implicit_delete. */
355 if (complain)
356 enforce_access (binfo, decl, diag_decl);
357 return false;
358 }
359
360 return true;
361 }
362
363 /* Returns nonzero if the current statement is a full expression,
364 i.e. temporaries created during that statement should be destroyed
365 at the end of the statement. */
366
367 int
368 stmts_are_full_exprs_p (void)
369 {
370 return current_stmt_tree ()->stmts_are_full_exprs_p;
371 }
372
373 /* T is a statement. Add it to the statement-tree. This is the C++
374 version. The C/ObjC frontends have a slightly different version of
375 this function. */
376
377 tree
378 add_stmt (tree t)
379 {
380 enum tree_code code = TREE_CODE (t);
381
382 if (EXPR_P (t) && code != LABEL_EXPR)
383 {
384 if (!EXPR_HAS_LOCATION (t))
385 SET_EXPR_LOCATION (t, input_location);
386
387 /* When we expand a statement-tree, we must know whether or not the
388 statements are full-expressions. We record that fact here. */
389 STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
390 }
391
392 /* Add T to the statement-tree. Non-side-effect statements need to be
393 recorded during statement expressions. */
394 gcc_checking_assert (!VEC_empty (tree, stmt_list_stack));
395 append_to_statement_list_force (t, &cur_stmt_list);
396
397 return t;
398 }
399
400 /* Returns the stmt_tree to which statements are currently being added. */
401
402 stmt_tree
403 current_stmt_tree (void)
404 {
405 return (cfun
406 ? &cfun->language->base.x_stmt_tree
407 : &scope_chain->x_stmt_tree);
408 }
409
410 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
411
412 static tree
413 maybe_cleanup_point_expr (tree expr)
414 {
415 if (!processing_template_decl && stmts_are_full_exprs_p ())
416 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
417 return expr;
418 }
419
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. */
424
425 tree
426 maybe_cleanup_point_expr_void (tree expr)
427 {
428 if (!processing_template_decl && stmts_are_full_exprs_p ())
429 expr = fold_build_cleanup_point_expr (void_type_node, expr);
430 return expr;
431 }
432
433
434
435 /* Create a declaration statement for the declaration given by the DECL. */
436
437 void
438 add_decl_expr (tree decl)
439 {
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);
445 }
446
447 /* Finish a scope. */
448
449 tree
450 do_poplevel (tree stmt_list)
451 {
452 tree block = NULL;
453
454 if (stmts_are_full_exprs_p ())
455 block = poplevel (kept_level_p (), 1, 0);
456
457 stmt_list = pop_stmt_list (stmt_list);
458
459 if (!processing_template_decl)
460 {
461 stmt_list = c_build_bind_expr (input_location, block, stmt_list);
462 /* ??? See c_end_compound_stmt re statement expressions. */
463 }
464
465 return stmt_list;
466 }
467
468 /* Begin a new scope. */
469
470 static tree
471 do_pushlevel (scope_kind sk)
472 {
473 tree ret = push_stmt_list ();
474 if (stmts_are_full_exprs_p ())
475 begin_scope (sk, NULL);
476 return ret;
477 }
478
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. */
482
483 void
484 push_cleanup (tree decl, tree cleanup, bool eh_only)
485 {
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 ();
490 }
491
492 /* Begin a conditional that might contain a declaration. When generating
493 normal code, we want the declaration to appear before the statement
494 containing the conditional. When generating template code, we want the
495 conditional to be rendered as the raw DECL_EXPR. */
496
497 static void
498 begin_cond (tree *cond_p)
499 {
500 if (processing_template_decl)
501 *cond_p = push_stmt_list ();
502 }
503
504 /* Finish such a conditional. */
505
506 static void
507 finish_cond (tree *cond_p, tree expr)
508 {
509 if (processing_template_decl)
510 {
511 tree cond = pop_stmt_list (*cond_p);
512
513 if (expr == NULL_TREE)
514 /* Empty condition in 'for'. */
515 gcc_assert (empty_expr_stmt_p (cond));
516 else if (check_for_bare_parameter_packs (expr))
517 expr = error_mark_node;
518 else if (!empty_expr_stmt_p (cond))
519 expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), cond, expr);
520 }
521 *cond_p = expr;
522 }
523
524 /* If *COND_P specifies a conditional with a declaration, transform the
525 loop such that
526 while (A x = 42) { }
527 for (; A x = 42;) { }
528 becomes
529 while (true) { A x = 42; if (!x) break; }
530 for (;;) { A x = 42; if (!x) break; }
531 The statement list for BODY will be empty if the conditional did
532 not declare anything. */
533
534 static void
535 simplify_loop_decl_cond (tree *cond_p, tree body)
536 {
537 tree cond, if_stmt;
538
539 if (!TREE_SIDE_EFFECTS (body))
540 return;
541
542 cond = *cond_p;
543 *cond_p = boolean_true_node;
544
545 if_stmt = begin_if_stmt ();
546 cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
547 finish_if_stmt_cond (cond, if_stmt);
548 finish_break_stmt ();
549 finish_then_clause (if_stmt);
550 finish_if_stmt (if_stmt);
551 }
552
553 /* Finish a goto-statement. */
554
555 tree
556 finish_goto_stmt (tree destination)
557 {
558 if (TREE_CODE (destination) == IDENTIFIER_NODE)
559 destination = lookup_label (destination);
560
561 /* We warn about unused labels with -Wunused. That means we have to
562 mark the used labels as used. */
563 if (TREE_CODE (destination) == LABEL_DECL)
564 TREE_USED (destination) = 1;
565 else
566 {
567 destination = mark_rvalue_use (destination);
568 if (!processing_template_decl)
569 {
570 destination = cp_convert (ptr_type_node, destination,
571 tf_warning_or_error);
572 if (error_operand_p (destination))
573 return NULL_TREE;
574 }
575 }
576
577 check_goto (destination);
578
579 return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
580 }
581
582 /* COND is the condition-expression for an if, while, etc.,
583 statement. Convert it to a boolean value, if appropriate.
584 In addition, verify sequence points if -Wsequence-point is enabled. */
585
586 static tree
587 maybe_convert_cond (tree cond)
588 {
589 /* Empty conditions remain empty. */
590 if (!cond)
591 return NULL_TREE;
592
593 /* Wait until we instantiate templates before doing conversion. */
594 if (processing_template_decl)
595 return cond;
596
597 if (warn_sequence_point)
598 verify_sequence_points (cond);
599
600 /* Do the conversion. */
601 cond = convert_from_reference (cond);
602
603 if (TREE_CODE (cond) == MODIFY_EXPR
604 && !TREE_NO_WARNING (cond)
605 && warn_parentheses)
606 {
607 warning (OPT_Wparentheses,
608 "suggest parentheses around assignment used as truth value");
609 TREE_NO_WARNING (cond) = 1;
610 }
611
612 return condition_conversion (cond);
613 }
614
615 /* Finish an expression-statement, whose EXPRESSION is as indicated. */
616
617 tree
618 finish_expr_stmt (tree expr)
619 {
620 tree r = NULL_TREE;
621
622 if (expr != NULL_TREE)
623 {
624 if (!processing_template_decl)
625 {
626 if (warn_sequence_point)
627 verify_sequence_points (expr);
628 expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
629 }
630 else if (!type_dependent_expression_p (expr))
631 convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT,
632 tf_warning_or_error);
633
634 if (check_for_bare_parameter_packs (expr))
635 expr = error_mark_node;
636
637 /* Simplification of inner statement expressions, compound exprs,
638 etc can result in us already having an EXPR_STMT. */
639 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
640 {
641 if (TREE_CODE (expr) != EXPR_STMT)
642 expr = build_stmt (input_location, EXPR_STMT, expr);
643 expr = maybe_cleanup_point_expr_void (expr);
644 }
645
646 r = add_stmt (expr);
647 }
648
649 finish_stmt ();
650
651 return r;
652 }
653
654
655 /* Begin an if-statement. Returns a newly created IF_STMT if
656 appropriate. */
657
658 tree
659 begin_if_stmt (void)
660 {
661 tree r, scope;
662 scope = do_pushlevel (sk_cond);
663 r = build_stmt (input_location, IF_STMT, NULL_TREE,
664 NULL_TREE, NULL_TREE, scope);
665 begin_cond (&IF_COND (r));
666 return r;
667 }
668
669 /* Process the COND of an if-statement, which may be given by
670 IF_STMT. */
671
672 void
673 finish_if_stmt_cond (tree cond, tree if_stmt)
674 {
675 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
676 add_stmt (if_stmt);
677 THEN_CLAUSE (if_stmt) = push_stmt_list ();
678 }
679
680 /* Finish the then-clause of an if-statement, which may be given by
681 IF_STMT. */
682
683 tree
684 finish_then_clause (tree if_stmt)
685 {
686 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
687 return if_stmt;
688 }
689
690 /* Begin the else-clause of an if-statement. */
691
692 void
693 begin_else_clause (tree if_stmt)
694 {
695 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
696 }
697
698 /* Finish the else-clause of an if-statement, which may be given by
699 IF_STMT. */
700
701 void
702 finish_else_clause (tree if_stmt)
703 {
704 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
705 }
706
707 /* Finish an if-statement. */
708
709 void
710 finish_if_stmt (tree if_stmt)
711 {
712 tree scope = IF_SCOPE (if_stmt);
713 IF_SCOPE (if_stmt) = NULL;
714 add_stmt (do_poplevel (scope));
715 finish_stmt ();
716 }
717
718 /* Begin a while-statement. Returns a newly created WHILE_STMT if
719 appropriate. */
720
721 tree
722 begin_while_stmt (void)
723 {
724 tree r;
725 r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
726 add_stmt (r);
727 WHILE_BODY (r) = do_pushlevel (sk_block);
728 begin_cond (&WHILE_COND (r));
729 return r;
730 }
731
732 /* Process the COND of a while-statement, which may be given by
733 WHILE_STMT. */
734
735 void
736 finish_while_stmt_cond (tree cond, tree while_stmt)
737 {
738 finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
739 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
740 }
741
742 /* Finish a while-statement, which may be given by WHILE_STMT. */
743
744 void
745 finish_while_stmt (tree while_stmt)
746 {
747 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
748 finish_stmt ();
749 }
750
751 /* Begin a do-statement. Returns a newly created DO_STMT if
752 appropriate. */
753
754 tree
755 begin_do_stmt (void)
756 {
757 tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
758 add_stmt (r);
759 DO_BODY (r) = push_stmt_list ();
760 return r;
761 }
762
763 /* Finish the body of a do-statement, which may be given by DO_STMT. */
764
765 void
766 finish_do_body (tree do_stmt)
767 {
768 tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
769
770 if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
771 body = STATEMENT_LIST_TAIL (body)->stmt;
772
773 if (IS_EMPTY_STMT (body))
774 warning (OPT_Wempty_body,
775 "suggest explicit braces around empty body in %<do%> statement");
776 }
777
778 /* Finish a do-statement, which may be given by DO_STMT, and whose
779 COND is as indicated. */
780
781 void
782 finish_do_stmt (tree cond, tree do_stmt)
783 {
784 cond = maybe_convert_cond (cond);
785 DO_COND (do_stmt) = cond;
786 finish_stmt ();
787 }
788
789 /* Finish a return-statement. The EXPRESSION returned, if any, is as
790 indicated. */
791
792 tree
793 finish_return_stmt (tree expr)
794 {
795 tree r;
796 bool no_warning;
797
798 expr = check_return_expr (expr, &no_warning);
799
800 if (flag_openmp && !check_omp_return ())
801 return error_mark_node;
802 if (!processing_template_decl)
803 {
804 if (warn_sequence_point)
805 verify_sequence_points (expr);
806
807 if (DECL_DESTRUCTOR_P (current_function_decl)
808 || (DECL_CONSTRUCTOR_P (current_function_decl)
809 && targetm.cxx.cdtor_returns_this ()))
810 {
811 /* Similarly, all destructors must run destructors for
812 base-classes before returning. So, all returns in a
813 destructor get sent to the DTOR_LABEL; finish_function emits
814 code to return a value there. */
815 return finish_goto_stmt (cdtor_label);
816 }
817 }
818
819 r = build_stmt (input_location, RETURN_EXPR, expr);
820 TREE_NO_WARNING (r) |= no_warning;
821 r = maybe_cleanup_point_expr_void (r);
822 r = add_stmt (r);
823 finish_stmt ();
824
825 return r;
826 }
827
828 /* Begin the scope of a for-statement or a range-for-statement.
829 Both the returned trees are to be used in a call to
830 begin_for_stmt or begin_range_for_stmt. */
831
832 tree
833 begin_for_scope (tree *init)
834 {
835 tree scope = NULL_TREE;
836 if (flag_new_for_scope > 0)
837 scope = do_pushlevel (sk_for);
838
839 if (processing_template_decl)
840 *init = push_stmt_list ();
841 else
842 *init = NULL_TREE;
843
844 return scope;
845 }
846
847 /* Begin a for-statement. Returns a new FOR_STMT.
848 SCOPE and INIT should be the return of begin_for_scope,
849 or both NULL_TREE */
850
851 tree
852 begin_for_stmt (tree scope, tree init)
853 {
854 tree r;
855
856 r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
857 NULL_TREE, NULL_TREE, NULL_TREE);
858
859 if (scope == NULL_TREE)
860 {
861 gcc_assert (!init || !(flag_new_for_scope > 0));
862 if (!init)
863 scope = begin_for_scope (&init);
864 }
865 FOR_INIT_STMT (r) = init;
866 FOR_SCOPE (r) = scope;
867
868 return r;
869 }
870
871 /* Finish the for-init-statement of a for-statement, which may be
872 given by FOR_STMT. */
873
874 void
875 finish_for_init_stmt (tree for_stmt)
876 {
877 if (processing_template_decl)
878 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
879 add_stmt (for_stmt);
880 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
881 begin_cond (&FOR_COND (for_stmt));
882 }
883
884 /* Finish the COND of a for-statement, which may be given by
885 FOR_STMT. */
886
887 void
888 finish_for_cond (tree cond, tree for_stmt)
889 {
890 finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
891 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
892 }
893
894 /* Finish the increment-EXPRESSION in a for-statement, which may be
895 given by FOR_STMT. */
896
897 void
898 finish_for_expr (tree expr, tree for_stmt)
899 {
900 if (!expr)
901 return;
902 /* If EXPR is an overloaded function, issue an error; there is no
903 context available to use to perform overload resolution. */
904 if (type_unknown_p (expr))
905 {
906 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
907 expr = error_mark_node;
908 }
909 if (!processing_template_decl)
910 {
911 if (warn_sequence_point)
912 verify_sequence_points (expr);
913 expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
914 tf_warning_or_error);
915 }
916 else if (!type_dependent_expression_p (expr))
917 convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
918 tf_warning_or_error);
919 expr = maybe_cleanup_point_expr_void (expr);
920 if (check_for_bare_parameter_packs (expr))
921 expr = error_mark_node;
922 FOR_EXPR (for_stmt) = expr;
923 }
924
925 /* Finish the body of a for-statement, which may be given by
926 FOR_STMT. The increment-EXPR for the loop must be
927 provided.
928 It can also finish RANGE_FOR_STMT. */
929
930 void
931 finish_for_stmt (tree for_stmt)
932 {
933 if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
934 RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
935 else
936 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
937
938 /* Pop the scope for the body of the loop. */
939 if (flag_new_for_scope > 0)
940 {
941 tree scope;
942 tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT
943 ? &RANGE_FOR_SCOPE (for_stmt)
944 : &FOR_SCOPE (for_stmt));
945 scope = *scope_ptr;
946 *scope_ptr = NULL;
947 add_stmt (do_poplevel (scope));
948 }
949
950 finish_stmt ();
951 }
952
953 /* Begin a range-for-statement. Returns a new RANGE_FOR_STMT.
954 SCOPE and INIT should be the return of begin_for_scope,
955 or both NULL_TREE .
956 To finish it call finish_for_stmt(). */
957
958 tree
959 begin_range_for_stmt (tree scope, tree init)
960 {
961 tree r;
962
963 r = build_stmt (input_location, RANGE_FOR_STMT,
964 NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
965
966 if (scope == NULL_TREE)
967 {
968 gcc_assert (!init || !(flag_new_for_scope > 0));
969 if (!init)
970 scope = begin_for_scope (&init);
971 }
972
973 /* RANGE_FOR_STMTs do not use nor save the init tree, so we
974 pop it now. */
975 if (init)
976 pop_stmt_list (init);
977 RANGE_FOR_SCOPE (r) = scope;
978
979 return r;
980 }
981
982 /* Finish the head of a range-based for statement, which may
983 be given by RANGE_FOR_STMT. DECL must be the declaration
984 and EXPR must be the loop expression. */
985
986 void
987 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
988 {
989 RANGE_FOR_DECL (range_for_stmt) = decl;
990 RANGE_FOR_EXPR (range_for_stmt) = expr;
991 add_stmt (range_for_stmt);
992 RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
993 }
994
995 /* Finish a break-statement. */
996
997 tree
998 finish_break_stmt (void)
999 {
1000 /* In switch statements break is sometimes stylistically used after
1001 a return statement. This can lead to spurious warnings about
1002 control reaching the end of a non-void function when it is
1003 inlined. Note that we are calling block_may_fallthru with
1004 language specific tree nodes; this works because
1005 block_may_fallthru returns true when given something it does not
1006 understand. */
1007 if (!block_may_fallthru (cur_stmt_list))
1008 return void_zero_node;
1009 return add_stmt (build_stmt (input_location, BREAK_STMT));
1010 }
1011
1012 /* Finish a continue-statement. */
1013
1014 tree
1015 finish_continue_stmt (void)
1016 {
1017 return add_stmt (build_stmt (input_location, CONTINUE_STMT));
1018 }
1019
1020 /* Begin a switch-statement. Returns a new SWITCH_STMT if
1021 appropriate. */
1022
1023 tree
1024 begin_switch_stmt (void)
1025 {
1026 tree r, scope;
1027
1028 scope = do_pushlevel (sk_cond);
1029 r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE, scope);
1030
1031 begin_cond (&SWITCH_STMT_COND (r));
1032
1033 return r;
1034 }
1035
1036 /* Finish the cond of a switch-statement. */
1037
1038 void
1039 finish_switch_cond (tree cond, tree switch_stmt)
1040 {
1041 tree orig_type = NULL;
1042 if (!processing_template_decl)
1043 {
1044 /* Convert the condition to an integer or enumeration type. */
1045 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
1046 if (cond == NULL_TREE)
1047 {
1048 error ("switch quantity not an integer");
1049 cond = error_mark_node;
1050 }
1051 orig_type = TREE_TYPE (cond);
1052 if (cond != error_mark_node)
1053 {
1054 /* [stmt.switch]
1055
1056 Integral promotions are performed. */
1057 cond = perform_integral_promotions (cond);
1058 cond = maybe_cleanup_point_expr (cond);
1059 }
1060 }
1061 if (check_for_bare_parameter_packs (cond))
1062 cond = error_mark_node;
1063 else if (!processing_template_decl && warn_sequence_point)
1064 verify_sequence_points (cond);
1065
1066 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
1067 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
1068 add_stmt (switch_stmt);
1069 push_switch (switch_stmt);
1070 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1071 }
1072
1073 /* Finish the body of a switch-statement, which may be given by
1074 SWITCH_STMT. The COND to switch on is indicated. */
1075
1076 void
1077 finish_switch_stmt (tree switch_stmt)
1078 {
1079 tree scope;
1080
1081 SWITCH_STMT_BODY (switch_stmt) =
1082 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1083 pop_switch ();
1084 finish_stmt ();
1085
1086 scope = SWITCH_STMT_SCOPE (switch_stmt);
1087 SWITCH_STMT_SCOPE (switch_stmt) = NULL;
1088 add_stmt (do_poplevel (scope));
1089 }
1090
1091 /* Begin a try-block. Returns a newly-created TRY_BLOCK if
1092 appropriate. */
1093
1094 tree
1095 begin_try_block (void)
1096 {
1097 tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1098 add_stmt (r);
1099 TRY_STMTS (r) = push_stmt_list ();
1100 return r;
1101 }
1102
1103 /* Likewise, for a function-try-block. The block returned in
1104 *COMPOUND_STMT is an artificial outer scope, containing the
1105 function-try-block. */
1106
1107 tree
1108 begin_function_try_block (tree *compound_stmt)
1109 {
1110 tree r;
1111 /* This outer scope does not exist in the C++ standard, but we need
1112 a place to put __FUNCTION__ and similar variables. */
1113 *compound_stmt = begin_compound_stmt (0);
1114 r = begin_try_block ();
1115 FN_TRY_BLOCK_P (r) = 1;
1116 return r;
1117 }
1118
1119 /* Finish a try-block, which may be given by TRY_BLOCK. */
1120
1121 void
1122 finish_try_block (tree try_block)
1123 {
1124 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1125 TRY_HANDLERS (try_block) = push_stmt_list ();
1126 }
1127
1128 /* Finish the body of a cleanup try-block, which may be given by
1129 TRY_BLOCK. */
1130
1131 void
1132 finish_cleanup_try_block (tree try_block)
1133 {
1134 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1135 }
1136
1137 /* Finish an implicitly generated try-block, with a cleanup is given
1138 by CLEANUP. */
1139
1140 void
1141 finish_cleanup (tree cleanup, tree try_block)
1142 {
1143 TRY_HANDLERS (try_block) = cleanup;
1144 CLEANUP_P (try_block) = 1;
1145 }
1146
1147 /* Likewise, for a function-try-block. */
1148
1149 void
1150 finish_function_try_block (tree try_block)
1151 {
1152 finish_try_block (try_block);
1153 /* FIXME : something queer about CTOR_INITIALIZER somehow following
1154 the try block, but moving it inside. */
1155 in_function_try_handler = 1;
1156 }
1157
1158 /* Finish a handler-sequence for a try-block, which may be given by
1159 TRY_BLOCK. */
1160
1161 void
1162 finish_handler_sequence (tree try_block)
1163 {
1164 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1165 check_handlers (TRY_HANDLERS (try_block));
1166 }
1167
1168 /* Finish the handler-seq for a function-try-block, given by
1169 TRY_BLOCK. COMPOUND_STMT is the outer block created by
1170 begin_function_try_block. */
1171
1172 void
1173 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1174 {
1175 in_function_try_handler = 0;
1176 finish_handler_sequence (try_block);
1177 finish_compound_stmt (compound_stmt);
1178 }
1179
1180 /* Begin a handler. Returns a HANDLER if appropriate. */
1181
1182 tree
1183 begin_handler (void)
1184 {
1185 tree r;
1186
1187 r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1188 add_stmt (r);
1189
1190 /* Create a binding level for the eh_info and the exception object
1191 cleanup. */
1192 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1193
1194 return r;
1195 }
1196
1197 /* Finish the handler-parameters for a handler, which may be given by
1198 HANDLER. DECL is the declaration for the catch parameter, or NULL
1199 if this is a `catch (...)' clause. */
1200
1201 void
1202 finish_handler_parms (tree decl, tree handler)
1203 {
1204 tree type = NULL_TREE;
1205 if (processing_template_decl)
1206 {
1207 if (decl)
1208 {
1209 decl = pushdecl (decl);
1210 decl = push_template_decl (decl);
1211 HANDLER_PARMS (handler) = decl;
1212 type = TREE_TYPE (decl);
1213 }
1214 }
1215 else
1216 type = expand_start_catch_block (decl);
1217 HANDLER_TYPE (handler) = type;
1218 if (!processing_template_decl && type)
1219 mark_used (eh_type_info (type));
1220 }
1221
1222 /* Finish a handler, which may be given by HANDLER. The BLOCKs are
1223 the return value from the matching call to finish_handler_parms. */
1224
1225 void
1226 finish_handler (tree handler)
1227 {
1228 if (!processing_template_decl)
1229 expand_end_catch_block ();
1230 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1231 }
1232
1233 /* Begin a compound statement. FLAGS contains some bits that control the
1234 behavior and context. If BCS_NO_SCOPE is set, the compound statement
1235 does not define a scope. If BCS_FN_BODY is set, this is the outermost
1236 block of a function. If BCS_TRY_BLOCK is set, this is the block
1237 created on behalf of a TRY statement. Returns a token to be passed to
1238 finish_compound_stmt. */
1239
1240 tree
1241 begin_compound_stmt (unsigned int flags)
1242 {
1243 tree r;
1244
1245 if (flags & BCS_NO_SCOPE)
1246 {
1247 r = push_stmt_list ();
1248 STATEMENT_LIST_NO_SCOPE (r) = 1;
1249
1250 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1251 But, if it's a statement-expression with a scopeless block, there's
1252 nothing to keep, and we don't want to accidentally keep a block
1253 *inside* the scopeless block. */
1254 keep_next_level (false);
1255 }
1256 else
1257 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1258
1259 /* When processing a template, we need to remember where the braces were,
1260 so that we can set up identical scopes when instantiating the template
1261 later. BIND_EXPR is a handy candidate for this.
1262 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1263 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1264 processing templates. */
1265 if (processing_template_decl)
1266 {
1267 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1268 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1269 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1270 TREE_SIDE_EFFECTS (r) = 1;
1271 }
1272
1273 return r;
1274 }
1275
1276 /* Finish a compound-statement, which is given by STMT. */
1277
1278 void
1279 finish_compound_stmt (tree stmt)
1280 {
1281 if (TREE_CODE (stmt) == BIND_EXPR)
1282 {
1283 tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1284 /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1285 discard the BIND_EXPR so it can be merged with the containing
1286 STATEMENT_LIST. */
1287 if (TREE_CODE (body) == STATEMENT_LIST
1288 && STATEMENT_LIST_HEAD (body) == NULL
1289 && !BIND_EXPR_BODY_BLOCK (stmt)
1290 && !BIND_EXPR_TRY_BLOCK (stmt))
1291 stmt = body;
1292 else
1293 BIND_EXPR_BODY (stmt) = body;
1294 }
1295 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1296 stmt = pop_stmt_list (stmt);
1297 else
1298 {
1299 /* Destroy any ObjC "super" receivers that may have been
1300 created. */
1301 objc_clear_super_receiver ();
1302
1303 stmt = do_poplevel (stmt);
1304 }
1305
1306 /* ??? See c_end_compound_stmt wrt statement expressions. */
1307 add_stmt (stmt);
1308 finish_stmt ();
1309 }
1310
1311 /* Finish an asm-statement, whose components are a STRING, some
1312 OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1313 LABELS. Also note whether the asm-statement should be
1314 considered volatile. */
1315
1316 tree
1317 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1318 tree input_operands, tree clobbers, tree labels)
1319 {
1320 tree r;
1321 tree t;
1322 int ninputs = list_length (input_operands);
1323 int noutputs = list_length (output_operands);
1324
1325 if (!processing_template_decl)
1326 {
1327 const char *constraint;
1328 const char **oconstraints;
1329 bool allows_mem, allows_reg, is_inout;
1330 tree operand;
1331 int i;
1332
1333 oconstraints = XALLOCAVEC (const char *, noutputs);
1334
1335 string = resolve_asm_operand_names (string, output_operands,
1336 input_operands, labels);
1337
1338 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1339 {
1340 operand = TREE_VALUE (t);
1341
1342 /* ??? Really, this should not be here. Users should be using a
1343 proper lvalue, dammit. But there's a long history of using
1344 casts in the output operands. In cases like longlong.h, this
1345 becomes a primitive form of typechecking -- if the cast can be
1346 removed, then the output operand had a type of the proper width;
1347 otherwise we'll get an error. Gross, but ... */
1348 STRIP_NOPS (operand);
1349
1350 operand = mark_lvalue_use (operand);
1351
1352 if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1353 operand = error_mark_node;
1354
1355 if (operand != error_mark_node
1356 && (TREE_READONLY (operand)
1357 || CP_TYPE_CONST_P (TREE_TYPE (operand))
1358 /* Functions are not modifiable, even though they are
1359 lvalues. */
1360 || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1361 || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1362 /* If it's an aggregate and any field is const, then it is
1363 effectively const. */
1364 || (CLASS_TYPE_P (TREE_TYPE (operand))
1365 && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1366 cxx_readonly_error (operand, lv_asm);
1367
1368 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1369 oconstraints[i] = constraint;
1370
1371 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1372 &allows_mem, &allows_reg, &is_inout))
1373 {
1374 /* If the operand is going to end up in memory,
1375 mark it addressable. */
1376 if (!allows_reg && !cxx_mark_addressable (operand))
1377 operand = error_mark_node;
1378 }
1379 else
1380 operand = error_mark_node;
1381
1382 TREE_VALUE (t) = operand;
1383 }
1384
1385 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1386 {
1387 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1388 operand = decay_conversion (TREE_VALUE (t), tf_warning_or_error);
1389
1390 /* If the type of the operand hasn't been determined (e.g.,
1391 because it involves an overloaded function), then issue
1392 an error message. There's no context available to
1393 resolve the overloading. */
1394 if (TREE_TYPE (operand) == unknown_type_node)
1395 {
1396 error ("type of asm operand %qE could not be determined",
1397 TREE_VALUE (t));
1398 operand = error_mark_node;
1399 }
1400
1401 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1402 oconstraints, &allows_mem, &allows_reg))
1403 {
1404 /* If the operand is going to end up in memory,
1405 mark it addressable. */
1406 if (!allows_reg && allows_mem)
1407 {
1408 /* Strip the nops as we allow this case. FIXME, this really
1409 should be rejected or made deprecated. */
1410 STRIP_NOPS (operand);
1411 if (!cxx_mark_addressable (operand))
1412 operand = error_mark_node;
1413 }
1414 }
1415 else
1416 operand = error_mark_node;
1417
1418 TREE_VALUE (t) = operand;
1419 }
1420 }
1421
1422 r = build_stmt (input_location, ASM_EXPR, string,
1423 output_operands, input_operands,
1424 clobbers, labels);
1425 ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1426 r = maybe_cleanup_point_expr_void (r);
1427 return add_stmt (r);
1428 }
1429
1430 /* Finish a label with the indicated NAME. Returns the new label. */
1431
1432 tree
1433 finish_label_stmt (tree name)
1434 {
1435 tree decl = define_label (input_location, name);
1436
1437 if (decl == error_mark_node)
1438 return error_mark_node;
1439
1440 add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1441
1442 return decl;
1443 }
1444
1445 /* Finish a series of declarations for local labels. G++ allows users
1446 to declare "local" labels, i.e., labels with scope. This extension
1447 is useful when writing code involving statement-expressions. */
1448
1449 void
1450 finish_label_decl (tree name)
1451 {
1452 if (!at_function_scope_p ())
1453 {
1454 error ("__label__ declarations are only allowed in function scopes");
1455 return;
1456 }
1457
1458 add_decl_expr (declare_local_label (name));
1459 }
1460
1461 /* When DECL goes out of scope, make sure that CLEANUP is executed. */
1462
1463 void
1464 finish_decl_cleanup (tree decl, tree cleanup)
1465 {
1466 push_cleanup (decl, cleanup, false);
1467 }
1468
1469 /* If the current scope exits with an exception, run CLEANUP. */
1470
1471 void
1472 finish_eh_cleanup (tree cleanup)
1473 {
1474 push_cleanup (NULL, cleanup, true);
1475 }
1476
1477 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1478 order they were written by the user. Each node is as for
1479 emit_mem_initializers. */
1480
1481 void
1482 finish_mem_initializers (tree mem_inits)
1483 {
1484 /* Reorder the MEM_INITS so that they are in the order they appeared
1485 in the source program. */
1486 mem_inits = nreverse (mem_inits);
1487
1488 if (processing_template_decl)
1489 {
1490 tree mem;
1491
1492 for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1493 {
1494 /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1495 check for bare parameter packs in the TREE_VALUE, because
1496 any parameter packs in the TREE_VALUE have already been
1497 bound as part of the TREE_PURPOSE. See
1498 make_pack_expansion for more information. */
1499 if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1500 && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1501 TREE_VALUE (mem) = error_mark_node;
1502 }
1503
1504 add_stmt (build_min_nt_loc (UNKNOWN_LOCATION,
1505 CTOR_INITIALIZER, mem_inits));
1506 }
1507 else
1508 emit_mem_initializers (mem_inits);
1509 }
1510
1511 /* Finish a parenthesized expression EXPR. */
1512
1513 tree
1514 finish_parenthesized_expr (tree expr)
1515 {
1516 if (EXPR_P (expr))
1517 /* This inhibits warnings in c_common_truthvalue_conversion. */
1518 TREE_NO_WARNING (expr) = 1;
1519
1520 if (TREE_CODE (expr) == OFFSET_REF
1521 || TREE_CODE (expr) == SCOPE_REF)
1522 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1523 enclosed in parentheses. */
1524 PTRMEM_OK_P (expr) = 0;
1525
1526 if (TREE_CODE (expr) == STRING_CST)
1527 PAREN_STRING_LITERAL_P (expr) = 1;
1528
1529 return expr;
1530 }
1531
1532 /* Finish a reference to a non-static data member (DECL) that is not
1533 preceded by `.' or `->'. */
1534
1535 tree
1536 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1537 {
1538 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1539
1540 if (!object)
1541 {
1542 tree scope = qualifying_scope;
1543 if (scope == NULL_TREE)
1544 scope = context_for_name_lookup (decl);
1545 object = maybe_dummy_object (scope, NULL);
1546 }
1547
1548 if (object == error_mark_node)
1549 return error_mark_node;
1550
1551 /* DR 613: Can use non-static data members without an associated
1552 object in sizeof/decltype/alignof. */
1553 if (is_dummy_object (object) && cp_unevaluated_operand == 0
1554 && (!processing_template_decl || !current_class_ref))
1555 {
1556 if (current_function_decl
1557 && DECL_STATIC_FUNCTION_P (current_function_decl))
1558 error ("invalid use of member %q+D in static member function", decl);
1559 else
1560 error ("invalid use of non-static data member %q+D", decl);
1561 error ("from this location");
1562
1563 return error_mark_node;
1564 }
1565
1566 if (current_class_ptr)
1567 TREE_USED (current_class_ptr) = 1;
1568 if (processing_template_decl && !qualifying_scope)
1569 {
1570 tree type = TREE_TYPE (decl);
1571
1572 if (TREE_CODE (type) == REFERENCE_TYPE)
1573 /* Quals on the object don't matter. */;
1574 else
1575 {
1576 /* Set the cv qualifiers. */
1577 int quals = (current_class_ref
1578 ? cp_type_quals (TREE_TYPE (current_class_ref))
1579 : TYPE_UNQUALIFIED);
1580
1581 if (DECL_MUTABLE_P (decl))
1582 quals &= ~TYPE_QUAL_CONST;
1583
1584 quals |= cp_type_quals (TREE_TYPE (decl));
1585 type = cp_build_qualified_type (type, quals);
1586 }
1587
1588 return (convert_from_reference
1589 (build_min (COMPONENT_REF, type, object, decl, NULL_TREE)));
1590 }
1591 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1592 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1593 for now. */
1594 else if (processing_template_decl)
1595 return build_qualified_name (TREE_TYPE (decl),
1596 qualifying_scope,
1597 decl,
1598 /*template_p=*/false);
1599 else
1600 {
1601 tree access_type = TREE_TYPE (object);
1602
1603 perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1604 decl);
1605
1606 /* If the data member was named `C::M', convert `*this' to `C'
1607 first. */
1608 if (qualifying_scope)
1609 {
1610 tree binfo = NULL_TREE;
1611 object = build_scoped_ref (object, qualifying_scope,
1612 &binfo);
1613 }
1614
1615 return build_class_member_access_expr (object, decl,
1616 /*access_path=*/NULL_TREE,
1617 /*preserve_reference=*/false,
1618 tf_warning_or_error);
1619 }
1620 }
1621
1622 /* If we are currently parsing a template and we encountered a typedef
1623 TYPEDEF_DECL that is being accessed though CONTEXT, this function
1624 adds the typedef to a list tied to the current template.
1625 At tempate instantiatin time, that list is walked and access check
1626 performed for each typedef.
1627 LOCATION is the location of the usage point of TYPEDEF_DECL. */
1628
1629 void
1630 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1631 tree context,
1632 location_t location)
1633 {
1634 tree template_info = NULL;
1635 tree cs = current_scope ();
1636
1637 if (!is_typedef_decl (typedef_decl)
1638 || !context
1639 || !CLASS_TYPE_P (context)
1640 || !cs)
1641 return;
1642
1643 if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1644 template_info = get_template_info (cs);
1645
1646 if (template_info
1647 && TI_TEMPLATE (template_info)
1648 && !currently_open_class (context))
1649 append_type_to_template_for_access_check (cs, typedef_decl,
1650 context, location);
1651 }
1652
1653 /* DECL was the declaration to which a qualified-id resolved. Issue
1654 an error message if it is not accessible. If OBJECT_TYPE is
1655 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1656 type of `*x', or `x', respectively. If the DECL was named as
1657 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1658
1659 void
1660 check_accessibility_of_qualified_id (tree decl,
1661 tree object_type,
1662 tree nested_name_specifier)
1663 {
1664 tree scope;
1665 tree qualifying_type = NULL_TREE;
1666
1667 /* If we are parsing a template declaration and if decl is a typedef,
1668 add it to a list tied to the template.
1669 At template instantiation time, that list will be walked and
1670 access check performed. */
1671 add_typedef_to_current_template_for_access_check (decl,
1672 nested_name_specifier
1673 ? nested_name_specifier
1674 : DECL_CONTEXT (decl),
1675 input_location);
1676
1677 /* If we're not checking, return immediately. */
1678 if (deferred_access_no_check)
1679 return;
1680
1681 /* Determine the SCOPE of DECL. */
1682 scope = context_for_name_lookup (decl);
1683 /* If the SCOPE is not a type, then DECL is not a member. */
1684 if (!TYPE_P (scope))
1685 return;
1686 /* Compute the scope through which DECL is being accessed. */
1687 if (object_type
1688 /* OBJECT_TYPE might not be a class type; consider:
1689
1690 class A { typedef int I; };
1691 I *p;
1692 p->A::I::~I();
1693
1694 In this case, we will have "A::I" as the DECL, but "I" as the
1695 OBJECT_TYPE. */
1696 && CLASS_TYPE_P (object_type)
1697 && DERIVED_FROM_P (scope, object_type))
1698 /* If we are processing a `->' or `.' expression, use the type of the
1699 left-hand side. */
1700 qualifying_type = object_type;
1701 else if (nested_name_specifier)
1702 {
1703 /* If the reference is to a non-static member of the
1704 current class, treat it as if it were referenced through
1705 `this'. */
1706 if (DECL_NONSTATIC_MEMBER_P (decl)
1707 && current_class_ptr
1708 && DERIVED_FROM_P (scope, current_class_type))
1709 qualifying_type = current_class_type;
1710 /* Otherwise, use the type indicated by the
1711 nested-name-specifier. */
1712 else
1713 qualifying_type = nested_name_specifier;
1714 }
1715 else
1716 /* Otherwise, the name must be from the current class or one of
1717 its bases. */
1718 qualifying_type = currently_open_derived_class (scope);
1719
1720 if (qualifying_type
1721 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1722 or similar in a default argument value. */
1723 && CLASS_TYPE_P (qualifying_type)
1724 && !dependent_type_p (qualifying_type))
1725 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1726 decl);
1727 }
1728
1729 /* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1730 class named to the left of the "::" operator. DONE is true if this
1731 expression is a complete postfix-expression; it is false if this
1732 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
1733 iff this expression is the operand of '&'. TEMPLATE_P is true iff
1734 the qualified-id was of the form "A::template B". TEMPLATE_ARG_P
1735 is true iff this qualified name appears as a template argument. */
1736
1737 tree
1738 finish_qualified_id_expr (tree qualifying_class,
1739 tree expr,
1740 bool done,
1741 bool address_p,
1742 bool template_p,
1743 bool template_arg_p)
1744 {
1745 gcc_assert (TYPE_P (qualifying_class));
1746
1747 if (error_operand_p (expr))
1748 return error_mark_node;
1749
1750 if (DECL_P (expr) || BASELINK_P (expr))
1751 mark_used (expr);
1752
1753 if (template_p)
1754 check_template_keyword (expr);
1755
1756 /* If EXPR occurs as the operand of '&', use special handling that
1757 permits a pointer-to-member. */
1758 if (address_p && done)
1759 {
1760 if (TREE_CODE (expr) == SCOPE_REF)
1761 expr = TREE_OPERAND (expr, 1);
1762 expr = build_offset_ref (qualifying_class, expr,
1763 /*address_p=*/true);
1764 return expr;
1765 }
1766
1767 /* Within the scope of a class, turn references to non-static
1768 members into expression of the form "this->...". */
1769 if (template_arg_p)
1770 /* But, within a template argument, we do not want make the
1771 transformation, as there is no "this" pointer. */
1772 ;
1773 else if (TREE_CODE (expr) == FIELD_DECL)
1774 {
1775 push_deferring_access_checks (dk_no_check);
1776 expr = finish_non_static_data_member (expr, NULL_TREE,
1777 qualifying_class);
1778 pop_deferring_access_checks ();
1779 }
1780 else if (BASELINK_P (expr) && !processing_template_decl)
1781 {
1782 tree ob;
1783
1784 /* See if any of the functions are non-static members. */
1785 /* If so, the expression may be relative to 'this'. */
1786 if (!shared_member_p (expr)
1787 && (ob = maybe_dummy_object (qualifying_class, NULL),
1788 !is_dummy_object (ob)))
1789 expr = (build_class_member_access_expr
1790 (ob,
1791 expr,
1792 BASELINK_ACCESS_BINFO (expr),
1793 /*preserve_reference=*/false,
1794 tf_warning_or_error));
1795 else if (done)
1796 /* The expression is a qualified name whose address is not
1797 being taken. */
1798 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1799 }
1800
1801 return expr;
1802 }
1803
1804 /* Begin a statement-expression. The value returned must be passed to
1805 finish_stmt_expr. */
1806
1807 tree
1808 begin_stmt_expr (void)
1809 {
1810 return push_stmt_list ();
1811 }
1812
1813 /* Process the final expression of a statement expression. EXPR can be
1814 NULL, if the final expression is empty. Return a STATEMENT_LIST
1815 containing all the statements in the statement-expression, or
1816 ERROR_MARK_NODE if there was an error. */
1817
1818 tree
1819 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1820 {
1821 if (error_operand_p (expr))
1822 {
1823 /* The type of the statement-expression is the type of the last
1824 expression. */
1825 TREE_TYPE (stmt_expr) = error_mark_node;
1826 return error_mark_node;
1827 }
1828
1829 /* If the last statement does not have "void" type, then the value
1830 of the last statement is the value of the entire expression. */
1831 if (expr)
1832 {
1833 tree type = TREE_TYPE (expr);
1834
1835 if (processing_template_decl)
1836 {
1837 expr = build_stmt (input_location, EXPR_STMT, expr);
1838 expr = add_stmt (expr);
1839 /* Mark the last statement so that we can recognize it as such at
1840 template-instantiation time. */
1841 EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1842 }
1843 else if (VOID_TYPE_P (type))
1844 {
1845 /* Just treat this like an ordinary statement. */
1846 expr = finish_expr_stmt (expr);
1847 }
1848 else
1849 {
1850 /* It actually has a value we need to deal with. First, force it
1851 to be an rvalue so that we won't need to build up a copy
1852 constructor call later when we try to assign it to something. */
1853 expr = force_rvalue (expr, tf_warning_or_error);
1854 if (error_operand_p (expr))
1855 return error_mark_node;
1856
1857 /* Update for array-to-pointer decay. */
1858 type = TREE_TYPE (expr);
1859
1860 /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1861 normal statement, but don't convert to void or actually add
1862 the EXPR_STMT. */
1863 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1864 expr = maybe_cleanup_point_expr (expr);
1865 add_stmt (expr);
1866 }
1867
1868 /* The type of the statement-expression is the type of the last
1869 expression. */
1870 TREE_TYPE (stmt_expr) = type;
1871 }
1872
1873 return stmt_expr;
1874 }
1875
1876 /* Finish a statement-expression. EXPR should be the value returned
1877 by the previous begin_stmt_expr. Returns an expression
1878 representing the statement-expression. */
1879
1880 tree
1881 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1882 {
1883 tree type;
1884 tree result;
1885
1886 if (error_operand_p (stmt_expr))
1887 {
1888 pop_stmt_list (stmt_expr);
1889 return error_mark_node;
1890 }
1891
1892 gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1893
1894 type = TREE_TYPE (stmt_expr);
1895 result = pop_stmt_list (stmt_expr);
1896 TREE_TYPE (result) = type;
1897
1898 if (processing_template_decl)
1899 {
1900 result = build_min (STMT_EXPR, type, result);
1901 TREE_SIDE_EFFECTS (result) = 1;
1902 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1903 }
1904 else if (CLASS_TYPE_P (type))
1905 {
1906 /* Wrap the statement-expression in a TARGET_EXPR so that the
1907 temporary object created by the final expression is destroyed at
1908 the end of the full-expression containing the
1909 statement-expression. */
1910 result = force_target_expr (type, result, tf_warning_or_error);
1911 }
1912
1913 return result;
1914 }
1915
1916 /* Returns the expression which provides the value of STMT_EXPR. */
1917
1918 tree
1919 stmt_expr_value_expr (tree stmt_expr)
1920 {
1921 tree t = STMT_EXPR_STMT (stmt_expr);
1922
1923 if (TREE_CODE (t) == BIND_EXPR)
1924 t = BIND_EXPR_BODY (t);
1925
1926 if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1927 t = STATEMENT_LIST_TAIL (t)->stmt;
1928
1929 if (TREE_CODE (t) == EXPR_STMT)
1930 t = EXPR_STMT_EXPR (t);
1931
1932 return t;
1933 }
1934
1935 /* Return TRUE iff EXPR_STMT is an empty list of
1936 expression statements. */
1937
1938 bool
1939 empty_expr_stmt_p (tree expr_stmt)
1940 {
1941 tree body = NULL_TREE;
1942
1943 if (expr_stmt == void_zero_node)
1944 return true;
1945
1946 if (expr_stmt)
1947 {
1948 if (TREE_CODE (expr_stmt) == EXPR_STMT)
1949 body = EXPR_STMT_EXPR (expr_stmt);
1950 else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1951 body = expr_stmt;
1952 }
1953
1954 if (body)
1955 {
1956 if (TREE_CODE (body) == STATEMENT_LIST)
1957 return tsi_end_p (tsi_start (body));
1958 else
1959 return empty_expr_stmt_p (body);
1960 }
1961 return false;
1962 }
1963
1964 /* Perform Koenig lookup. FN is the postfix-expression representing
1965 the function (or functions) to call; ARGS are the arguments to the
1966 call; if INCLUDE_STD then the `std' namespace is automatically
1967 considered an associated namespace (used in range-based for loops).
1968 Returns the functions to be considered by overload resolution. */
1969
1970 tree
1971 perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std,
1972 tsubst_flags_t complain)
1973 {
1974 tree identifier = NULL_TREE;
1975 tree functions = NULL_TREE;
1976 tree tmpl_args = NULL_TREE;
1977 bool template_id = false;
1978
1979 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1980 {
1981 /* Use a separate flag to handle null args. */
1982 template_id = true;
1983 tmpl_args = TREE_OPERAND (fn, 1);
1984 fn = TREE_OPERAND (fn, 0);
1985 }
1986
1987 /* Find the name of the overloaded function. */
1988 if (TREE_CODE (fn) == IDENTIFIER_NODE)
1989 identifier = fn;
1990 else if (is_overloaded_fn (fn))
1991 {
1992 functions = fn;
1993 identifier = DECL_NAME (get_first_fn (functions));
1994 }
1995 else if (DECL_P (fn))
1996 {
1997 functions = fn;
1998 identifier = DECL_NAME (fn);
1999 }
2000
2001 /* A call to a namespace-scope function using an unqualified name.
2002
2003 Do Koenig lookup -- unless any of the arguments are
2004 type-dependent. */
2005 if (!any_type_dependent_arguments_p (args)
2006 && !any_dependent_template_arguments_p (tmpl_args))
2007 {
2008 fn = lookup_arg_dependent (identifier, functions, args, include_std);
2009 if (!fn)
2010 {
2011 /* The unqualified name could not be resolved. */
2012 if (complain)
2013 fn = unqualified_fn_lookup_error (identifier);
2014 else
2015 fn = identifier;
2016 }
2017 }
2018
2019 if (fn && template_id)
2020 fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
2021
2022 return fn;
2023 }
2024
2025 /* Generate an expression for `FN (ARGS)'. This may change the
2026 contents of ARGS.
2027
2028 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
2029 as a virtual call, even if FN is virtual. (This flag is set when
2030 encountering an expression where the function name is explicitly
2031 qualified. For example a call to `X::f' never generates a virtual
2032 call.)
2033
2034 Returns code for the call. */
2035
2036 tree
2037 finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
2038 bool koenig_p, tsubst_flags_t complain)
2039 {
2040 tree result;
2041 tree orig_fn;
2042 VEC(tree,gc) *orig_args = NULL;
2043
2044 if (fn == error_mark_node)
2045 return error_mark_node;
2046
2047 gcc_assert (!TYPE_P (fn));
2048
2049 orig_fn = fn;
2050
2051 if (processing_template_decl)
2052 {
2053 /* If the call expression is dependent, build a CALL_EXPR node
2054 with no type; type_dependent_expression_p recognizes
2055 expressions with no type as being dependent. */
2056 if (type_dependent_expression_p (fn)
2057 || any_type_dependent_arguments_p (*args)
2058 /* For a non-static member function that doesn't have an
2059 explicit object argument, we need to specifically
2060 test the type dependency of the "this" pointer because it
2061 is not included in *ARGS even though it is considered to
2062 be part of the list of arguments. Note that this is
2063 related to CWG issues 515 and 1005. */
2064 || (TREE_CODE (fn) != COMPONENT_REF
2065 && non_static_member_function_p (fn)
2066 && current_class_ref
2067 && type_dependent_expression_p (current_class_ref)))
2068 {
2069 result = build_nt_call_vec (fn, *args);
2070 KOENIG_LOOKUP_P (result) = koenig_p;
2071 if (cfun)
2072 {
2073 do
2074 {
2075 tree fndecl = OVL_CURRENT (fn);
2076 if (TREE_CODE (fndecl) != FUNCTION_DECL
2077 || !TREE_THIS_VOLATILE (fndecl))
2078 break;
2079 fn = OVL_NEXT (fn);
2080 }
2081 while (fn);
2082 if (!fn)
2083 current_function_returns_abnormally = 1;
2084 }
2085 return result;
2086 }
2087 orig_args = make_tree_vector_copy (*args);
2088 if (!BASELINK_P (fn)
2089 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
2090 && TREE_TYPE (fn) != unknown_type_node)
2091 fn = build_non_dependent_expr (fn);
2092 make_args_non_dependent (*args);
2093 }
2094
2095 if (TREE_CODE (fn) == COMPONENT_REF)
2096 {
2097 tree member = TREE_OPERAND (fn, 1);
2098 if (BASELINK_P (member))
2099 {
2100 tree object = TREE_OPERAND (fn, 0);
2101 return build_new_method_call (object, member,
2102 args, NULL_TREE,
2103 (disallow_virtual
2104 ? LOOKUP_NORMAL | LOOKUP_NONVIRTUAL
2105 : LOOKUP_NORMAL),
2106 /*fn_p=*/NULL,
2107 complain);
2108 }
2109 }
2110
2111 if (is_overloaded_fn (fn))
2112 fn = baselink_for_fns (fn);
2113
2114 result = NULL_TREE;
2115 if (BASELINK_P (fn))
2116 {
2117 tree object;
2118
2119 /* A call to a member function. From [over.call.func]:
2120
2121 If the keyword this is in scope and refers to the class of
2122 that member function, or a derived class thereof, then the
2123 function call is transformed into a qualified function call
2124 using (*this) as the postfix-expression to the left of the
2125 . operator.... [Otherwise] a contrived object of type T
2126 becomes the implied object argument.
2127
2128 In this situation:
2129
2130 struct A { void f(); };
2131 struct B : public A {};
2132 struct C : public A { void g() { B::f(); }};
2133
2134 "the class of that member function" refers to `A'. But 11.2
2135 [class.access.base] says that we need to convert 'this' to B* as
2136 part of the access, so we pass 'B' to maybe_dummy_object. */
2137
2138 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2139 NULL);
2140
2141 if (processing_template_decl)
2142 {
2143 if (type_dependent_expression_p (object))
2144 {
2145 tree ret = build_nt_call_vec (orig_fn, orig_args);
2146 release_tree_vector (orig_args);
2147 return ret;
2148 }
2149 object = build_non_dependent_expr (object);
2150 }
2151
2152 result = build_new_method_call (object, fn, args, NULL_TREE,
2153 (disallow_virtual
2154 ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
2155 : LOOKUP_NORMAL),
2156 /*fn_p=*/NULL,
2157 complain);
2158 }
2159 else if (is_overloaded_fn (fn))
2160 {
2161 /* If the function is an overloaded builtin, resolve it. */
2162 if (TREE_CODE (fn) == FUNCTION_DECL
2163 && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2164 || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2165 result = resolve_overloaded_builtin (input_location, fn, *args);
2166
2167 if (!result)
2168 /* A call to a namespace-scope function. */
2169 result = build_new_function_call (fn, args, koenig_p, complain);
2170 }
2171 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2172 {
2173 if (!VEC_empty (tree, *args))
2174 error ("arguments to destructor are not allowed");
2175 /* Mark the pseudo-destructor call as having side-effects so
2176 that we do not issue warnings about its use. */
2177 result = build1 (NOP_EXPR,
2178 void_type_node,
2179 TREE_OPERAND (fn, 0));
2180 TREE_SIDE_EFFECTS (result) = 1;
2181 }
2182 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2183 /* If the "function" is really an object of class type, it might
2184 have an overloaded `operator ()'. */
2185 result = build_op_call (fn, args, complain);
2186
2187 if (!result)
2188 /* A call where the function is unknown. */
2189 result = cp_build_function_call_vec (fn, args, complain);
2190
2191 if (processing_template_decl && result != error_mark_node)
2192 {
2193 if (TREE_CODE (result) == INDIRECT_REF)
2194 result = TREE_OPERAND (result, 0);
2195 result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2196 SET_EXPR_LOCATION (result, input_location);
2197 KOENIG_LOOKUP_P (result) = koenig_p;
2198 release_tree_vector (orig_args);
2199 result = convert_from_reference (result);
2200 }
2201
2202 if (koenig_p)
2203 {
2204 /* Free garbage OVERLOADs from arg-dependent lookup. */
2205 tree next = NULL_TREE;
2206 for (fn = orig_fn;
2207 fn && TREE_CODE (fn) == OVERLOAD && OVL_ARG_DEPENDENT (fn);
2208 fn = next)
2209 {
2210 if (processing_template_decl)
2211 /* In a template, we'll re-use them at instantiation time. */
2212 OVL_ARG_DEPENDENT (fn) = false;
2213 else
2214 {
2215 next = OVL_CHAIN (fn);
2216 ggc_free (fn);
2217 }
2218 }
2219 }
2220
2221 return result;
2222 }
2223
2224 /* Finish a call to a postfix increment or decrement or EXPR. (Which
2225 is indicated by CODE, which should be POSTINCREMENT_EXPR or
2226 POSTDECREMENT_EXPR.) */
2227
2228 tree
2229 finish_increment_expr (tree expr, enum tree_code code)
2230 {
2231 return build_x_unary_op (input_location, code, expr, tf_warning_or_error);
2232 }
2233
2234 /* Finish a use of `this'. Returns an expression for `this'. */
2235
2236 tree
2237 finish_this_expr (void)
2238 {
2239 tree result;
2240
2241 if (current_class_ptr)
2242 {
2243 tree type = TREE_TYPE (current_class_ref);
2244
2245 /* In a lambda expression, 'this' refers to the captured 'this'. */
2246 if (LAMBDA_TYPE_P (type))
2247 result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2248 else
2249 result = current_class_ptr;
2250
2251 }
2252 else if (current_function_decl
2253 && DECL_STATIC_FUNCTION_P (current_function_decl))
2254 {
2255 error ("%<this%> is unavailable for static member functions");
2256 result = error_mark_node;
2257 }
2258 else
2259 {
2260 if (current_function_decl)
2261 error ("invalid use of %<this%> in non-member function");
2262 else
2263 error ("invalid use of %<this%> at top level");
2264 result = error_mark_node;
2265 }
2266
2267 return result;
2268 }
2269
2270 /* Finish a pseudo-destructor expression. If SCOPE is NULL, the
2271 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2272 the TYPE for the type given. If SCOPE is non-NULL, the expression
2273 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
2274
2275 tree
2276 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2277 {
2278 if (object == error_mark_node || destructor == error_mark_node)
2279 return error_mark_node;
2280
2281 gcc_assert (TYPE_P (destructor));
2282
2283 if (!processing_template_decl)
2284 {
2285 if (scope == error_mark_node)
2286 {
2287 error ("invalid qualifying scope in pseudo-destructor name");
2288 return error_mark_node;
2289 }
2290 if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2291 {
2292 error ("qualified type %qT does not match destructor name ~%qT",
2293 scope, destructor);
2294 return error_mark_node;
2295 }
2296
2297
2298 /* [expr.pseudo] says both:
2299
2300 The type designated by the pseudo-destructor-name shall be
2301 the same as the object type.
2302
2303 and:
2304
2305 The cv-unqualified versions of the object type and of the
2306 type designated by the pseudo-destructor-name shall be the
2307 same type.
2308
2309 We implement the more generous second sentence, since that is
2310 what most other compilers do. */
2311 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2312 destructor))
2313 {
2314 error ("%qE is not of type %qT", object, destructor);
2315 return error_mark_node;
2316 }
2317 }
2318
2319 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2320 }
2321
2322 /* Finish an expression of the form CODE EXPR. */
2323
2324 tree
2325 finish_unary_op_expr (location_t loc, enum tree_code code, tree expr)
2326 {
2327 tree result = build_x_unary_op (loc, code, expr, tf_warning_or_error);
2328 if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2329 overflow_warning (input_location, result);
2330
2331 return result;
2332 }
2333
2334 /* Finish a compound-literal expression. TYPE is the type to which
2335 the CONSTRUCTOR in COMPOUND_LITERAL is being cast. */
2336
2337 tree
2338 finish_compound_literal (tree type, tree compound_literal,
2339 tsubst_flags_t complain)
2340 {
2341 if (type == error_mark_node)
2342 return error_mark_node;
2343
2344 if (TREE_CODE (type) == REFERENCE_TYPE)
2345 {
2346 compound_literal
2347 = finish_compound_literal (TREE_TYPE (type), compound_literal,
2348 complain);
2349 return cp_build_c_cast (type, compound_literal, complain);
2350 }
2351
2352 if (!TYPE_OBJ_P (type))
2353 {
2354 if (complain & tf_error)
2355 error ("compound literal of non-object type %qT", type);
2356 return error_mark_node;
2357 }
2358
2359 if (processing_template_decl)
2360 {
2361 TREE_TYPE (compound_literal) = type;
2362 /* Mark the expression as a compound literal. */
2363 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2364 return compound_literal;
2365 }
2366
2367 type = complete_type (type);
2368
2369 if (TYPE_NON_AGGREGATE_CLASS (type))
2370 {
2371 /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2372 everywhere that deals with function arguments would be a pain, so
2373 just wrap it in a TREE_LIST. The parser set a flag so we know
2374 that it came from T{} rather than T({}). */
2375 CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2376 compound_literal = build_tree_list (NULL_TREE, compound_literal);
2377 return build_functional_cast (type, compound_literal, complain);
2378 }
2379
2380 if (TREE_CODE (type) == ARRAY_TYPE
2381 && check_array_initializer (NULL_TREE, type, compound_literal))
2382 return error_mark_node;
2383 compound_literal = reshape_init (type, compound_literal, complain);
2384 if (SCALAR_TYPE_P (type)
2385 && !BRACE_ENCLOSED_INITIALIZER_P (compound_literal)
2386 && (complain & tf_warning_or_error))
2387 check_narrowing (type, compound_literal);
2388 if (TREE_CODE (type) == ARRAY_TYPE
2389 && TYPE_DOMAIN (type) == NULL_TREE)
2390 {
2391 cp_complete_array_type_or_error (&type, compound_literal,
2392 false, complain);
2393 if (type == error_mark_node)
2394 return error_mark_node;
2395 }
2396 compound_literal = digest_init (type, compound_literal, complain);
2397 if (TREE_CODE (compound_literal) == CONSTRUCTOR)
2398 TREE_HAS_CONSTRUCTOR (compound_literal) = true;
2399 /* Put static/constant array temporaries in static variables, but always
2400 represent class temporaries with TARGET_EXPR so we elide copies. */
2401 if ((!at_function_scope_p () || CP_TYPE_CONST_P (type))
2402 && TREE_CODE (type) == ARRAY_TYPE
2403 && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2404 && initializer_constant_valid_p (compound_literal, type))
2405 {
2406 tree decl = create_temporary_var (type);
2407 DECL_INITIAL (decl) = compound_literal;
2408 TREE_STATIC (decl) = 1;
2409 if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
2410 {
2411 /* 5.19 says that a constant expression can include an
2412 lvalue-rvalue conversion applied to "a glvalue of literal type
2413 that refers to a non-volatile temporary object initialized
2414 with a constant expression". Rather than try to communicate
2415 that this VAR_DECL is a temporary, just mark it constexpr. */
2416 DECL_DECLARED_CONSTEXPR_P (decl) = true;
2417 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
2418 TREE_CONSTANT (decl) = true;
2419 }
2420 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
2421 decl = pushdecl_top_level (decl);
2422 DECL_NAME (decl) = make_anon_name ();
2423 SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2424 return decl;
2425 }
2426 else
2427 return get_target_expr_sfinae (compound_literal, complain);
2428 }
2429
2430 /* Return the declaration for the function-name variable indicated by
2431 ID. */
2432
2433 tree
2434 finish_fname (tree id)
2435 {
2436 tree decl;
2437
2438 decl = fname_decl (input_location, C_RID_CODE (id), id);
2439 if (processing_template_decl && current_function_decl)
2440 decl = DECL_NAME (decl);
2441 return decl;
2442 }
2443
2444 /* Finish a translation unit. */
2445
2446 void
2447 finish_translation_unit (void)
2448 {
2449 /* In case there were missing closebraces,
2450 get us back to the global binding level. */
2451 pop_everything ();
2452 while (current_namespace != global_namespace)
2453 pop_namespace ();
2454
2455 /* Do file scope __FUNCTION__ et al. */
2456 finish_fname_decls ();
2457 }
2458
2459 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2460 Returns the parameter. */
2461
2462 tree
2463 finish_template_type_parm (tree aggr, tree identifier)
2464 {
2465 if (aggr != class_type_node)
2466 {
2467 permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2468 aggr = class_type_node;
2469 }
2470
2471 return build_tree_list (aggr, identifier);
2472 }
2473
2474 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2475 Returns the parameter. */
2476
2477 tree
2478 finish_template_template_parm (tree aggr, tree identifier)
2479 {
2480 tree decl = build_decl (input_location,
2481 TYPE_DECL, identifier, NULL_TREE);
2482 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2483 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2484 DECL_TEMPLATE_RESULT (tmpl) = decl;
2485 DECL_ARTIFICIAL (decl) = 1;
2486 end_template_decl ();
2487
2488 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2489
2490 check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2491 /*is_primary=*/true, /*is_partial=*/false,
2492 /*is_friend=*/0);
2493
2494 return finish_template_type_parm (aggr, tmpl);
2495 }
2496
2497 /* ARGUMENT is the default-argument value for a template template
2498 parameter. If ARGUMENT is invalid, issue error messages and return
2499 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2500
2501 tree
2502 check_template_template_default_arg (tree argument)
2503 {
2504 if (TREE_CODE (argument) != TEMPLATE_DECL
2505 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2506 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2507 {
2508 if (TREE_CODE (argument) == TYPE_DECL)
2509 error ("invalid use of type %qT as a default value for a template "
2510 "template-parameter", TREE_TYPE (argument));
2511 else
2512 error ("invalid default argument for a template template parameter");
2513 return error_mark_node;
2514 }
2515
2516 return argument;
2517 }
2518
2519 /* Begin a class definition, as indicated by T. */
2520
2521 tree
2522 begin_class_definition (tree t)
2523 {
2524 if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2525 return error_mark_node;
2526
2527 if (processing_template_parmlist)
2528 {
2529 error ("definition of %q#T inside template parameter list", t);
2530 return error_mark_node;
2531 }
2532
2533 /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2534 are passed the same as decimal scalar types. */
2535 if (TREE_CODE (t) == RECORD_TYPE
2536 && !processing_template_decl)
2537 {
2538 tree ns = TYPE_CONTEXT (t);
2539 if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2540 && DECL_CONTEXT (ns) == std_node
2541 && DECL_NAME (ns)
2542 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2543 {
2544 const char *n = TYPE_NAME_STRING (t);
2545 if ((strcmp (n, "decimal32") == 0)
2546 || (strcmp (n, "decimal64") == 0)
2547 || (strcmp (n, "decimal128") == 0))
2548 TYPE_TRANSPARENT_AGGR (t) = 1;
2549 }
2550 }
2551
2552 /* A non-implicit typename comes from code like:
2553
2554 template <typename T> struct A {
2555 template <typename U> struct A<T>::B ...
2556
2557 This is erroneous. */
2558 else if (TREE_CODE (t) == TYPENAME_TYPE)
2559 {
2560 error ("invalid definition of qualified type %qT", t);
2561 t = error_mark_node;
2562 }
2563
2564 if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2565 {
2566 t = make_class_type (RECORD_TYPE);
2567 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2568 }
2569
2570 if (TYPE_BEING_DEFINED (t))
2571 {
2572 t = make_class_type (TREE_CODE (t));
2573 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2574 }
2575 maybe_process_partial_specialization (t);
2576 pushclass (t);
2577 TYPE_BEING_DEFINED (t) = 1;
2578
2579 if (flag_pack_struct)
2580 {
2581 tree v;
2582 TYPE_PACKED (t) = 1;
2583 /* Even though the type is being defined for the first time
2584 here, there might have been a forward declaration, so there
2585 might be cv-qualified variants of T. */
2586 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2587 TYPE_PACKED (v) = 1;
2588 }
2589 /* Reset the interface data, at the earliest possible
2590 moment, as it might have been set via a class foo;
2591 before. */
2592 if (! TYPE_ANONYMOUS_P (t))
2593 {
2594 struct c_fileinfo *finfo = get_fileinfo (input_filename);
2595 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2596 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2597 (t, finfo->interface_unknown);
2598 }
2599 reset_specialization();
2600
2601 /* Make a declaration for this class in its own scope. */
2602 build_self_reference ();
2603
2604 return t;
2605 }
2606
2607 /* Finish the member declaration given by DECL. */
2608
2609 void
2610 finish_member_declaration (tree decl)
2611 {
2612 if (decl == error_mark_node || decl == NULL_TREE)
2613 return;
2614
2615 if (decl == void_type_node)
2616 /* The COMPONENT was a friend, not a member, and so there's
2617 nothing for us to do. */
2618 return;
2619
2620 /* We should see only one DECL at a time. */
2621 gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2622
2623 /* Set up access control for DECL. */
2624 TREE_PRIVATE (decl)
2625 = (current_access_specifier == access_private_node);
2626 TREE_PROTECTED (decl)
2627 = (current_access_specifier == access_protected_node);
2628 if (TREE_CODE (decl) == TEMPLATE_DECL)
2629 {
2630 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2631 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2632 }
2633
2634 /* Mark the DECL as a member of the current class, unless it's
2635 a member of an enumeration. */
2636 if (TREE_CODE (decl) != CONST_DECL)
2637 DECL_CONTEXT (decl) = current_class_type;
2638
2639 /* Check for bare parameter packs in the member variable declaration. */
2640 if (TREE_CODE (decl) == FIELD_DECL)
2641 {
2642 if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2643 TREE_TYPE (decl) = error_mark_node;
2644 if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2645 DECL_ATTRIBUTES (decl) = NULL_TREE;
2646 }
2647
2648 /* [dcl.link]
2649
2650 A C language linkage is ignored for the names of class members
2651 and the member function type of class member functions. */
2652 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2653 SET_DECL_LANGUAGE (decl, lang_cplusplus);
2654
2655 /* Put functions on the TYPE_METHODS list and everything else on the
2656 TYPE_FIELDS list. Note that these are built up in reverse order.
2657 We reverse them (to obtain declaration order) in finish_struct. */
2658 if (TREE_CODE (decl) == FUNCTION_DECL
2659 || DECL_FUNCTION_TEMPLATE_P (decl))
2660 {
2661 /* We also need to add this function to the
2662 CLASSTYPE_METHOD_VEC. */
2663 if (add_method (current_class_type, decl, NULL_TREE))
2664 {
2665 DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2666 TYPE_METHODS (current_class_type) = decl;
2667
2668 maybe_add_class_template_decl_list (current_class_type, decl,
2669 /*friend_p=*/0);
2670 }
2671 }
2672 /* Enter the DECL into the scope of the class. */
2673 else if (pushdecl_class_level (decl))
2674 {
2675 if (TREE_CODE (decl) == USING_DECL)
2676 {
2677 /* For now, ignore class-scope USING_DECLS, so that
2678 debugging backends do not see them. */
2679 DECL_IGNORED_P (decl) = 1;
2680 }
2681
2682 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2683 go at the beginning. The reason is that lookup_field_1
2684 searches the list in order, and we want a field name to
2685 override a type name so that the "struct stat hack" will
2686 work. In particular:
2687
2688 struct S { enum E { }; int E } s;
2689 s.E = 3;
2690
2691 is valid. In addition, the FIELD_DECLs must be maintained in
2692 declaration order so that class layout works as expected.
2693 However, we don't need that order until class layout, so we
2694 save a little time by putting FIELD_DECLs on in reverse order
2695 here, and then reversing them in finish_struct_1. (We could
2696 also keep a pointer to the correct insertion points in the
2697 list.) */
2698
2699 if (TREE_CODE (decl) == TYPE_DECL)
2700 TYPE_FIELDS (current_class_type)
2701 = chainon (TYPE_FIELDS (current_class_type), decl);
2702 else
2703 {
2704 DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2705 TYPE_FIELDS (current_class_type) = decl;
2706 }
2707
2708 maybe_add_class_template_decl_list (current_class_type, decl,
2709 /*friend_p=*/0);
2710 }
2711
2712 if (pch_file)
2713 note_decl_for_pch (decl);
2714 }
2715
2716 /* DECL has been declared while we are building a PCH file. Perform
2717 actions that we might normally undertake lazily, but which can be
2718 performed now so that they do not have to be performed in
2719 translation units which include the PCH file. */
2720
2721 void
2722 note_decl_for_pch (tree decl)
2723 {
2724 gcc_assert (pch_file);
2725
2726 /* There's a good chance that we'll have to mangle names at some
2727 point, even if only for emission in debugging information. */
2728 if ((TREE_CODE (decl) == VAR_DECL
2729 || TREE_CODE (decl) == FUNCTION_DECL)
2730 && !processing_template_decl)
2731 mangle_decl (decl);
2732 }
2733
2734 /* Finish processing a complete template declaration. The PARMS are
2735 the template parameters. */
2736
2737 void
2738 finish_template_decl (tree parms)
2739 {
2740 if (parms)
2741 end_template_decl ();
2742 else
2743 end_specialization ();
2744 }
2745
2746 /* Finish processing a template-id (which names a type) of the form
2747 NAME < ARGS >. Return the TYPE_DECL for the type named by the
2748 template-id. If ENTERING_SCOPE is nonzero we are about to enter
2749 the scope of template-id indicated. */
2750
2751 tree
2752 finish_template_type (tree name, tree args, int entering_scope)
2753 {
2754 tree type;
2755
2756 type = lookup_template_class (name, args,
2757 NULL_TREE, NULL_TREE, entering_scope,
2758 tf_warning_or_error | tf_user);
2759 if (type == error_mark_node)
2760 return type;
2761 else if (CLASS_TYPE_P (type) && !alias_type_or_template_p (type))
2762 return TYPE_STUB_DECL (type);
2763 else
2764 return TYPE_NAME (type);
2765 }
2766
2767 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2768 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2769 BASE_CLASS, or NULL_TREE if an error occurred. The
2770 ACCESS_SPECIFIER is one of
2771 access_{default,public,protected_private}_node. For a virtual base
2772 we set TREE_TYPE. */
2773
2774 tree
2775 finish_base_specifier (tree base, tree access, bool virtual_p)
2776 {
2777 tree result;
2778
2779 if (base == error_mark_node)
2780 {
2781 error ("invalid base-class specification");
2782 result = NULL_TREE;
2783 }
2784 else if (! MAYBE_CLASS_TYPE_P (base))
2785 {
2786 error ("%qT is not a class type", base);
2787 result = NULL_TREE;
2788 }
2789 else
2790 {
2791 if (cp_type_quals (base) != 0)
2792 {
2793 /* DR 484: Can a base-specifier name a cv-qualified
2794 class type? */
2795 base = TYPE_MAIN_VARIANT (base);
2796 }
2797 result = build_tree_list (access, base);
2798 if (virtual_p)
2799 TREE_TYPE (result) = integer_type_node;
2800 }
2801
2802 return result;
2803 }
2804
2805 /* If FNS is a member function, a set of member functions, or a
2806 template-id referring to one or more member functions, return a
2807 BASELINK for FNS, incorporating the current access context.
2808 Otherwise, return FNS unchanged. */
2809
2810 tree
2811 baselink_for_fns (tree fns)
2812 {
2813 tree scope;
2814 tree cl;
2815
2816 if (BASELINK_P (fns)
2817 || error_operand_p (fns))
2818 return fns;
2819
2820 scope = ovl_scope (fns);
2821 if (!CLASS_TYPE_P (scope))
2822 return fns;
2823
2824 cl = currently_open_derived_class (scope);
2825 if (!cl)
2826 cl = scope;
2827 cl = TYPE_BINFO (cl);
2828 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2829 }
2830
2831 /* Returns true iff DECL is an automatic variable from a function outside
2832 the current one. */
2833
2834 static bool
2835 outer_automatic_var_p (tree decl)
2836 {
2837 return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2838 && DECL_FUNCTION_SCOPE_P (decl)
2839 && !TREE_STATIC (decl)
2840 && DECL_CONTEXT (decl) != current_function_decl);
2841 }
2842
2843 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2844 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2845 if non-NULL, is the type or namespace used to explicitly qualify
2846 ID_EXPRESSION. DECL is the entity to which that name has been
2847 resolved.
2848
2849 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2850 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2851 be set to true if this expression isn't permitted in a
2852 constant-expression, but it is otherwise not set by this function.
2853 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2854 constant-expression, but a non-constant expression is also
2855 permissible.
2856
2857 DONE is true if this expression is a complete postfix-expression;
2858 it is false if this expression is followed by '->', '[', '(', etc.
2859 ADDRESS_P is true iff this expression is the operand of '&'.
2860 TEMPLATE_P is true iff the qualified-id was of the form
2861 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2862 appears as a template argument.
2863
2864 If an error occurs, and it is the kind of error that might cause
2865 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2866 is the caller's responsibility to issue the message. *ERROR_MSG
2867 will be a string with static storage duration, so the caller need
2868 not "free" it.
2869
2870 Return an expression for the entity, after issuing appropriate
2871 diagnostics. This function is also responsible for transforming a
2872 reference to a non-static member into a COMPONENT_REF that makes
2873 the use of "this" explicit.
2874
2875 Upon return, *IDK will be filled in appropriately. */
2876 tree
2877 finish_id_expression (tree id_expression,
2878 tree decl,
2879 tree scope,
2880 cp_id_kind *idk,
2881 bool integral_constant_expression_p,
2882 bool allow_non_integral_constant_expression_p,
2883 bool *non_integral_constant_expression_p,
2884 bool template_p,
2885 bool done,
2886 bool address_p,
2887 bool template_arg_p,
2888 const char **error_msg,
2889 location_t location)
2890 {
2891 decl = strip_using_decl (decl);
2892
2893 /* Initialize the output parameters. */
2894 *idk = CP_ID_KIND_NONE;
2895 *error_msg = NULL;
2896
2897 if (id_expression == error_mark_node)
2898 return error_mark_node;
2899 /* If we have a template-id, then no further lookup is
2900 required. If the template-id was for a template-class, we
2901 will sometimes have a TYPE_DECL at this point. */
2902 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2903 || TREE_CODE (decl) == TYPE_DECL)
2904 ;
2905 /* Look up the name. */
2906 else
2907 {
2908 if (decl == error_mark_node)
2909 {
2910 /* Name lookup failed. */
2911 if (scope
2912 && (!TYPE_P (scope)
2913 || (!dependent_type_p (scope)
2914 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2915 && IDENTIFIER_TYPENAME_P (id_expression)
2916 && dependent_type_p (TREE_TYPE (id_expression))))))
2917 {
2918 /* If the qualifying type is non-dependent (and the name
2919 does not name a conversion operator to a dependent
2920 type), issue an error. */
2921 qualified_name_lookup_error (scope, id_expression, decl, location);
2922 return error_mark_node;
2923 }
2924 else if (!scope)
2925 {
2926 /* It may be resolved via Koenig lookup. */
2927 *idk = CP_ID_KIND_UNQUALIFIED;
2928 return id_expression;
2929 }
2930 else
2931 decl = id_expression;
2932 }
2933 /* If DECL is a variable that would be out of scope under
2934 ANSI/ISO rules, but in scope in the ARM, name lookup
2935 will succeed. Issue a diagnostic here. */
2936 else
2937 decl = check_for_out_of_scope_variable (decl);
2938
2939 /* Remember that the name was used in the definition of
2940 the current class so that we can check later to see if
2941 the meaning would have been different after the class
2942 was entirely defined. */
2943 if (!scope && decl != error_mark_node
2944 && TREE_CODE (id_expression) == IDENTIFIER_NODE)
2945 maybe_note_name_used_in_class (id_expression, decl);
2946
2947 /* Disallow uses of local variables from containing functions, except
2948 within lambda-expressions. */
2949 if (outer_automatic_var_p (decl)
2950 /* It's not a use (3.2) if we're in an unevaluated context. */
2951 && !cp_unevaluated_operand)
2952 {
2953 tree context = DECL_CONTEXT (decl);
2954 tree containing_function = current_function_decl;
2955 tree lambda_stack = NULL_TREE;
2956 tree lambda_expr = NULL_TREE;
2957 tree initializer = convert_from_reference (decl);
2958
2959 /* Mark it as used now even if the use is ill-formed. */
2960 mark_used (decl);
2961
2962 /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2963 support for an approach in which a reference to a local
2964 [constant] automatic variable in a nested class or lambda body
2965 would enter the expression as an rvalue, which would reduce
2966 the complexity of the problem"
2967
2968 FIXME update for final resolution of core issue 696. */
2969 if (decl_constant_var_p (decl))
2970 return integral_constant_value (decl);
2971
2972 /* If we are in a lambda function, we can move out until we hit
2973 1. the context,
2974 2. a non-lambda function, or
2975 3. a non-default capturing lambda function. */
2976 while (context != containing_function
2977 && LAMBDA_FUNCTION_P (containing_function))
2978 {
2979 lambda_expr = CLASSTYPE_LAMBDA_EXPR
2980 (DECL_CONTEXT (containing_function));
2981
2982 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2983 == CPLD_NONE)
2984 break;
2985
2986 lambda_stack = tree_cons (NULL_TREE,
2987 lambda_expr,
2988 lambda_stack);
2989
2990 containing_function
2991 = decl_function_context (containing_function);
2992 }
2993
2994 if (context == containing_function)
2995 {
2996 decl = add_default_capture (lambda_stack,
2997 /*id=*/DECL_NAME (decl),
2998 initializer);
2999 }
3000 else if (lambda_expr)
3001 {
3002 error ("%qD is not captured", decl);
3003 return error_mark_node;
3004 }
3005 else
3006 {
3007 error (TREE_CODE (decl) == VAR_DECL
3008 ? G_("use of %<auto%> variable from containing function")
3009 : G_("use of parameter from containing function"));
3010 error (" %q+#D declared here", decl);
3011 return error_mark_node;
3012 }
3013 }
3014
3015 /* Also disallow uses of function parameters outside the function
3016 body, except inside an unevaluated context (i.e. decltype). */
3017 if (TREE_CODE (decl) == PARM_DECL
3018 && DECL_CONTEXT (decl) == NULL_TREE
3019 && !cp_unevaluated_operand)
3020 {
3021 error ("use of parameter %qD outside function body", decl);
3022 return error_mark_node;
3023 }
3024 }
3025
3026 /* If we didn't find anything, or what we found was a type,
3027 then this wasn't really an id-expression. */
3028 if (TREE_CODE (decl) == TEMPLATE_DECL
3029 && !DECL_FUNCTION_TEMPLATE_P (decl))
3030 {
3031 *error_msg = "missing template arguments";
3032 return error_mark_node;
3033 }
3034 else if (TREE_CODE (decl) == TYPE_DECL
3035 || TREE_CODE (decl) == NAMESPACE_DECL)
3036 {
3037 *error_msg = "expected primary-expression";
3038 return error_mark_node;
3039 }
3040
3041 /* If the name resolved to a template parameter, there is no
3042 need to look it up again later. */
3043 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
3044 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3045 {
3046 tree r;
3047
3048 *idk = CP_ID_KIND_NONE;
3049 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3050 decl = TEMPLATE_PARM_DECL (decl);
3051 r = convert_from_reference (DECL_INITIAL (decl));
3052
3053 if (integral_constant_expression_p
3054 && !dependent_type_p (TREE_TYPE (decl))
3055 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
3056 {
3057 if (!allow_non_integral_constant_expression_p)
3058 error ("template parameter %qD of type %qT is not allowed in "
3059 "an integral constant expression because it is not of "
3060 "integral or enumeration type", decl, TREE_TYPE (decl));
3061 *non_integral_constant_expression_p = true;
3062 }
3063 return r;
3064 }
3065 else
3066 {
3067 bool dependent_p;
3068
3069 /* If the declaration was explicitly qualified indicate
3070 that. The semantics of `A::f(3)' are different than
3071 `f(3)' if `f' is virtual. */
3072 *idk = (scope
3073 ? CP_ID_KIND_QUALIFIED
3074 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3075 ? CP_ID_KIND_TEMPLATE_ID
3076 : CP_ID_KIND_UNQUALIFIED));
3077
3078
3079 /* [temp.dep.expr]
3080
3081 An id-expression is type-dependent if it contains an
3082 identifier that was declared with a dependent type.
3083
3084 The standard is not very specific about an id-expression that
3085 names a set of overloaded functions. What if some of them
3086 have dependent types and some of them do not? Presumably,
3087 such a name should be treated as a dependent name. */
3088 /* Assume the name is not dependent. */
3089 dependent_p = false;
3090 if (!processing_template_decl)
3091 /* No names are dependent outside a template. */
3092 ;
3093 else if (TREE_CODE (decl) == CONST_DECL)
3094 /* We don't want to treat enumerators as dependent. */
3095 ;
3096 /* A template-id where the name of the template was not resolved
3097 is definitely dependent. */
3098 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3099 && (TREE_CODE (TREE_OPERAND (decl, 0))
3100 == IDENTIFIER_NODE))
3101 dependent_p = true;
3102 /* For anything except an overloaded function, just check its
3103 type. */
3104 else if (!is_overloaded_fn (decl))
3105 dependent_p
3106 = dependent_type_p (TREE_TYPE (decl));
3107 /* For a set of overloaded functions, check each of the
3108 functions. */
3109 else
3110 {
3111 tree fns = decl;
3112
3113 if (BASELINK_P (fns))
3114 fns = BASELINK_FUNCTIONS (fns);
3115
3116 /* For a template-id, check to see if the template
3117 arguments are dependent. */
3118 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3119 {
3120 tree args = TREE_OPERAND (fns, 1);
3121 dependent_p = any_dependent_template_arguments_p (args);
3122 /* The functions are those referred to by the
3123 template-id. */
3124 fns = TREE_OPERAND (fns, 0);
3125 }
3126
3127 /* If there are no dependent template arguments, go through
3128 the overloaded functions. */
3129 while (fns && !dependent_p)
3130 {
3131 tree fn = OVL_CURRENT (fns);
3132
3133 /* Member functions of dependent classes are
3134 dependent. */
3135 if (TREE_CODE (fn) == FUNCTION_DECL
3136 && type_dependent_expression_p (fn))
3137 dependent_p = true;
3138 else if (TREE_CODE (fn) == TEMPLATE_DECL
3139 && dependent_template_p (fn))
3140 dependent_p = true;
3141
3142 fns = OVL_NEXT (fns);
3143 }
3144 }
3145
3146 /* If the name was dependent on a template parameter, we will
3147 resolve the name at instantiation time. */
3148 if (dependent_p)
3149 {
3150 /* Create a SCOPE_REF for qualified names, if the scope is
3151 dependent. */
3152 if (scope)
3153 {
3154 if (TYPE_P (scope))
3155 {
3156 if (address_p && done)
3157 decl = finish_qualified_id_expr (scope, decl,
3158 done, address_p,
3159 template_p,
3160 template_arg_p);
3161 else
3162 {
3163 tree type = NULL_TREE;
3164 if (DECL_P (decl) && !dependent_scope_p (scope))
3165 type = TREE_TYPE (decl);
3166 decl = build_qualified_name (type,
3167 scope,
3168 id_expression,
3169 template_p);
3170 }
3171 }
3172 if (TREE_TYPE (decl))
3173 decl = convert_from_reference (decl);
3174 return decl;
3175 }
3176 /* A TEMPLATE_ID already contains all the information we
3177 need. */
3178 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3179 return id_expression;
3180 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3181 /* If we found a variable, then name lookup during the
3182 instantiation will always resolve to the same VAR_DECL
3183 (or an instantiation thereof). */
3184 if (TREE_CODE (decl) == VAR_DECL
3185 || TREE_CODE (decl) == PARM_DECL)
3186 {
3187 mark_used (decl);
3188 return convert_from_reference (decl);
3189 }
3190 /* The same is true for FIELD_DECL, but we also need to
3191 make sure that the syntax is correct. */
3192 else if (TREE_CODE (decl) == FIELD_DECL)
3193 {
3194 /* Since SCOPE is NULL here, this is an unqualified name.
3195 Access checking has been performed during name lookup
3196 already. Turn off checking to avoid duplicate errors. */
3197 push_deferring_access_checks (dk_no_check);
3198 decl = finish_non_static_data_member
3199 (decl, NULL_TREE,
3200 /*qualifying_scope=*/NULL_TREE);
3201 pop_deferring_access_checks ();
3202 return decl;
3203 }
3204 return id_expression;
3205 }
3206
3207 if (TREE_CODE (decl) == NAMESPACE_DECL)
3208 {
3209 error ("use of namespace %qD as expression", decl);
3210 return error_mark_node;
3211 }
3212 else if (DECL_CLASS_TEMPLATE_P (decl))
3213 {
3214 error ("use of class template %qT as expression", decl);
3215 return error_mark_node;
3216 }
3217 else if (TREE_CODE (decl) == TREE_LIST)
3218 {
3219 /* Ambiguous reference to base members. */
3220 error ("request for member %qD is ambiguous in "
3221 "multiple inheritance lattice", id_expression);
3222 print_candidates (decl);
3223 return error_mark_node;
3224 }
3225
3226 /* Mark variable-like entities as used. Functions are similarly
3227 marked either below or after overload resolution. */
3228 if (TREE_CODE (decl) == VAR_DECL
3229 || TREE_CODE (decl) == PARM_DECL
3230 || TREE_CODE (decl) == CONST_DECL
3231 || TREE_CODE (decl) == RESULT_DECL)
3232 mark_used (decl);
3233
3234 /* Only certain kinds of names are allowed in constant
3235 expression. Template parameters have already
3236 been handled above. */
3237 if (! error_operand_p (decl)
3238 && integral_constant_expression_p
3239 && ! decl_constant_var_p (decl)
3240 && TREE_CODE (decl) != CONST_DECL
3241 && ! builtin_valid_in_constant_expr_p (decl))
3242 {
3243 if (!allow_non_integral_constant_expression_p)
3244 {
3245 error ("%qD cannot appear in a constant-expression", decl);
3246 return error_mark_node;
3247 }
3248 *non_integral_constant_expression_p = true;
3249 }
3250
3251 if (scope)
3252 {
3253 decl = (adjust_result_of_qualified_name_lookup
3254 (decl, scope, current_nonlambda_class_type()));
3255
3256 if (TREE_CODE (decl) == FUNCTION_DECL)
3257 mark_used (decl);
3258
3259 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3260 decl = finish_qualified_id_expr (scope,
3261 decl,
3262 done,
3263 address_p,
3264 template_p,
3265 template_arg_p);
3266 else
3267 {
3268 tree r = convert_from_reference (decl);
3269
3270 /* In a template, return a SCOPE_REF for most qualified-ids
3271 so that we can check access at instantiation time. But if
3272 we're looking at a member of the current instantiation, we
3273 know we have access and building up the SCOPE_REF confuses
3274 non-type template argument handling. */
3275 if (processing_template_decl && TYPE_P (scope)
3276 && !currently_open_class (scope))
3277 r = build_qualified_name (TREE_TYPE (r),
3278 scope, decl,
3279 template_p);
3280 decl = r;
3281 }
3282 }
3283 else if (TREE_CODE (decl) == FIELD_DECL)
3284 {
3285 /* Since SCOPE is NULL here, this is an unqualified name.
3286 Access checking has been performed during name lookup
3287 already. Turn off checking to avoid duplicate errors. */
3288 push_deferring_access_checks (dk_no_check);
3289 decl = finish_non_static_data_member (decl, NULL_TREE,
3290 /*qualifying_scope=*/NULL_TREE);
3291 pop_deferring_access_checks ();
3292 }
3293 else if (is_overloaded_fn (decl))
3294 {
3295 tree first_fn;
3296
3297 first_fn = get_first_fn (decl);
3298 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3299 first_fn = DECL_TEMPLATE_RESULT (first_fn);
3300
3301 if (!really_overloaded_fn (decl)
3302 && !mark_used (first_fn))
3303 return error_mark_node;
3304
3305 if (!template_arg_p
3306 && TREE_CODE (first_fn) == FUNCTION_DECL
3307 && DECL_FUNCTION_MEMBER_P (first_fn)
3308 && !shared_member_p (decl))
3309 {
3310 /* A set of member functions. */
3311 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3312 return finish_class_member_access_expr (decl, id_expression,
3313 /*template_p=*/false,
3314 tf_warning_or_error);
3315 }
3316
3317 decl = baselink_for_fns (decl);
3318 }
3319 else
3320 {
3321 if (DECL_P (decl) && DECL_NONLOCAL (decl)
3322 && DECL_CLASS_SCOPE_P (decl))
3323 {
3324 tree context = context_for_name_lookup (decl);
3325 if (context != current_class_type)
3326 {
3327 tree path = currently_open_derived_class (context);
3328 perform_or_defer_access_check (TYPE_BINFO (path),
3329 decl, decl);
3330 }
3331 }
3332
3333 decl = convert_from_reference (decl);
3334 }
3335 }
3336
3337 if (TREE_DEPRECATED (decl))
3338 warn_deprecated_use (decl, NULL_TREE);
3339
3340 return decl;
3341 }
3342
3343 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3344 use as a type-specifier. */
3345
3346 tree
3347 finish_typeof (tree expr)
3348 {
3349 tree type;
3350
3351 if (type_dependent_expression_p (expr))
3352 {
3353 type = cxx_make_type (TYPEOF_TYPE);
3354 TYPEOF_TYPE_EXPR (type) = expr;
3355 SET_TYPE_STRUCTURAL_EQUALITY (type);
3356
3357 return type;
3358 }
3359
3360 expr = mark_type_use (expr);
3361
3362 type = unlowered_expr_type (expr);
3363
3364 if (!type || type == unknown_type_node)
3365 {
3366 error ("type of %qE is unknown", expr);
3367 return error_mark_node;
3368 }
3369
3370 return type;
3371 }
3372
3373 /* Implement the __underlying_type keyword: Return the underlying
3374 type of TYPE, suitable for use as a type-specifier. */
3375
3376 tree
3377 finish_underlying_type (tree type)
3378 {
3379 tree underlying_type;
3380
3381 if (processing_template_decl)
3382 {
3383 underlying_type = cxx_make_type (UNDERLYING_TYPE);
3384 UNDERLYING_TYPE_TYPE (underlying_type) = type;
3385 SET_TYPE_STRUCTURAL_EQUALITY (underlying_type);
3386
3387 return underlying_type;
3388 }
3389
3390 complete_type (type);
3391
3392 if (TREE_CODE (type) != ENUMERAL_TYPE)
3393 {
3394 error ("%qT is not an enumeration type", type);
3395 return error_mark_node;
3396 }
3397
3398 underlying_type = ENUM_UNDERLYING_TYPE (type);
3399
3400 /* Fixup necessary in this case because ENUM_UNDERLYING_TYPE
3401 includes TYPE_MIN_VALUE and TYPE_MAX_VALUE information.
3402 See finish_enum_value_list for details. */
3403 if (!ENUM_FIXED_UNDERLYING_TYPE_P (type))
3404 underlying_type
3405 = c_common_type_for_mode (TYPE_MODE (underlying_type),
3406 TYPE_UNSIGNED (underlying_type));
3407
3408 return underlying_type;
3409 }
3410
3411 /* Implement the __direct_bases keyword: Return the direct base classes
3412 of type */
3413
3414 tree
3415 calculate_direct_bases (tree type)
3416 {
3417 VEC(tree, gc) *vector = make_tree_vector();
3418 tree bases_vec = NULL_TREE;
3419 VEC(tree, none) *base_binfos;
3420 tree binfo;
3421 unsigned i;
3422
3423 complete_type (type);
3424
3425 if (!NON_UNION_CLASS_TYPE_P (type))
3426 return make_tree_vec (0);
3427
3428 base_binfos = BINFO_BASE_BINFOS (TYPE_BINFO (type));
3429
3430 /* Virtual bases are initialized first */
3431 for (i = 0; VEC_iterate (tree, base_binfos, i, binfo); i++)
3432 {
3433 if (BINFO_VIRTUAL_P (binfo))
3434 {
3435 VEC_safe_push (tree, gc, vector, binfo);
3436 }
3437 }
3438
3439 /* Now non-virtuals */
3440 for (i = 0; VEC_iterate (tree, base_binfos, i, binfo); i++)
3441 {
3442 if (!BINFO_VIRTUAL_P (binfo))
3443 {
3444 VEC_safe_push (tree, gc, vector, binfo);
3445 }
3446 }
3447
3448
3449 bases_vec = make_tree_vec (VEC_length (tree, vector));
3450
3451 for (i = 0; i < VEC_length (tree, vector); ++i)
3452 {
3453 TREE_VEC_ELT (bases_vec, i) = BINFO_TYPE (VEC_index (tree, vector, i));
3454 }
3455 return bases_vec;
3456 }
3457
3458 /* Implement the __bases keyword: Return the base classes
3459 of type */
3460
3461 /* Find morally non-virtual base classes by walking binfo hierarchy */
3462 /* Virtual base classes are handled separately in finish_bases */
3463
3464 static tree
3465 dfs_calculate_bases_pre (tree binfo, ATTRIBUTE_UNUSED void *data_)
3466 {
3467 /* Don't walk bases of virtual bases */
3468 return BINFO_VIRTUAL_P (binfo) ? dfs_skip_bases : NULL_TREE;
3469 }
3470
3471 static tree
3472 dfs_calculate_bases_post (tree binfo, void *data_)
3473 {
3474 VEC(tree, gc) **data = (VEC(tree, gc) **) data_;
3475 if (!BINFO_VIRTUAL_P (binfo))
3476 {
3477 VEC_safe_push (tree, gc, *data, BINFO_TYPE (binfo));
3478 }
3479 return NULL_TREE;
3480 }
3481
3482 /* Calculates the morally non-virtual base classes of a class */
3483 static VEC(tree, gc) *
3484 calculate_bases_helper (tree type)
3485 {
3486 VEC(tree, gc) *vector = make_tree_vector();
3487
3488 /* Now add non-virtual base classes in order of construction */
3489 dfs_walk_all (TYPE_BINFO (type),
3490 dfs_calculate_bases_pre, dfs_calculate_bases_post, &vector);
3491 return vector;
3492 }
3493
3494 tree
3495 calculate_bases (tree type)
3496 {
3497 VEC(tree, gc) *vector = make_tree_vector();
3498 tree bases_vec = NULL_TREE;
3499 unsigned i;
3500 VEC(tree, gc) *vbases;
3501 VEC(tree, gc) *nonvbases;
3502 tree binfo;
3503
3504 complete_type (type);
3505
3506 if (!NON_UNION_CLASS_TYPE_P (type))
3507 return make_tree_vec (0);
3508
3509 /* First go through virtual base classes */
3510 for (vbases = CLASSTYPE_VBASECLASSES (type), i = 0;
3511 VEC_iterate (tree, vbases, i, binfo); i++)
3512 {
3513 VEC(tree, gc) *vbase_bases = calculate_bases_helper (BINFO_TYPE (binfo));
3514 VEC_safe_splice (tree, gc, vector, vbase_bases);
3515 release_tree_vector (vbase_bases);
3516 }
3517
3518 /* Now for the non-virtual bases */
3519 nonvbases = calculate_bases_helper (type);
3520 VEC_safe_splice (tree, gc, vector, nonvbases);
3521 release_tree_vector (nonvbases);
3522
3523 /* Last element is entire class, so don't copy */
3524 bases_vec = make_tree_vec (VEC_length (tree, vector) - 1);
3525
3526 for (i = 0; i < VEC_length (tree, vector) - 1; ++i)
3527 {
3528 TREE_VEC_ELT (bases_vec, i) = VEC_index (tree, vector, i);
3529 }
3530 release_tree_vector (vector);
3531 return bases_vec;
3532 }
3533
3534 tree
3535 finish_bases (tree type, bool direct)
3536 {
3537 tree bases = NULL_TREE;
3538
3539 if (!processing_template_decl)
3540 {
3541 /* Parameter packs can only be used in templates */
3542 error ("Parameter pack __bases only valid in template declaration");
3543 return error_mark_node;
3544 }
3545
3546 bases = cxx_make_type (BASES);
3547 BASES_TYPE (bases) = type;
3548 BASES_DIRECT (bases) = direct;
3549 SET_TYPE_STRUCTURAL_EQUALITY (bases);
3550
3551 return bases;
3552 }
3553
3554 /* Perform C++-specific checks for __builtin_offsetof before calling
3555 fold_offsetof. */
3556
3557 tree
3558 finish_offsetof (tree expr)
3559 {
3560 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3561 {
3562 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3563 TREE_OPERAND (expr, 2));
3564 return error_mark_node;
3565 }
3566 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3567 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3568 || TREE_TYPE (expr) == unknown_type_node)
3569 {
3570 if (TREE_CODE (expr) == COMPONENT_REF
3571 || TREE_CODE (expr) == COMPOUND_EXPR)
3572 expr = TREE_OPERAND (expr, 1);
3573 error ("cannot apply %<offsetof%> to member function %qD", expr);
3574 return error_mark_node;
3575 }
3576 if (REFERENCE_REF_P (expr))
3577 expr = TREE_OPERAND (expr, 0);
3578 if (TREE_CODE (expr) == COMPONENT_REF)
3579 {
3580 tree object = TREE_OPERAND (expr, 0);
3581 if (!complete_type_or_else (TREE_TYPE (object), object))
3582 return error_mark_node;
3583 }
3584 return fold_offsetof (expr);
3585 }
3586
3587 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3588 function is broken out from the above for the benefit of the tree-ssa
3589 project. */
3590
3591 void
3592 simplify_aggr_init_expr (tree *tp)
3593 {
3594 tree aggr_init_expr = *tp;
3595
3596 /* Form an appropriate CALL_EXPR. */
3597 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3598 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3599 tree type = TREE_TYPE (slot);
3600
3601 tree call_expr;
3602 enum style_t { ctor, arg, pcc } style;
3603
3604 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3605 style = ctor;
3606 #ifdef PCC_STATIC_STRUCT_RETURN
3607 else if (1)
3608 style = pcc;
3609 #endif
3610 else
3611 {
3612 gcc_assert (TREE_ADDRESSABLE (type));
3613 style = arg;
3614 }
3615
3616 call_expr = build_call_array_loc (input_location,
3617 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3618 fn,
3619 aggr_init_expr_nargs (aggr_init_expr),
3620 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3621 TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3622
3623 if (style == ctor)
3624 {
3625 /* Replace the first argument to the ctor with the address of the
3626 slot. */
3627 cxx_mark_addressable (slot);
3628 CALL_EXPR_ARG (call_expr, 0) =
3629 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3630 }
3631 else if (style == arg)
3632 {
3633 /* Just mark it addressable here, and leave the rest to
3634 expand_call{,_inline}. */
3635 cxx_mark_addressable (slot);
3636 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3637 call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3638 }
3639 else if (style == pcc)
3640 {
3641 /* If we're using the non-reentrant PCC calling convention, then we
3642 need to copy the returned value out of the static buffer into the
3643 SLOT. */
3644 push_deferring_access_checks (dk_no_check);
3645 call_expr = build_aggr_init (slot, call_expr,
3646 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3647 tf_warning_or_error);
3648 pop_deferring_access_checks ();
3649 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3650 }
3651
3652 if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3653 {
3654 tree init = build_zero_init (type, NULL_TREE,
3655 /*static_storage_p=*/false);
3656 init = build2 (INIT_EXPR, void_type_node, slot, init);
3657 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3658 init, call_expr);
3659 }
3660
3661 *tp = call_expr;
3662 }
3663
3664 /* Emit all thunks to FN that should be emitted when FN is emitted. */
3665
3666 void
3667 emit_associated_thunks (tree fn)
3668 {
3669 /* When we use vcall offsets, we emit thunks with the virtual
3670 functions to which they thunk. The whole point of vcall offsets
3671 is so that you can know statically the entire set of thunks that
3672 will ever be needed for a given virtual function, thereby
3673 enabling you to output all the thunks with the function itself. */
3674 if (DECL_VIRTUAL_P (fn)
3675 /* Do not emit thunks for extern template instantiations. */
3676 && ! DECL_REALLY_EXTERN (fn))
3677 {
3678 tree thunk;
3679
3680 for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3681 {
3682 if (!THUNK_ALIAS (thunk))
3683 {
3684 use_thunk (thunk, /*emit_p=*/1);
3685 if (DECL_RESULT_THUNK_P (thunk))
3686 {
3687 tree probe;
3688
3689 for (probe = DECL_THUNKS (thunk);
3690 probe; probe = DECL_CHAIN (probe))
3691 use_thunk (probe, /*emit_p=*/1);
3692 }
3693 }
3694 else
3695 gcc_assert (!DECL_THUNKS (thunk));
3696 }
3697 }
3698 }
3699
3700 /* Returns true iff FUN is an instantiation of a constexpr function
3701 template. */
3702
3703 static inline bool
3704 is_instantiation_of_constexpr (tree fun)
3705 {
3706 return (DECL_TEMPLOID_INSTANTIATION (fun)
3707 && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
3708 (DECL_TI_TEMPLATE (fun))));
3709 }
3710
3711 /* Generate RTL for FN. */
3712
3713 bool
3714 expand_or_defer_fn_1 (tree fn)
3715 {
3716 /* When the parser calls us after finishing the body of a template
3717 function, we don't really want to expand the body. */
3718 if (processing_template_decl)
3719 {
3720 /* Normally, collection only occurs in rest_of_compilation. So,
3721 if we don't collect here, we never collect junk generated
3722 during the processing of templates until we hit a
3723 non-template function. It's not safe to do this inside a
3724 nested class, though, as the parser may have local state that
3725 is not a GC root. */
3726 if (!function_depth)
3727 ggc_collect ();
3728 return false;
3729 }
3730
3731 gcc_assert (DECL_SAVED_TREE (fn));
3732
3733 /* If this is a constructor or destructor body, we have to clone
3734 it. */
3735 if (maybe_clone_body (fn))
3736 {
3737 /* We don't want to process FN again, so pretend we've written
3738 it out, even though we haven't. */
3739 TREE_ASM_WRITTEN (fn) = 1;
3740 /* If this is an instantiation of a constexpr function, keep
3741 DECL_SAVED_TREE for explain_invalid_constexpr_fn. */
3742 if (!is_instantiation_of_constexpr (fn))
3743 DECL_SAVED_TREE (fn) = NULL_TREE;
3744 return false;
3745 }
3746
3747 /* We make a decision about linkage for these functions at the end
3748 of the compilation. Until that point, we do not want the back
3749 end to output them -- but we do want it to see the bodies of
3750 these functions so that it can inline them as appropriate. */
3751 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3752 {
3753 if (DECL_INTERFACE_KNOWN (fn))
3754 /* We've already made a decision as to how this function will
3755 be handled. */;
3756 else if (!at_eof)
3757 {
3758 DECL_EXTERNAL (fn) = 1;
3759 DECL_NOT_REALLY_EXTERN (fn) = 1;
3760 note_vague_linkage_fn (fn);
3761 /* A non-template inline function with external linkage will
3762 always be COMDAT. As we must eventually determine the
3763 linkage of all functions, and as that causes writes to
3764 the data mapped in from the PCH file, it's advantageous
3765 to mark the functions at this point. */
3766 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3767 {
3768 /* This function must have external linkage, as
3769 otherwise DECL_INTERFACE_KNOWN would have been
3770 set. */
3771 gcc_assert (TREE_PUBLIC (fn));
3772 comdat_linkage (fn);
3773 DECL_INTERFACE_KNOWN (fn) = 1;
3774 }
3775 }
3776 else
3777 import_export_decl (fn);
3778
3779 /* If the user wants us to keep all inline functions, then mark
3780 this function as needed so that finish_file will make sure to
3781 output it later. Similarly, all dllexport'd functions must
3782 be emitted; there may be callers in other DLLs. */
3783 if ((flag_keep_inline_functions
3784 && DECL_DECLARED_INLINE_P (fn)
3785 && !DECL_REALLY_EXTERN (fn))
3786 || (flag_keep_inline_dllexport
3787 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn))))
3788 {
3789 mark_needed (fn);
3790 DECL_EXTERNAL (fn) = 0;
3791 }
3792 }
3793
3794 /* There's no reason to do any of the work here if we're only doing
3795 semantic analysis; this code just generates RTL. */
3796 if (flag_syntax_only)
3797 return false;
3798
3799 return true;
3800 }
3801
3802 void
3803 expand_or_defer_fn (tree fn)
3804 {
3805 if (expand_or_defer_fn_1 (fn))
3806 {
3807 function_depth++;
3808
3809 /* Expand or defer, at the whim of the compilation unit manager. */
3810 cgraph_finalize_function (fn, function_depth > 1);
3811 emit_associated_thunks (fn);
3812
3813 function_depth--;
3814 }
3815 }
3816
3817 struct nrv_data
3818 {
3819 tree var;
3820 tree result;
3821 htab_t visited;
3822 };
3823
3824 /* Helper function for walk_tree, used by finalize_nrv below. */
3825
3826 static tree
3827 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3828 {
3829 struct nrv_data *dp = (struct nrv_data *)data;
3830 void **slot;
3831
3832 /* No need to walk into types. There wouldn't be any need to walk into
3833 non-statements, except that we have to consider STMT_EXPRs. */
3834 if (TYPE_P (*tp))
3835 *walk_subtrees = 0;
3836 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3837 but differs from using NULL_TREE in that it indicates that we care
3838 about the value of the RESULT_DECL. */
3839 else if (TREE_CODE (*tp) == RETURN_EXPR)
3840 TREE_OPERAND (*tp, 0) = dp->result;
3841 /* Change all cleanups for the NRV to only run when an exception is
3842 thrown. */
3843 else if (TREE_CODE (*tp) == CLEANUP_STMT
3844 && CLEANUP_DECL (*tp) == dp->var)
3845 CLEANUP_EH_ONLY (*tp) = 1;
3846 /* Replace the DECL_EXPR for the NRV with an initialization of the
3847 RESULT_DECL, if needed. */
3848 else if (TREE_CODE (*tp) == DECL_EXPR
3849 && DECL_EXPR_DECL (*tp) == dp->var)
3850 {
3851 tree init;
3852 if (DECL_INITIAL (dp->var)
3853 && DECL_INITIAL (dp->var) != error_mark_node)
3854 init = build2 (INIT_EXPR, void_type_node, dp->result,
3855 DECL_INITIAL (dp->var));
3856 else
3857 init = build_empty_stmt (EXPR_LOCATION (*tp));
3858 DECL_INITIAL (dp->var) = NULL_TREE;
3859 SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3860 *tp = init;
3861 }
3862 /* And replace all uses of the NRV with the RESULT_DECL. */
3863 else if (*tp == dp->var)
3864 *tp = dp->result;
3865
3866 /* Avoid walking into the same tree more than once. Unfortunately, we
3867 can't just use walk_tree_without duplicates because it would only call
3868 us for the first occurrence of dp->var in the function body. */
3869 slot = htab_find_slot (dp->visited, *tp, INSERT);
3870 if (*slot)
3871 *walk_subtrees = 0;
3872 else
3873 *slot = *tp;
3874
3875 /* Keep iterating. */
3876 return NULL_TREE;
3877 }
3878
3879 /* Called from finish_function to implement the named return value
3880 optimization by overriding all the RETURN_EXPRs and pertinent
3881 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3882 RESULT_DECL for the function. */
3883
3884 void
3885 finalize_nrv (tree *tp, tree var, tree result)
3886 {
3887 struct nrv_data data;
3888
3889 /* Copy name from VAR to RESULT. */
3890 DECL_NAME (result) = DECL_NAME (var);
3891 /* Don't forget that we take its address. */
3892 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3893 /* Finally set DECL_VALUE_EXPR to avoid assigning
3894 a stack slot at -O0 for the original var and debug info
3895 uses RESULT location for VAR. */
3896 SET_DECL_VALUE_EXPR (var, result);
3897 DECL_HAS_VALUE_EXPR_P (var) = 1;
3898
3899 data.var = var;
3900 data.result = result;
3901 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3902 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3903 htab_delete (data.visited);
3904 }
3905 \f
3906 /* Create CP_OMP_CLAUSE_INFO for clause C. Returns true if it is invalid. */
3907
3908 bool
3909 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3910 bool need_copy_ctor, bool need_copy_assignment)
3911 {
3912 int save_errorcount = errorcount;
3913 tree info, t;
3914
3915 /* Always allocate 3 elements for simplicity. These are the
3916 function decls for the ctor, dtor, and assignment op.
3917 This layout is known to the three lang hooks,
3918 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3919 and cxx_omp_clause_assign_op. */
3920 info = make_tree_vec (3);
3921 CP_OMP_CLAUSE_INFO (c) = info;
3922
3923 if (need_default_ctor || need_copy_ctor)
3924 {
3925 if (need_default_ctor)
3926 t = get_default_ctor (type);
3927 else
3928 t = get_copy_ctor (type, tf_warning_or_error);
3929
3930 if (t && !trivial_fn_p (t))
3931 TREE_VEC_ELT (info, 0) = t;
3932 }
3933
3934 if ((need_default_ctor || need_copy_ctor)
3935 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3936 TREE_VEC_ELT (info, 1) = get_dtor (type, tf_warning_or_error);
3937
3938 if (need_copy_assignment)
3939 {
3940 t = get_copy_assign (type);
3941
3942 if (t && !trivial_fn_p (t))
3943 TREE_VEC_ELT (info, 2) = t;
3944 }
3945
3946 return errorcount != save_errorcount;
3947 }
3948
3949 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3950 Remove any elements from the list that are invalid. */
3951
3952 tree
3953 finish_omp_clauses (tree clauses)
3954 {
3955 bitmap_head generic_head, firstprivate_head, lastprivate_head;
3956 tree c, t, *pc = &clauses;
3957 const char *name;
3958
3959 bitmap_obstack_initialize (NULL);
3960 bitmap_initialize (&generic_head, &bitmap_default_obstack);
3961 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3962 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3963
3964 for (pc = &clauses, c = clauses; c ; c = *pc)
3965 {
3966 bool remove = false;
3967
3968 switch (OMP_CLAUSE_CODE (c))
3969 {
3970 case OMP_CLAUSE_SHARED:
3971 name = "shared";
3972 goto check_dup_generic;
3973 case OMP_CLAUSE_PRIVATE:
3974 name = "private";
3975 goto check_dup_generic;
3976 case OMP_CLAUSE_REDUCTION:
3977 name = "reduction";
3978 goto check_dup_generic;
3979 case OMP_CLAUSE_COPYPRIVATE:
3980 name = "copyprivate";
3981 goto check_dup_generic;
3982 case OMP_CLAUSE_COPYIN:
3983 name = "copyin";
3984 goto check_dup_generic;
3985 check_dup_generic:
3986 t = OMP_CLAUSE_DECL (c);
3987 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3988 {
3989 if (processing_template_decl)
3990 break;
3991 if (DECL_P (t))
3992 error ("%qD is not a variable in clause %qs", t, name);
3993 else
3994 error ("%qE is not a variable in clause %qs", t, name);
3995 remove = true;
3996 }
3997 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3998 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3999 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
4000 {
4001 error ("%qD appears more than once in data clauses", t);
4002 remove = true;
4003 }
4004 else
4005 bitmap_set_bit (&generic_head, DECL_UID (t));
4006 break;
4007
4008 case OMP_CLAUSE_FIRSTPRIVATE:
4009 t = OMP_CLAUSE_DECL (c);
4010 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4011 {
4012 if (processing_template_decl)
4013 break;
4014 if (DECL_P (t))
4015 error ("%qD is not a variable in clause %<firstprivate%>", t);
4016 else
4017 error ("%qE is not a variable in clause %<firstprivate%>", t);
4018 remove = true;
4019 }
4020 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4021 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
4022 {
4023 error ("%qD appears more than once in data clauses", t);
4024 remove = true;
4025 }
4026 else
4027 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
4028 break;
4029
4030 case OMP_CLAUSE_LASTPRIVATE:
4031 t = OMP_CLAUSE_DECL (c);
4032 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4033 {
4034 if (processing_template_decl)
4035 break;
4036 if (DECL_P (t))
4037 error ("%qD is not a variable in clause %<lastprivate%>", t);
4038 else
4039 error ("%qE is not a variable in clause %<lastprivate%>", t);
4040 remove = true;
4041 }
4042 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4043 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
4044 {
4045 error ("%qD appears more than once in data clauses", t);
4046 remove = true;
4047 }
4048 else
4049 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
4050 break;
4051
4052 case OMP_CLAUSE_IF:
4053 t = OMP_CLAUSE_IF_EXPR (c);
4054 t = maybe_convert_cond (t);
4055 if (t == error_mark_node)
4056 remove = true;
4057 else if (!processing_template_decl)
4058 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4059 OMP_CLAUSE_IF_EXPR (c) = t;
4060 break;
4061
4062 case OMP_CLAUSE_FINAL:
4063 t = OMP_CLAUSE_FINAL_EXPR (c);
4064 t = maybe_convert_cond (t);
4065 if (t == error_mark_node)
4066 remove = true;
4067 else if (!processing_template_decl)
4068 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4069 OMP_CLAUSE_FINAL_EXPR (c) = t;
4070 break;
4071
4072 case OMP_CLAUSE_NUM_THREADS:
4073 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
4074 if (t == error_mark_node)
4075 remove = true;
4076 else if (!type_dependent_expression_p (t)
4077 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
4078 {
4079 error ("num_threads expression must be integral");
4080 remove = true;
4081 }
4082 else
4083 {
4084 t = mark_rvalue_use (t);
4085 if (!processing_template_decl)
4086 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4087 OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
4088 }
4089 break;
4090
4091 case OMP_CLAUSE_SCHEDULE:
4092 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
4093 if (t == NULL)
4094 ;
4095 else if (t == error_mark_node)
4096 remove = true;
4097 else if (!type_dependent_expression_p (t)
4098 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
4099 {
4100 error ("schedule chunk size expression must be integral");
4101 remove = true;
4102 }
4103 else
4104 {
4105 t = mark_rvalue_use (t);
4106 if (!processing_template_decl)
4107 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4108 OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
4109 }
4110 break;
4111
4112 case OMP_CLAUSE_NOWAIT:
4113 case OMP_CLAUSE_ORDERED:
4114 case OMP_CLAUSE_DEFAULT:
4115 case OMP_CLAUSE_UNTIED:
4116 case OMP_CLAUSE_COLLAPSE:
4117 case OMP_CLAUSE_MERGEABLE:
4118 break;
4119
4120 default:
4121 gcc_unreachable ();
4122 }
4123
4124 if (remove)
4125 *pc = OMP_CLAUSE_CHAIN (c);
4126 else
4127 pc = &OMP_CLAUSE_CHAIN (c);
4128 }
4129
4130 for (pc = &clauses, c = clauses; c ; c = *pc)
4131 {
4132 enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
4133 bool remove = false;
4134 bool need_complete_non_reference = false;
4135 bool need_default_ctor = false;
4136 bool need_copy_ctor = false;
4137 bool need_copy_assignment = false;
4138 bool need_implicitly_determined = false;
4139 tree type, inner_type;
4140
4141 switch (c_kind)
4142 {
4143 case OMP_CLAUSE_SHARED:
4144 name = "shared";
4145 need_implicitly_determined = true;
4146 break;
4147 case OMP_CLAUSE_PRIVATE:
4148 name = "private";
4149 need_complete_non_reference = true;
4150 need_default_ctor = true;
4151 need_implicitly_determined = true;
4152 break;
4153 case OMP_CLAUSE_FIRSTPRIVATE:
4154 name = "firstprivate";
4155 need_complete_non_reference = true;
4156 need_copy_ctor = true;
4157 need_implicitly_determined = true;
4158 break;
4159 case OMP_CLAUSE_LASTPRIVATE:
4160 name = "lastprivate";
4161 need_complete_non_reference = true;
4162 need_copy_assignment = true;
4163 need_implicitly_determined = true;
4164 break;
4165 case OMP_CLAUSE_REDUCTION:
4166 name = "reduction";
4167 need_implicitly_determined = true;
4168 break;
4169 case OMP_CLAUSE_COPYPRIVATE:
4170 name = "copyprivate";
4171 need_copy_assignment = true;
4172 break;
4173 case OMP_CLAUSE_COPYIN:
4174 name = "copyin";
4175 need_copy_assignment = true;
4176 break;
4177 default:
4178 pc = &OMP_CLAUSE_CHAIN (c);
4179 continue;
4180 }
4181
4182 t = OMP_CLAUSE_DECL (c);
4183 if (processing_template_decl
4184 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4185 {
4186 pc = &OMP_CLAUSE_CHAIN (c);
4187 continue;
4188 }
4189
4190 switch (c_kind)
4191 {
4192 case OMP_CLAUSE_LASTPRIVATE:
4193 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
4194 need_default_ctor = true;
4195 break;
4196
4197 case OMP_CLAUSE_REDUCTION:
4198 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
4199 || POINTER_TYPE_P (TREE_TYPE (t)))
4200 {
4201 error ("%qE has invalid type for %<reduction%>", t);
4202 remove = true;
4203 }
4204 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
4205 {
4206 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
4207 switch (r_code)
4208 {
4209 case PLUS_EXPR:
4210 case MULT_EXPR:
4211 case MINUS_EXPR:
4212 case MIN_EXPR:
4213 case MAX_EXPR:
4214 break;
4215 default:
4216 error ("%qE has invalid type for %<reduction(%s)%>",
4217 t, operator_name_info[r_code].name);
4218 remove = true;
4219 }
4220 }
4221 break;
4222
4223 case OMP_CLAUSE_COPYIN:
4224 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
4225 {
4226 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
4227 remove = true;
4228 }
4229 break;
4230
4231 default:
4232 break;
4233 }
4234
4235 if (need_complete_non_reference || need_copy_assignment)
4236 {
4237 t = require_complete_type (t);
4238 if (t == error_mark_node)
4239 remove = true;
4240 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
4241 && need_complete_non_reference)
4242 {
4243 error ("%qE has reference type for %qs", t, name);
4244 remove = true;
4245 }
4246 }
4247 if (need_implicitly_determined)
4248 {
4249 const char *share_name = NULL;
4250
4251 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
4252 share_name = "threadprivate";
4253 else switch (cxx_omp_predetermined_sharing (t))
4254 {
4255 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
4256 break;
4257 case OMP_CLAUSE_DEFAULT_SHARED:
4258 /* const vars may be specified in firstprivate clause. */
4259 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
4260 && cxx_omp_const_qual_no_mutable (t))
4261 break;
4262 share_name = "shared";
4263 break;
4264 case OMP_CLAUSE_DEFAULT_PRIVATE:
4265 share_name = "private";
4266 break;
4267 default:
4268 gcc_unreachable ();
4269 }
4270 if (share_name)
4271 {
4272 error ("%qE is predetermined %qs for %qs",
4273 t, share_name, name);
4274 remove = true;
4275 }
4276 }
4277
4278 /* We're interested in the base element, not arrays. */
4279 inner_type = type = TREE_TYPE (t);
4280 while (TREE_CODE (inner_type) == ARRAY_TYPE)
4281 inner_type = TREE_TYPE (inner_type);
4282
4283 /* Check for special function availability by building a call to one.
4284 Save the results, because later we won't be in the right context
4285 for making these queries. */
4286 if (CLASS_TYPE_P (inner_type)
4287 && COMPLETE_TYPE_P (inner_type)
4288 && (need_default_ctor || need_copy_ctor || need_copy_assignment)
4289 && !type_dependent_expression_p (t)
4290 && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
4291 need_copy_ctor, need_copy_assignment))
4292 remove = true;
4293
4294 if (remove)
4295 *pc = OMP_CLAUSE_CHAIN (c);
4296 else
4297 pc = &OMP_CLAUSE_CHAIN (c);
4298 }
4299
4300 bitmap_obstack_release (NULL);
4301 return clauses;
4302 }
4303
4304 /* For all variables in the tree_list VARS, mark them as thread local. */
4305
4306 void
4307 finish_omp_threadprivate (tree vars)
4308 {
4309 tree t;
4310
4311 /* Mark every variable in VARS to be assigned thread local storage. */
4312 for (t = vars; t; t = TREE_CHAIN (t))
4313 {
4314 tree v = TREE_PURPOSE (t);
4315
4316 if (error_operand_p (v))
4317 ;
4318 else if (TREE_CODE (v) != VAR_DECL)
4319 error ("%<threadprivate%> %qD is not file, namespace "
4320 "or block scope variable", v);
4321 /* If V had already been marked threadprivate, it doesn't matter
4322 whether it had been used prior to this point. */
4323 else if (TREE_USED (v)
4324 && (DECL_LANG_SPECIFIC (v) == NULL
4325 || !CP_DECL_THREADPRIVATE_P (v)))
4326 error ("%qE declared %<threadprivate%> after first use", v);
4327 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
4328 error ("automatic variable %qE cannot be %<threadprivate%>", v);
4329 else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
4330 error ("%<threadprivate%> %qE has incomplete type", v);
4331 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
4332 && CP_DECL_CONTEXT (v) != current_class_type)
4333 error ("%<threadprivate%> %qE directive not "
4334 "in %qT definition", v, CP_DECL_CONTEXT (v));
4335 else
4336 {
4337 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
4338 if (DECL_LANG_SPECIFIC (v) == NULL)
4339 {
4340 retrofit_lang_decl (v);
4341
4342 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4343 after the allocation of the lang_decl structure. */
4344 if (DECL_DISCRIMINATOR_P (v))
4345 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
4346 }
4347
4348 if (! DECL_THREAD_LOCAL_P (v))
4349 {
4350 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4351 /* If rtl has been already set for this var, call
4352 make_decl_rtl once again, so that encode_section_info
4353 has a chance to look at the new decl flags. */
4354 if (DECL_RTL_SET_P (v))
4355 make_decl_rtl (v);
4356 }
4357 CP_DECL_THREADPRIVATE_P (v) = 1;
4358 }
4359 }
4360 }
4361
4362 /* Build an OpenMP structured block. */
4363
4364 tree
4365 begin_omp_structured_block (void)
4366 {
4367 return do_pushlevel (sk_omp);
4368 }
4369
4370 tree
4371 finish_omp_structured_block (tree block)
4372 {
4373 return do_poplevel (block);
4374 }
4375
4376 /* Similarly, except force the retention of the BLOCK. */
4377
4378 tree
4379 begin_omp_parallel (void)
4380 {
4381 keep_next_level (true);
4382 return begin_omp_structured_block ();
4383 }
4384
4385 tree
4386 finish_omp_parallel (tree clauses, tree body)
4387 {
4388 tree stmt;
4389
4390 body = finish_omp_structured_block (body);
4391
4392 stmt = make_node (OMP_PARALLEL);
4393 TREE_TYPE (stmt) = void_type_node;
4394 OMP_PARALLEL_CLAUSES (stmt) = clauses;
4395 OMP_PARALLEL_BODY (stmt) = body;
4396
4397 return add_stmt (stmt);
4398 }
4399
4400 tree
4401 begin_omp_task (void)
4402 {
4403 keep_next_level (true);
4404 return begin_omp_structured_block ();
4405 }
4406
4407 tree
4408 finish_omp_task (tree clauses, tree body)
4409 {
4410 tree stmt;
4411
4412 body = finish_omp_structured_block (body);
4413
4414 stmt = make_node (OMP_TASK);
4415 TREE_TYPE (stmt) = void_type_node;
4416 OMP_TASK_CLAUSES (stmt) = clauses;
4417 OMP_TASK_BODY (stmt) = body;
4418
4419 return add_stmt (stmt);
4420 }
4421
4422 /* Helper function for finish_omp_for. Convert Ith random access iterator
4423 into integral iterator. Return FALSE if successful. */
4424
4425 static bool
4426 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4427 tree condv, tree incrv, tree *body,
4428 tree *pre_body, tree clauses)
4429 {
4430 tree diff, iter_init, iter_incr = NULL, last;
4431 tree incr_var = NULL, orig_pre_body, orig_body, c;
4432 tree decl = TREE_VEC_ELT (declv, i);
4433 tree init = TREE_VEC_ELT (initv, i);
4434 tree cond = TREE_VEC_ELT (condv, i);
4435 tree incr = TREE_VEC_ELT (incrv, i);
4436 tree iter = decl;
4437 location_t elocus = locus;
4438
4439 if (init && EXPR_HAS_LOCATION (init))
4440 elocus = EXPR_LOCATION (init);
4441
4442 switch (TREE_CODE (cond))
4443 {
4444 case GT_EXPR:
4445 case GE_EXPR:
4446 case LT_EXPR:
4447 case LE_EXPR:
4448 if (TREE_OPERAND (cond, 1) == iter)
4449 cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4450 TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4451 if (TREE_OPERAND (cond, 0) != iter)
4452 cond = error_mark_node;
4453 else
4454 {
4455 tree tem = build_x_binary_op (EXPR_LOCATION (cond),
4456 TREE_CODE (cond),
4457 iter, ERROR_MARK,
4458 TREE_OPERAND (cond, 1), ERROR_MARK,
4459 NULL, tf_warning_or_error);
4460 if (error_operand_p (tem))
4461 return true;
4462 }
4463 break;
4464 default:
4465 cond = error_mark_node;
4466 break;
4467 }
4468 if (cond == error_mark_node)
4469 {
4470 error_at (elocus, "invalid controlling predicate");
4471 return true;
4472 }
4473 diff = build_x_binary_op (elocus, MINUS_EXPR, TREE_OPERAND (cond, 1),
4474 ERROR_MARK, iter, ERROR_MARK, NULL,
4475 tf_warning_or_error);
4476 if (error_operand_p (diff))
4477 return true;
4478 if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4479 {
4480 error_at (elocus, "difference between %qE and %qD does not have integer type",
4481 TREE_OPERAND (cond, 1), iter);
4482 return true;
4483 }
4484
4485 switch (TREE_CODE (incr))
4486 {
4487 case PREINCREMENT_EXPR:
4488 case PREDECREMENT_EXPR:
4489 case POSTINCREMENT_EXPR:
4490 case POSTDECREMENT_EXPR:
4491 if (TREE_OPERAND (incr, 0) != iter)
4492 {
4493 incr = error_mark_node;
4494 break;
4495 }
4496 iter_incr = build_x_unary_op (EXPR_LOCATION (incr),
4497 TREE_CODE (incr), iter,
4498 tf_warning_or_error);
4499 if (error_operand_p (iter_incr))
4500 return true;
4501 else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4502 || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4503 incr = integer_one_node;
4504 else
4505 incr = integer_minus_one_node;
4506 break;
4507 case MODIFY_EXPR:
4508 if (TREE_OPERAND (incr, 0) != iter)
4509 incr = error_mark_node;
4510 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4511 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4512 {
4513 tree rhs = TREE_OPERAND (incr, 1);
4514 if (TREE_OPERAND (rhs, 0) == iter)
4515 {
4516 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4517 != INTEGER_TYPE)
4518 incr = error_mark_node;
4519 else
4520 {
4521 iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
4522 iter, TREE_CODE (rhs),
4523 TREE_OPERAND (rhs, 1),
4524 tf_warning_or_error);
4525 if (error_operand_p (iter_incr))
4526 return true;
4527 incr = TREE_OPERAND (rhs, 1);
4528 incr = cp_convert (TREE_TYPE (diff), incr,
4529 tf_warning_or_error);
4530 if (TREE_CODE (rhs) == MINUS_EXPR)
4531 {
4532 incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4533 incr = fold_if_not_in_template (incr);
4534 }
4535 if (TREE_CODE (incr) != INTEGER_CST
4536 && (TREE_CODE (incr) != NOP_EXPR
4537 || (TREE_CODE (TREE_OPERAND (incr, 0))
4538 != INTEGER_CST)))
4539 iter_incr = NULL;
4540 }
4541 }
4542 else if (TREE_OPERAND (rhs, 1) == iter)
4543 {
4544 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4545 || TREE_CODE (rhs) != PLUS_EXPR)
4546 incr = error_mark_node;
4547 else
4548 {
4549 iter_incr = build_x_binary_op (EXPR_LOCATION (rhs),
4550 PLUS_EXPR,
4551 TREE_OPERAND (rhs, 0),
4552 ERROR_MARK, iter,
4553 ERROR_MARK, NULL,
4554 tf_warning_or_error);
4555 if (error_operand_p (iter_incr))
4556 return true;
4557 iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
4558 iter, NOP_EXPR,
4559 iter_incr,
4560 tf_warning_or_error);
4561 if (error_operand_p (iter_incr))
4562 return true;
4563 incr = TREE_OPERAND (rhs, 0);
4564 iter_incr = NULL;
4565 }
4566 }
4567 else
4568 incr = error_mark_node;
4569 }
4570 else
4571 incr = error_mark_node;
4572 break;
4573 default:
4574 incr = error_mark_node;
4575 break;
4576 }
4577
4578 if (incr == error_mark_node)
4579 {
4580 error_at (elocus, "invalid increment expression");
4581 return true;
4582 }
4583
4584 incr = cp_convert (TREE_TYPE (diff), incr, tf_warning_or_error);
4585 for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4586 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4587 && OMP_CLAUSE_DECL (c) == iter)
4588 break;
4589
4590 decl = create_temporary_var (TREE_TYPE (diff));
4591 pushdecl (decl);
4592 add_decl_expr (decl);
4593 last = create_temporary_var (TREE_TYPE (diff));
4594 pushdecl (last);
4595 add_decl_expr (last);
4596 if (c && iter_incr == NULL)
4597 {
4598 incr_var = create_temporary_var (TREE_TYPE (diff));
4599 pushdecl (incr_var);
4600 add_decl_expr (incr_var);
4601 }
4602 gcc_assert (stmts_are_full_exprs_p ());
4603
4604 orig_pre_body = *pre_body;
4605 *pre_body = push_stmt_list ();
4606 if (orig_pre_body)
4607 add_stmt (orig_pre_body);
4608 if (init != NULL)
4609 finish_expr_stmt (build_x_modify_expr (elocus,
4610 iter, NOP_EXPR, init,
4611 tf_warning_or_error));
4612 init = build_int_cst (TREE_TYPE (diff), 0);
4613 if (c && iter_incr == NULL)
4614 {
4615 finish_expr_stmt (build_x_modify_expr (elocus,
4616 incr_var, NOP_EXPR,
4617 incr, tf_warning_or_error));
4618 incr = incr_var;
4619 iter_incr = build_x_modify_expr (elocus,
4620 iter, PLUS_EXPR, incr,
4621 tf_warning_or_error);
4622 }
4623 finish_expr_stmt (build_x_modify_expr (elocus,
4624 last, NOP_EXPR, init,
4625 tf_warning_or_error));
4626 *pre_body = pop_stmt_list (*pre_body);
4627
4628 cond = cp_build_binary_op (elocus,
4629 TREE_CODE (cond), decl, diff,
4630 tf_warning_or_error);
4631 incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4632 elocus, incr, NULL_TREE);
4633
4634 orig_body = *body;
4635 *body = push_stmt_list ();
4636 iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4637 iter_init = build_x_modify_expr (elocus,
4638 iter, PLUS_EXPR, iter_init,
4639 tf_warning_or_error);
4640 iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4641 finish_expr_stmt (iter_init);
4642 finish_expr_stmt (build_x_modify_expr (elocus,
4643 last, NOP_EXPR, decl,
4644 tf_warning_or_error));
4645 add_stmt (orig_body);
4646 *body = pop_stmt_list (*body);
4647
4648 if (c)
4649 {
4650 OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4651 finish_expr_stmt (iter_incr);
4652 OMP_CLAUSE_LASTPRIVATE_STMT (c)
4653 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4654 }
4655
4656 TREE_VEC_ELT (declv, i) = decl;
4657 TREE_VEC_ELT (initv, i) = init;
4658 TREE_VEC_ELT (condv, i) = cond;
4659 TREE_VEC_ELT (incrv, i) = incr;
4660
4661 return false;
4662 }
4663
4664 /* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
4665 are directly for their associated operands in the statement. DECL
4666 and INIT are a combo; if DECL is NULL then INIT ought to be a
4667 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
4668 optional statements that need to go before the loop into its
4669 sk_omp scope. */
4670
4671 tree
4672 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4673 tree incrv, tree body, tree pre_body, tree clauses)
4674 {
4675 tree omp_for = NULL, orig_incr = NULL;
4676 tree decl, init, cond, incr;
4677 location_t elocus;
4678 int i;
4679
4680 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4681 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4682 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4683 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4684 {
4685 decl = TREE_VEC_ELT (declv, i);
4686 init = TREE_VEC_ELT (initv, i);
4687 cond = TREE_VEC_ELT (condv, i);
4688 incr = TREE_VEC_ELT (incrv, i);
4689 elocus = locus;
4690
4691 if (decl == NULL)
4692 {
4693 if (init != NULL)
4694 switch (TREE_CODE (init))
4695 {
4696 case MODIFY_EXPR:
4697 decl = TREE_OPERAND (init, 0);
4698 init = TREE_OPERAND (init, 1);
4699 break;
4700 case MODOP_EXPR:
4701 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4702 {
4703 decl = TREE_OPERAND (init, 0);
4704 init = TREE_OPERAND (init, 2);
4705 }
4706 break;
4707 default:
4708 break;
4709 }
4710
4711 if (decl == NULL)
4712 {
4713 error_at (locus,
4714 "expected iteration declaration or initialization");
4715 return NULL;
4716 }
4717 }
4718
4719 if (init && EXPR_HAS_LOCATION (init))
4720 elocus = EXPR_LOCATION (init);
4721
4722 if (cond == NULL)
4723 {
4724 error_at (elocus, "missing controlling predicate");
4725 return NULL;
4726 }
4727
4728 if (incr == NULL)
4729 {
4730 error_at (elocus, "missing increment expression");
4731 return NULL;
4732 }
4733
4734 TREE_VEC_ELT (declv, i) = decl;
4735 TREE_VEC_ELT (initv, i) = init;
4736 }
4737
4738 if (dependent_omp_for_p (declv, initv, condv, incrv))
4739 {
4740 tree stmt;
4741
4742 stmt = make_node (OMP_FOR);
4743
4744 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4745 {
4746 /* This is really just a place-holder. We'll be decomposing this
4747 again and going through the cp_build_modify_expr path below when
4748 we instantiate the thing. */
4749 TREE_VEC_ELT (initv, i)
4750 = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4751 TREE_VEC_ELT (initv, i));
4752 }
4753
4754 TREE_TYPE (stmt) = void_type_node;
4755 OMP_FOR_INIT (stmt) = initv;
4756 OMP_FOR_COND (stmt) = condv;
4757 OMP_FOR_INCR (stmt) = incrv;
4758 OMP_FOR_BODY (stmt) = body;
4759 OMP_FOR_PRE_BODY (stmt) = pre_body;
4760 OMP_FOR_CLAUSES (stmt) = clauses;
4761
4762 SET_EXPR_LOCATION (stmt, locus);
4763 return add_stmt (stmt);
4764 }
4765
4766 if (processing_template_decl)
4767 orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4768
4769 for (i = 0; i < TREE_VEC_LENGTH (declv); )
4770 {
4771 decl = TREE_VEC_ELT (declv, i);
4772 init = TREE_VEC_ELT (initv, i);
4773 cond = TREE_VEC_ELT (condv, i);
4774 incr = TREE_VEC_ELT (incrv, i);
4775 if (orig_incr)
4776 TREE_VEC_ELT (orig_incr, i) = incr;
4777 elocus = locus;
4778
4779 if (init && EXPR_HAS_LOCATION (init))
4780 elocus = EXPR_LOCATION (init);
4781
4782 if (!DECL_P (decl))
4783 {
4784 error_at (elocus, "expected iteration declaration or initialization");
4785 return NULL;
4786 }
4787
4788 if (incr && TREE_CODE (incr) == MODOP_EXPR)
4789 {
4790 if (orig_incr)
4791 TREE_VEC_ELT (orig_incr, i) = incr;
4792 incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4793 TREE_CODE (TREE_OPERAND (incr, 1)),
4794 TREE_OPERAND (incr, 2),
4795 tf_warning_or_error);
4796 }
4797
4798 if (CLASS_TYPE_P (TREE_TYPE (decl)))
4799 {
4800 if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4801 incrv, &body, &pre_body, clauses))
4802 return NULL;
4803 continue;
4804 }
4805
4806 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4807 && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4808 {
4809 error_at (elocus, "invalid type for iteration variable %qE", decl);
4810 return NULL;
4811 }
4812
4813 if (!processing_template_decl)
4814 {
4815 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4816 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4817 }
4818 else
4819 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4820 if (cond
4821 && TREE_SIDE_EFFECTS (cond)
4822 && COMPARISON_CLASS_P (cond)
4823 && !processing_template_decl)
4824 {
4825 tree t = TREE_OPERAND (cond, 0);
4826 if (TREE_SIDE_EFFECTS (t)
4827 && t != decl
4828 && (TREE_CODE (t) != NOP_EXPR
4829 || TREE_OPERAND (t, 0) != decl))
4830 TREE_OPERAND (cond, 0)
4831 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4832
4833 t = TREE_OPERAND (cond, 1);
4834 if (TREE_SIDE_EFFECTS (t)
4835 && t != decl
4836 && (TREE_CODE (t) != NOP_EXPR
4837 || TREE_OPERAND (t, 0) != decl))
4838 TREE_OPERAND (cond, 1)
4839 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4840 }
4841 if (decl == error_mark_node || init == error_mark_node)
4842 return NULL;
4843
4844 TREE_VEC_ELT (declv, i) = decl;
4845 TREE_VEC_ELT (initv, i) = init;
4846 TREE_VEC_ELT (condv, i) = cond;
4847 TREE_VEC_ELT (incrv, i) = incr;
4848 i++;
4849 }
4850
4851 if (IS_EMPTY_STMT (pre_body))
4852 pre_body = NULL;
4853
4854 omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4855 body, pre_body);
4856
4857 if (omp_for == NULL)
4858 return NULL;
4859
4860 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4861 {
4862 decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4863 incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4864
4865 if (TREE_CODE (incr) != MODIFY_EXPR)
4866 continue;
4867
4868 if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4869 && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4870 && !processing_template_decl)
4871 {
4872 tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4873 if (TREE_SIDE_EFFECTS (t)
4874 && t != decl
4875 && (TREE_CODE (t) != NOP_EXPR
4876 || TREE_OPERAND (t, 0) != decl))
4877 TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4878 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4879
4880 t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4881 if (TREE_SIDE_EFFECTS (t)
4882 && t != decl
4883 && (TREE_CODE (t) != NOP_EXPR
4884 || TREE_OPERAND (t, 0) != decl))
4885 TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4886 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4887 }
4888
4889 if (orig_incr)
4890 TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4891 }
4892 if (omp_for != NULL)
4893 OMP_FOR_CLAUSES (omp_for) = clauses;
4894 return omp_for;
4895 }
4896
4897 void
4898 finish_omp_atomic (enum tree_code code, enum tree_code opcode, tree lhs,
4899 tree rhs, tree v, tree lhs1, tree rhs1)
4900 {
4901 tree orig_lhs;
4902 tree orig_rhs;
4903 tree orig_v;
4904 tree orig_lhs1;
4905 tree orig_rhs1;
4906 bool dependent_p;
4907 tree stmt;
4908
4909 orig_lhs = lhs;
4910 orig_rhs = rhs;
4911 orig_v = v;
4912 orig_lhs1 = lhs1;
4913 orig_rhs1 = rhs1;
4914 dependent_p = false;
4915 stmt = NULL_TREE;
4916
4917 /* Even in a template, we can detect invalid uses of the atomic
4918 pragma if neither LHS nor RHS is type-dependent. */
4919 if (processing_template_decl)
4920 {
4921 dependent_p = (type_dependent_expression_p (lhs)
4922 || (rhs && type_dependent_expression_p (rhs))
4923 || (v && type_dependent_expression_p (v))
4924 || (lhs1 && type_dependent_expression_p (lhs1))
4925 || (rhs1 && type_dependent_expression_p (rhs1)));
4926 if (!dependent_p)
4927 {
4928 lhs = build_non_dependent_expr (lhs);
4929 if (rhs)
4930 rhs = build_non_dependent_expr (rhs);
4931 if (v)
4932 v = build_non_dependent_expr (v);
4933 if (lhs1)
4934 lhs1 = build_non_dependent_expr (lhs1);
4935 if (rhs1)
4936 rhs1 = build_non_dependent_expr (rhs1);
4937 }
4938 }
4939 if (!dependent_p)
4940 {
4941 stmt = c_finish_omp_atomic (input_location, code, opcode, lhs, rhs,
4942 v, lhs1, rhs1);
4943 if (stmt == error_mark_node)
4944 return;
4945 }
4946 if (processing_template_decl)
4947 {
4948 if (code == OMP_ATOMIC_READ)
4949 {
4950 stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs),
4951 OMP_ATOMIC_READ, orig_lhs);
4952 stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
4953 }
4954 else
4955 {
4956 if (opcode == NOP_EXPR)
4957 stmt = build2 (MODIFY_EXPR, void_type_node, orig_lhs, orig_rhs);
4958 else
4959 stmt = build2 (opcode, void_type_node, orig_lhs, orig_rhs);
4960 if (orig_rhs1)
4961 stmt = build_min_nt_loc (EXPR_LOCATION (orig_rhs1),
4962 COMPOUND_EXPR, orig_rhs1, stmt);
4963 if (code != OMP_ATOMIC)
4964 {
4965 stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs1),
4966 code, orig_lhs1, stmt);
4967 stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
4968 }
4969 }
4970 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
4971 }
4972 add_stmt (stmt);
4973 }
4974
4975 void
4976 finish_omp_barrier (void)
4977 {
4978 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
4979 VEC(tree,gc) *vec = make_tree_vector ();
4980 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4981 release_tree_vector (vec);
4982 finish_expr_stmt (stmt);
4983 }
4984
4985 void
4986 finish_omp_flush (void)
4987 {
4988 tree fn = builtin_decl_explicit (BUILT_IN_SYNC_SYNCHRONIZE);
4989 VEC(tree,gc) *vec = make_tree_vector ();
4990 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4991 release_tree_vector (vec);
4992 finish_expr_stmt (stmt);
4993 }
4994
4995 void
4996 finish_omp_taskwait (void)
4997 {
4998 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKWAIT);
4999 VEC(tree,gc) *vec = make_tree_vector ();
5000 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
5001 release_tree_vector (vec);
5002 finish_expr_stmt (stmt);
5003 }
5004
5005 void
5006 finish_omp_taskyield (void)
5007 {
5008 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKYIELD);
5009 VEC(tree,gc) *vec = make_tree_vector ();
5010 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
5011 release_tree_vector (vec);
5012 finish_expr_stmt (stmt);
5013 }
5014 \f
5015 /* Begin a __transaction_atomic or __transaction_relaxed statement.
5016 If PCOMPOUND is non-null, this is for a function-transaction-block, and we
5017 should create an extra compound stmt. */
5018
5019 tree
5020 begin_transaction_stmt (location_t loc, tree *pcompound, int flags)
5021 {
5022 tree r;
5023
5024 if (pcompound)
5025 *pcompound = begin_compound_stmt (0);
5026
5027 r = build_stmt (loc, TRANSACTION_EXPR, NULL_TREE);
5028
5029 /* Only add the statement to the function if support enabled. */
5030 if (flag_tm)
5031 add_stmt (r);
5032 else
5033 error_at (loc, ((flags & TM_STMT_ATTR_RELAXED) != 0
5034 ? G_("%<__transaction_relaxed%> without "
5035 "transactional memory support enabled")
5036 : G_("%<__transaction_atomic%> without "
5037 "transactional memory support enabled")));
5038
5039 TRANSACTION_EXPR_BODY (r) = push_stmt_list ();
5040 return r;
5041 }
5042
5043 /* End a __transaction_atomic or __transaction_relaxed statement.
5044 If COMPOUND_STMT is non-null, this is for a function-transaction-block,
5045 and we should end the compound. If NOEX is non-NULL, we wrap the body in
5046 a MUST_NOT_THROW_EXPR with NOEX as condition. */
5047
5048 void
5049 finish_transaction_stmt (tree stmt, tree compound_stmt, int flags, tree noex)
5050 {
5051 TRANSACTION_EXPR_BODY (stmt) = pop_stmt_list (TRANSACTION_EXPR_BODY (stmt));
5052 TRANSACTION_EXPR_OUTER (stmt) = (flags & TM_STMT_ATTR_OUTER) != 0;
5053 TRANSACTION_EXPR_RELAXED (stmt) = (flags & TM_STMT_ATTR_RELAXED) != 0;
5054 TRANSACTION_EXPR_IS_STMT (stmt) = 1;
5055
5056 /* noexcept specifications are not allowed for function transactions. */
5057 gcc_assert (!(noex && compound_stmt));
5058 if (noex)
5059 {
5060 tree body = build_must_not_throw_expr (TRANSACTION_EXPR_BODY (stmt),
5061 noex);
5062 SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt)));
5063 TREE_SIDE_EFFECTS (body) = 1;
5064 TRANSACTION_EXPR_BODY (stmt) = body;
5065 }
5066
5067 if (compound_stmt)
5068 finish_compound_stmt (compound_stmt);
5069 finish_stmt ();
5070 }
5071
5072 /* Build a __transaction_atomic or __transaction_relaxed expression. If
5073 NOEX is non-NULL, we wrap the body in a MUST_NOT_THROW_EXPR with NOEX as
5074 condition. */
5075
5076 tree
5077 build_transaction_expr (location_t loc, tree expr, int flags, tree noex)
5078 {
5079 tree ret;
5080 if (noex)
5081 {
5082 expr = build_must_not_throw_expr (expr, noex);
5083 SET_EXPR_LOCATION (expr, loc);
5084 TREE_SIDE_EFFECTS (expr) = 1;
5085 }
5086 ret = build1 (TRANSACTION_EXPR, TREE_TYPE (expr), expr);
5087 if (flags & TM_STMT_ATTR_RELAXED)
5088 TRANSACTION_EXPR_RELAXED (ret) = 1;
5089 SET_EXPR_LOCATION (ret, loc);
5090 return ret;
5091 }
5092 \f
5093 void
5094 init_cp_semantics (void)
5095 {
5096 }
5097 \f
5098 /* Build a STATIC_ASSERT for a static assertion with the condition
5099 CONDITION and the message text MESSAGE. LOCATION is the location
5100 of the static assertion in the source code. When MEMBER_P, this
5101 static assertion is a member of a class. */
5102 void
5103 finish_static_assert (tree condition, tree message, location_t location,
5104 bool member_p)
5105 {
5106 if (check_for_bare_parameter_packs (condition))
5107 condition = error_mark_node;
5108
5109 if (type_dependent_expression_p (condition)
5110 || value_dependent_expression_p (condition))
5111 {
5112 /* We're in a template; build a STATIC_ASSERT and put it in
5113 the right place. */
5114 tree assertion;
5115
5116 assertion = make_node (STATIC_ASSERT);
5117 STATIC_ASSERT_CONDITION (assertion) = condition;
5118 STATIC_ASSERT_MESSAGE (assertion) = message;
5119 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
5120
5121 if (member_p)
5122 maybe_add_class_template_decl_list (current_class_type,
5123 assertion,
5124 /*friend_p=*/0);
5125 else
5126 add_stmt (assertion);
5127
5128 return;
5129 }
5130
5131 /* Fold the expression and convert it to a boolean value. */
5132 condition = fold_non_dependent_expr (condition);
5133 condition = cp_convert (boolean_type_node, condition, tf_warning_or_error);
5134 condition = maybe_constant_value (condition);
5135
5136 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
5137 /* Do nothing; the condition is satisfied. */
5138 ;
5139 else
5140 {
5141 location_t saved_loc = input_location;
5142
5143 input_location = location;
5144 if (TREE_CODE (condition) == INTEGER_CST
5145 && integer_zerop (condition))
5146 /* Report the error. */
5147 error ("static assertion failed: %s", TREE_STRING_POINTER (message));
5148 else if (condition && condition != error_mark_node)
5149 {
5150 error ("non-constant condition for static assertion");
5151 cxx_constant_value (condition);
5152 }
5153 input_location = saved_loc;
5154 }
5155 }
5156 \f
5157 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
5158 suitable for use as a type-specifier.
5159
5160 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
5161 id-expression or a class member access, FALSE when it was parsed as
5162 a full expression. */
5163
5164 tree
5165 finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
5166 tsubst_flags_t complain)
5167 {
5168 tree type = NULL_TREE;
5169
5170 if (!expr || error_operand_p (expr))
5171 return error_mark_node;
5172
5173 if (TYPE_P (expr)
5174 || TREE_CODE (expr) == TYPE_DECL
5175 || (TREE_CODE (expr) == BIT_NOT_EXPR
5176 && TYPE_P (TREE_OPERAND (expr, 0))))
5177 {
5178 if (complain & tf_error)
5179 error ("argument to decltype must be an expression");
5180 return error_mark_node;
5181 }
5182
5183 /* FIXME instantiation-dependent */
5184 if (type_dependent_expression_p (expr)
5185 /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
5186 if it isn't dependent, so that we can check access control at
5187 instantiation time, so defer the decltype as well (PR 42277). */
5188 || (id_expression_or_member_access_p
5189 && processing_template_decl
5190 && TREE_CODE (expr) == COMPONENT_REF))
5191 {
5192 type = cxx_make_type (DECLTYPE_TYPE);
5193 DECLTYPE_TYPE_EXPR (type) = expr;
5194 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
5195 = id_expression_or_member_access_p;
5196 SET_TYPE_STRUCTURAL_EQUALITY (type);
5197
5198 return type;
5199 }
5200
5201 /* The type denoted by decltype(e) is defined as follows: */
5202
5203 expr = resolve_nondeduced_context (expr);
5204
5205 if (type_unknown_p (expr))
5206 {
5207 if (complain & tf_error)
5208 error ("decltype cannot resolve address of overloaded function");
5209 return error_mark_node;
5210 }
5211
5212 if (invalid_nonstatic_memfn_p (expr, complain))
5213 return error_mark_node;
5214
5215 /* To get the size of a static data member declared as an array of
5216 unknown bound, we need to instantiate it. */
5217 if (TREE_CODE (expr) == VAR_DECL
5218 && VAR_HAD_UNKNOWN_BOUND (expr)
5219 && DECL_TEMPLATE_INSTANTIATION (expr))
5220 instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
5221
5222 if (id_expression_or_member_access_p)
5223 {
5224 /* If e is an id-expression or a class member access (5.2.5
5225 [expr.ref]), decltype(e) is defined as the type of the entity
5226 named by e. If there is no such entity, or e names a set of
5227 overloaded functions, the program is ill-formed. */
5228 if (TREE_CODE (expr) == IDENTIFIER_NODE)
5229 expr = lookup_name (expr);
5230
5231 if (TREE_CODE (expr) == INDIRECT_REF)
5232 /* This can happen when the expression is, e.g., "a.b". Just
5233 look at the underlying operand. */
5234 expr = TREE_OPERAND (expr, 0);
5235
5236 if (TREE_CODE (expr) == OFFSET_REF
5237 || TREE_CODE (expr) == MEMBER_REF)
5238 /* We're only interested in the field itself. If it is a
5239 BASELINK, we will need to see through it in the next
5240 step. */
5241 expr = TREE_OPERAND (expr, 1);
5242
5243 if (BASELINK_P (expr))
5244 /* See through BASELINK nodes to the underlying function. */
5245 expr = BASELINK_FUNCTIONS (expr);
5246
5247 switch (TREE_CODE (expr))
5248 {
5249 case FIELD_DECL:
5250 if (DECL_BIT_FIELD_TYPE (expr))
5251 {
5252 type = DECL_BIT_FIELD_TYPE (expr);
5253 break;
5254 }
5255 /* Fall through for fields that aren't bitfields. */
5256
5257 case FUNCTION_DECL:
5258 case VAR_DECL:
5259 case CONST_DECL:
5260 case PARM_DECL:
5261 case RESULT_DECL:
5262 case TEMPLATE_PARM_INDEX:
5263 expr = mark_type_use (expr);
5264 type = TREE_TYPE (expr);
5265 break;
5266
5267 case ERROR_MARK:
5268 type = error_mark_node;
5269 break;
5270
5271 case COMPONENT_REF:
5272 mark_type_use (expr);
5273 type = is_bitfield_expr_with_lowered_type (expr);
5274 if (!type)
5275 type = TREE_TYPE (TREE_OPERAND (expr, 1));
5276 break;
5277
5278 case BIT_FIELD_REF:
5279 gcc_unreachable ();
5280
5281 case INTEGER_CST:
5282 case PTRMEM_CST:
5283 /* We can get here when the id-expression refers to an
5284 enumerator or non-type template parameter. */
5285 type = TREE_TYPE (expr);
5286 break;
5287
5288 default:
5289 gcc_unreachable ();
5290 return error_mark_node;
5291 }
5292 }
5293 else
5294 {
5295 /* Within a lambda-expression:
5296
5297 Every occurrence of decltype((x)) where x is a possibly
5298 parenthesized id-expression that names an entity of
5299 automatic storage duration is treated as if x were
5300 transformed into an access to a corresponding data member
5301 of the closure type that would have been declared if x
5302 were a use of the denoted entity. */
5303 if (outer_automatic_var_p (expr)
5304 && current_function_decl
5305 && LAMBDA_FUNCTION_P (current_function_decl))
5306 type = capture_decltype (expr);
5307 else if (error_operand_p (expr))
5308 type = error_mark_node;
5309 else if (expr == current_class_ptr)
5310 /* If the expression is just "this", we want the
5311 cv-unqualified pointer for the "this" type. */
5312 type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
5313 else
5314 {
5315 /* Otherwise, where T is the type of e, if e is an lvalue,
5316 decltype(e) is defined as T&; if an xvalue, T&&; otherwise, T. */
5317 cp_lvalue_kind clk = lvalue_kind (expr);
5318 type = unlowered_expr_type (expr);
5319 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5320 if (clk != clk_none && !(clk & clk_class))
5321 type = cp_build_reference_type (type, (clk & clk_rvalueref));
5322 }
5323 }
5324
5325 return type;
5326 }
5327
5328 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or
5329 __has_nothrow_copy, depending on assign_p. */
5330
5331 static bool
5332 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
5333 {
5334 tree fns;
5335
5336 if (assign_p)
5337 {
5338 int ix;
5339 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5340 if (ix < 0)
5341 return false;
5342 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
5343 }
5344 else if (TYPE_HAS_COPY_CTOR (type))
5345 {
5346 /* If construction of the copy constructor was postponed, create
5347 it now. */
5348 if (CLASSTYPE_LAZY_COPY_CTOR (type))
5349 lazily_declare_fn (sfk_copy_constructor, type);
5350 if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5351 lazily_declare_fn (sfk_move_constructor, type);
5352 fns = CLASSTYPE_CONSTRUCTORS (type);
5353 }
5354 else
5355 return false;
5356
5357 for (; fns; fns = OVL_NEXT (fns))
5358 {
5359 tree fn = OVL_CURRENT (fns);
5360
5361 if (assign_p)
5362 {
5363 if (copy_fn_p (fn) == 0)
5364 continue;
5365 }
5366 else if (copy_fn_p (fn) <= 0)
5367 continue;
5368
5369 if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5370 return false;
5371 }
5372
5373 return true;
5374 }
5375
5376 /* Actually evaluates the trait. */
5377
5378 static bool
5379 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5380 {
5381 enum tree_code type_code1;
5382 tree t;
5383
5384 type_code1 = TREE_CODE (type1);
5385
5386 switch (kind)
5387 {
5388 case CPTK_HAS_NOTHROW_ASSIGN:
5389 type1 = strip_array_types (type1);
5390 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5391 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5392 || (CLASS_TYPE_P (type1)
5393 && classtype_has_nothrow_assign_or_copy_p (type1,
5394 true))));
5395
5396 case CPTK_HAS_TRIVIAL_ASSIGN:
5397 /* ??? The standard seems to be missing the "or array of such a class
5398 type" wording for this trait. */
5399 type1 = strip_array_types (type1);
5400 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5401 && (trivial_type_p (type1)
5402 || (CLASS_TYPE_P (type1)
5403 && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5404
5405 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5406 type1 = strip_array_types (type1);
5407 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5408 || (CLASS_TYPE_P (type1)
5409 && (t = locate_ctor (type1))
5410 && TYPE_NOTHROW_P (TREE_TYPE (t))));
5411
5412 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5413 type1 = strip_array_types (type1);
5414 return (trivial_type_p (type1)
5415 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5416
5417 case CPTK_HAS_NOTHROW_COPY:
5418 type1 = strip_array_types (type1);
5419 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5420 || (CLASS_TYPE_P (type1)
5421 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5422
5423 case CPTK_HAS_TRIVIAL_COPY:
5424 /* ??? The standard seems to be missing the "or array of such a class
5425 type" wording for this trait. */
5426 type1 = strip_array_types (type1);
5427 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5428 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5429
5430 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5431 type1 = strip_array_types (type1);
5432 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5433 || (CLASS_TYPE_P (type1)
5434 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5435
5436 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5437 return type_has_virtual_destructor (type1);
5438
5439 case CPTK_IS_ABSTRACT:
5440 return (ABSTRACT_CLASS_TYPE_P (type1));
5441
5442 case CPTK_IS_BASE_OF:
5443 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5444 && DERIVED_FROM_P (type1, type2));
5445
5446 case CPTK_IS_CLASS:
5447 return (NON_UNION_CLASS_TYPE_P (type1));
5448
5449 case CPTK_IS_CONVERTIBLE_TO:
5450 /* TODO */
5451 return false;
5452
5453 case CPTK_IS_EMPTY:
5454 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5455
5456 case CPTK_IS_ENUM:
5457 return (type_code1 == ENUMERAL_TYPE);
5458
5459 case CPTK_IS_FINAL:
5460 return (CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1));
5461
5462 case CPTK_IS_LITERAL_TYPE:
5463 return (literal_type_p (type1));
5464
5465 case CPTK_IS_POD:
5466 return (pod_type_p (type1));
5467
5468 case CPTK_IS_POLYMORPHIC:
5469 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5470
5471 case CPTK_IS_STD_LAYOUT:
5472 return (std_layout_type_p (type1));
5473
5474 case CPTK_IS_TRIVIAL:
5475 return (trivial_type_p (type1));
5476
5477 case CPTK_IS_UNION:
5478 return (type_code1 == UNION_TYPE);
5479
5480 default:
5481 gcc_unreachable ();
5482 return false;
5483 }
5484 }
5485
5486 /* If TYPE is an array of unknown bound, or (possibly cv-qualified)
5487 void, or a complete type, returns it, otherwise NULL_TREE. */
5488
5489 static tree
5490 check_trait_type (tree type)
5491 {
5492 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5493 && COMPLETE_TYPE_P (TREE_TYPE (type)))
5494 return type;
5495
5496 if (VOID_TYPE_P (type))
5497 return type;
5498
5499 return complete_type_or_else (strip_array_types (type), NULL_TREE);
5500 }
5501
5502 /* Process a trait expression. */
5503
5504 tree
5505 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5506 {
5507 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5508 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5509 || kind == CPTK_HAS_NOTHROW_COPY
5510 || kind == CPTK_HAS_TRIVIAL_ASSIGN
5511 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5512 || kind == CPTK_HAS_TRIVIAL_COPY
5513 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5514 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5515 || kind == CPTK_IS_ABSTRACT
5516 || kind == CPTK_IS_BASE_OF
5517 || kind == CPTK_IS_CLASS
5518 || kind == CPTK_IS_CONVERTIBLE_TO
5519 || kind == CPTK_IS_EMPTY
5520 || kind == CPTK_IS_ENUM
5521 || kind == CPTK_IS_FINAL
5522 || kind == CPTK_IS_LITERAL_TYPE
5523 || kind == CPTK_IS_POD
5524 || kind == CPTK_IS_POLYMORPHIC
5525 || kind == CPTK_IS_STD_LAYOUT
5526 || kind == CPTK_IS_TRIVIAL
5527 || kind == CPTK_IS_UNION);
5528
5529 if (kind == CPTK_IS_CONVERTIBLE_TO)
5530 {
5531 sorry ("__is_convertible_to");
5532 return error_mark_node;
5533 }
5534
5535 if (type1 == error_mark_node
5536 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5537 && type2 == error_mark_node))
5538 return error_mark_node;
5539
5540 if (processing_template_decl)
5541 {
5542 tree trait_expr = make_node (TRAIT_EXPR);
5543 TREE_TYPE (trait_expr) = boolean_type_node;
5544 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5545 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5546 TRAIT_EXPR_KIND (trait_expr) = kind;
5547 return trait_expr;
5548 }
5549
5550 switch (kind)
5551 {
5552 case CPTK_HAS_NOTHROW_ASSIGN:
5553 case CPTK_HAS_TRIVIAL_ASSIGN:
5554 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5555 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5556 case CPTK_HAS_NOTHROW_COPY:
5557 case CPTK_HAS_TRIVIAL_COPY:
5558 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5559 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5560 case CPTK_IS_ABSTRACT:
5561 case CPTK_IS_EMPTY:
5562 case CPTK_IS_FINAL:
5563 case CPTK_IS_LITERAL_TYPE:
5564 case CPTK_IS_POD:
5565 case CPTK_IS_POLYMORPHIC:
5566 case CPTK_IS_STD_LAYOUT:
5567 case CPTK_IS_TRIVIAL:
5568 if (!check_trait_type (type1))
5569 return error_mark_node;
5570 break;
5571
5572 case CPTK_IS_BASE_OF:
5573 if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5574 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5575 && !complete_type_or_else (type2, NULL_TREE))
5576 /* We already issued an error. */
5577 return error_mark_node;
5578 break;
5579
5580 case CPTK_IS_CLASS:
5581 case CPTK_IS_ENUM:
5582 case CPTK_IS_UNION:
5583 break;
5584
5585 case CPTK_IS_CONVERTIBLE_TO:
5586 default:
5587 gcc_unreachable ();
5588 }
5589
5590 return (trait_expr_value (kind, type1, type2)
5591 ? boolean_true_node : boolean_false_node);
5592 }
5593
5594 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5595 which is ignored for C++. */
5596
5597 void
5598 set_float_const_decimal64 (void)
5599 {
5600 }
5601
5602 void
5603 clear_float_const_decimal64 (void)
5604 {
5605 }
5606
5607 bool
5608 float_const_decimal64_p (void)
5609 {
5610 return 0;
5611 }
5612
5613 \f
5614 /* Return true if T is a literal type. */
5615
5616 bool
5617 literal_type_p (tree t)
5618 {
5619 if (SCALAR_TYPE_P (t)
5620 || TREE_CODE (t) == VECTOR_TYPE
5621 || TREE_CODE (t) == REFERENCE_TYPE)
5622 return true;
5623 if (CLASS_TYPE_P (t))
5624 {
5625 t = complete_type (t);
5626 gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
5627 return CLASSTYPE_LITERAL_P (t);
5628 }
5629 if (TREE_CODE (t) == ARRAY_TYPE)
5630 return literal_type_p (strip_array_types (t));
5631 return false;
5632 }
5633
5634 /* If DECL is a variable declared `constexpr', require its type
5635 be literal. Return the DECL if OK, otherwise NULL. */
5636
5637 tree
5638 ensure_literal_type_for_constexpr_object (tree decl)
5639 {
5640 tree type = TREE_TYPE (decl);
5641 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5642 && !processing_template_decl)
5643 {
5644 if (CLASS_TYPE_P (type) && !COMPLETE_TYPE_P (complete_type (type)))
5645 /* Don't complain here, we'll complain about incompleteness
5646 when we try to initialize the variable. */;
5647 else if (!literal_type_p (type))
5648 {
5649 error ("the type %qT of constexpr variable %qD is not literal",
5650 type, decl);
5651 explain_non_literal_class (type);
5652 return NULL;
5653 }
5654 }
5655 return decl;
5656 }
5657
5658 /* Representation of entries in the constexpr function definition table. */
5659
5660 typedef struct GTY(()) constexpr_fundef {
5661 tree decl;
5662 tree body;
5663 } constexpr_fundef;
5664
5665 /* This table holds all constexpr function definitions seen in
5666 the current translation unit. */
5667
5668 static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
5669
5670 /* Utility function used for managing the constexpr function table.
5671 Return true if the entries pointed to by P and Q are for the
5672 same constexpr function. */
5673
5674 static inline int
5675 constexpr_fundef_equal (const void *p, const void *q)
5676 {
5677 const constexpr_fundef *lhs = (const constexpr_fundef *) p;
5678 const constexpr_fundef *rhs = (const constexpr_fundef *) q;
5679 return lhs->decl == rhs->decl;
5680 }
5681
5682 /* Utility function used for managing the constexpr function table.
5683 Return a hash value for the entry pointed to by Q. */
5684
5685 static inline hashval_t
5686 constexpr_fundef_hash (const void *p)
5687 {
5688 const constexpr_fundef *fundef = (const constexpr_fundef *) p;
5689 return DECL_UID (fundef->decl);
5690 }
5691
5692 /* Return a previously saved definition of function FUN. */
5693
5694 static constexpr_fundef *
5695 retrieve_constexpr_fundef (tree fun)
5696 {
5697 constexpr_fundef fundef = { NULL, NULL };
5698 if (constexpr_fundef_table == NULL)
5699 return NULL;
5700
5701 fundef.decl = fun;
5702 return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
5703 }
5704
5705 /* Check whether the parameter and return types of FUN are valid for a
5706 constexpr function, and complain if COMPLAIN. */
5707
5708 static bool
5709 is_valid_constexpr_fn (tree fun, bool complain)
5710 {
5711 tree parm = FUNCTION_FIRST_USER_PARM (fun);
5712 bool ret = true;
5713 for (; parm != NULL; parm = TREE_CHAIN (parm))
5714 if (!literal_type_p (TREE_TYPE (parm)))
5715 {
5716 ret = false;
5717 if (complain)
5718 {
5719 error ("invalid type for parameter %d of constexpr "
5720 "function %q+#D", DECL_PARM_INDEX (parm), fun);
5721 explain_non_literal_class (TREE_TYPE (parm));
5722 }
5723 }
5724
5725 if (!DECL_CONSTRUCTOR_P (fun))
5726 {
5727 tree rettype = TREE_TYPE (TREE_TYPE (fun));
5728 if (!literal_type_p (rettype))
5729 {
5730 ret = false;
5731 if (complain)
5732 {
5733 error ("invalid return type %qT of constexpr function %q+D",
5734 rettype, fun);
5735 explain_non_literal_class (rettype);
5736 }
5737 }
5738
5739 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5740 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
5741 {
5742 ret = false;
5743 if (complain)
5744 {
5745 error ("enclosing class of constexpr non-static member "
5746 "function %q+#D is not a literal type", fun);
5747 explain_non_literal_class (DECL_CONTEXT (fun));
5748 }
5749 }
5750 }
5751 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
5752 {
5753 ret = false;
5754 if (complain)
5755 error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
5756 }
5757
5758 return ret;
5759 }
5760
5761 /* Subroutine of build_constexpr_constructor_member_initializers.
5762 The expression tree T represents a data member initialization
5763 in a (constexpr) constructor definition. Build a pairing of
5764 the data member with its initializer, and prepend that pair
5765 to the existing initialization pair INITS. */
5766
5767 static bool
5768 build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec)
5769 {
5770 tree member, init;
5771 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
5772 t = TREE_OPERAND (t, 0);
5773 if (TREE_CODE (t) == EXPR_STMT)
5774 t = TREE_OPERAND (t, 0);
5775 if (t == error_mark_node)
5776 return false;
5777 if (TREE_CODE (t) == STATEMENT_LIST)
5778 {
5779 tree_stmt_iterator i;
5780 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5781 {
5782 if (! build_data_member_initialization (tsi_stmt (i), vec))
5783 return false;
5784 }
5785 return true;
5786 }
5787 if (TREE_CODE (t) == CLEANUP_STMT)
5788 {
5789 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
5790 but we can in a constexpr constructor for a non-literal class. Just
5791 ignore it; either all the initialization will be constant, in which
5792 case the cleanup can't run, or it can't be constexpr.
5793 Still recurse into CLEANUP_BODY. */
5794 return build_data_member_initialization (CLEANUP_BODY (t), vec);
5795 }
5796 if (TREE_CODE (t) == CONVERT_EXPR)
5797 t = TREE_OPERAND (t, 0);
5798 if (TREE_CODE (t) == INIT_EXPR
5799 || TREE_CODE (t) == MODIFY_EXPR)
5800 {
5801 member = TREE_OPERAND (t, 0);
5802 init = unshare_expr (TREE_OPERAND (t, 1));
5803 }
5804 else
5805 {
5806 gcc_assert (TREE_CODE (t) == CALL_EXPR);
5807 member = CALL_EXPR_ARG (t, 0);
5808 /* We don't use build_cplus_new here because it complains about
5809 abstract bases. Leaving the call unwrapped means that it has the
5810 wrong type, but cxx_eval_constant_expression doesn't care. */
5811 init = unshare_expr (t);
5812 }
5813 if (TREE_CODE (member) == INDIRECT_REF)
5814 member = TREE_OPERAND (member, 0);
5815 if (TREE_CODE (member) == NOP_EXPR)
5816 {
5817 tree op = member;
5818 STRIP_NOPS (op);
5819 if (TREE_CODE (op) == ADDR_EXPR)
5820 {
5821 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5822 (TREE_TYPE (TREE_TYPE (op)),
5823 TREE_TYPE (TREE_TYPE (member))));
5824 /* Initializing a cv-qualified member; we need to look through
5825 the const_cast. */
5826 member = op;
5827 }
5828 else if (op == current_class_ptr
5829 && (same_type_ignoring_top_level_qualifiers_p
5830 (TREE_TYPE (TREE_TYPE (member)),
5831 current_class_type)))
5832 /* Delegating constructor. */
5833 member = op;
5834 else
5835 {
5836 /* This is an initializer for an empty base; keep it for now so
5837 we can check it in cxx_eval_bare_aggregate. */
5838 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
5839 }
5840 }
5841 if (TREE_CODE (member) == ADDR_EXPR)
5842 member = TREE_OPERAND (member, 0);
5843 if (TREE_CODE (member) == COMPONENT_REF
5844 /* If we're initializing a member of a subaggregate, it's a vtable
5845 pointer. Leave it as COMPONENT_REF so we remember the path to get
5846 to the vfield. */
5847 && TREE_CODE (TREE_OPERAND (member, 0)) != COMPONENT_REF)
5848 member = TREE_OPERAND (member, 1);
5849 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
5850 return true;
5851 }
5852
5853 /* Make sure that there are no statements after LAST in the constructor
5854 body represented by LIST. */
5855
5856 bool
5857 check_constexpr_ctor_body (tree last, tree list)
5858 {
5859 bool ok = true;
5860 if (TREE_CODE (list) == STATEMENT_LIST)
5861 {
5862 tree_stmt_iterator i = tsi_last (list);
5863 for (; !tsi_end_p (i); tsi_prev (&i))
5864 {
5865 tree t = tsi_stmt (i);
5866 if (t == last)
5867 break;
5868 if (TREE_CODE (t) == BIND_EXPR)
5869 {
5870 if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
5871 return false;
5872 else
5873 continue;
5874 }
5875 /* We currently allow typedefs and static_assert.
5876 FIXME allow them in the standard, too. */
5877 if (TREE_CODE (t) != STATIC_ASSERT)
5878 {
5879 ok = false;
5880 break;
5881 }
5882 }
5883 }
5884 else if (list != last
5885 && TREE_CODE (list) != STATIC_ASSERT)
5886 ok = false;
5887 if (!ok)
5888 {
5889 error ("constexpr constructor does not have empty body");
5890 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
5891 }
5892 return ok;
5893 }
5894
5895 /* Build compile-time evalable representations of member-initializer list
5896 for a constexpr constructor. */
5897
5898 static tree
5899 build_constexpr_constructor_member_initializers (tree type, tree body)
5900 {
5901 VEC(constructor_elt,gc) *vec = NULL;
5902 bool ok = true;
5903 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
5904 || TREE_CODE (body) == EH_SPEC_BLOCK)
5905 body = TREE_OPERAND (body, 0);
5906 if (TREE_CODE (body) == STATEMENT_LIST)
5907 body = STATEMENT_LIST_HEAD (body)->stmt;
5908 body = BIND_EXPR_BODY (body);
5909 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5910 {
5911 body = TREE_OPERAND (body, 0);
5912 if (TREE_CODE (body) == EXPR_STMT)
5913 body = TREE_OPERAND (body, 0);
5914 if (TREE_CODE (body) == INIT_EXPR
5915 && (same_type_ignoring_top_level_qualifiers_p
5916 (TREE_TYPE (TREE_OPERAND (body, 0)),
5917 current_class_type)))
5918 {
5919 /* Trivial copy. */
5920 return TREE_OPERAND (body, 1);
5921 }
5922 ok = build_data_member_initialization (body, &vec);
5923 }
5924 else if (TREE_CODE (body) == STATEMENT_LIST)
5925 {
5926 tree_stmt_iterator i;
5927 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5928 {
5929 ok = build_data_member_initialization (tsi_stmt (i), &vec);
5930 if (!ok)
5931 break;
5932 }
5933 }
5934 else if (TREE_CODE (body) == TRY_BLOCK)
5935 {
5936 error ("body of %<constexpr%> constructor cannot be "
5937 "a function-try-block");
5938 return error_mark_node;
5939 }
5940 else if (EXPR_P (body))
5941 ok = build_data_member_initialization (body, &vec);
5942 else
5943 gcc_assert (errorcount > 0);
5944 if (ok)
5945 {
5946 if (VEC_length (constructor_elt, vec) > 0)
5947 {
5948 /* In a delegating constructor, return the target. */
5949 constructor_elt *ce = VEC_index (constructor_elt, vec, 0);
5950 if (ce->index == current_class_ptr)
5951 {
5952 body = ce->value;
5953 VEC_free (constructor_elt, gc, vec);
5954 return body;
5955 }
5956 }
5957 return build_constructor (type, vec);
5958 }
5959 else
5960 return error_mark_node;
5961 }
5962
5963 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
5964 declared to be constexpr, or a sub-statement thereof. Returns the
5965 return value if suitable, error_mark_node for a statement not allowed in
5966 a constexpr function, or NULL_TREE if no return value was found. */
5967
5968 static tree
5969 constexpr_fn_retval (tree body)
5970 {
5971 switch (TREE_CODE (body))
5972 {
5973 case STATEMENT_LIST:
5974 {
5975 tree_stmt_iterator i;
5976 tree expr = NULL_TREE;
5977 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5978 {
5979 tree s = constexpr_fn_retval (tsi_stmt (i));
5980 if (s == error_mark_node)
5981 return error_mark_node;
5982 else if (s == NULL_TREE)
5983 /* Keep iterating. */;
5984 else if (expr)
5985 /* Multiple return statements. */
5986 return error_mark_node;
5987 else
5988 expr = s;
5989 }
5990 return expr;
5991 }
5992
5993 case RETURN_EXPR:
5994 return unshare_expr (TREE_OPERAND (body, 0));
5995
5996 case DECL_EXPR:
5997 if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL)
5998 return NULL_TREE;
5999 return error_mark_node;
6000
6001 case CLEANUP_POINT_EXPR:
6002 return constexpr_fn_retval (TREE_OPERAND (body, 0));
6003
6004 case USING_STMT:
6005 return NULL_TREE;
6006
6007 default:
6008 return error_mark_node;
6009 }
6010 }
6011
6012 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
6013 FUN; do the necessary transformations to turn it into a single expression
6014 that we can store in the hash table. */
6015
6016 static tree
6017 massage_constexpr_body (tree fun, tree body)
6018 {
6019 if (DECL_CONSTRUCTOR_P (fun))
6020 body = build_constexpr_constructor_member_initializers
6021 (DECL_CONTEXT (fun), body);
6022 else
6023 {
6024 if (TREE_CODE (body) == EH_SPEC_BLOCK)
6025 body = EH_SPEC_STMTS (body);
6026 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
6027 body = TREE_OPERAND (body, 0);
6028 if (TREE_CODE (body) == BIND_EXPR)
6029 body = BIND_EXPR_BODY (body);
6030 body = constexpr_fn_retval (body);
6031 }
6032 return body;
6033 }
6034
6035 /* FUN is a constexpr constructor with massaged body BODY. Return true
6036 if some bases/fields are uninitialized, and complain if COMPLAIN. */
6037
6038 static bool
6039 cx_check_missing_mem_inits (tree fun, tree body, bool complain)
6040 {
6041 bool bad;
6042 tree field;
6043 unsigned i, nelts;
6044 tree ctype;
6045
6046 if (TREE_CODE (body) != CONSTRUCTOR)
6047 return false;
6048
6049 nelts = CONSTRUCTOR_NELTS (body);
6050 ctype = DECL_CONTEXT (fun);
6051 field = TYPE_FIELDS (ctype);
6052
6053 if (TREE_CODE (ctype) == UNION_TYPE)
6054 {
6055 if (nelts == 0 && next_initializable_field (field))
6056 {
6057 if (complain)
6058 error ("%<constexpr%> constructor for union %qT must "
6059 "initialize exactly one non-static data member", ctype);
6060 return true;
6061 }
6062 return false;
6063 }
6064
6065 bad = false;
6066 for (i = 0; i <= nelts; ++i)
6067 {
6068 tree index;
6069 if (i == nelts)
6070 index = NULL_TREE;
6071 else
6072 {
6073 index = CONSTRUCTOR_ELT (body, i)->index;
6074 /* Skip base and vtable inits. */
6075 if (TREE_CODE (index) != FIELD_DECL)
6076 continue;
6077 }
6078 for (; field != index; field = DECL_CHAIN (field))
6079 {
6080 tree ftype;
6081 if (TREE_CODE (field) != FIELD_DECL
6082 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field)))
6083 continue;
6084 ftype = strip_array_types (TREE_TYPE (field));
6085 if (type_has_constexpr_default_constructor (ftype))
6086 {
6087 /* It's OK to skip a member with a trivial constexpr ctor.
6088 A constexpr ctor that isn't trivial should have been
6089 added in by now. */
6090 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
6091 || errorcount != 0);
6092 continue;
6093 }
6094 if (!complain)
6095 return true;
6096 error ("uninitialized member %qD in %<constexpr%> constructor",
6097 field);
6098 bad = true;
6099 }
6100 if (field == NULL_TREE)
6101 break;
6102 field = DECL_CHAIN (field);
6103 }
6104
6105 return bad;
6106 }
6107
6108 /* We are processing the definition of the constexpr function FUN.
6109 Check that its BODY fulfills the propriate requirements and
6110 enter it in the constexpr function definition table.
6111 For constructor BODY is actually the TREE_LIST of the
6112 member-initializer list. */
6113
6114 tree
6115 register_constexpr_fundef (tree fun, tree body)
6116 {
6117 constexpr_fundef entry;
6118 constexpr_fundef **slot;
6119
6120 if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
6121 return NULL;
6122
6123 body = massage_constexpr_body (fun, body);
6124 if (body == NULL_TREE || body == error_mark_node)
6125 {
6126 if (!DECL_CONSTRUCTOR_P (fun))
6127 error ("body of constexpr function %qD not a return-statement", fun);
6128 return NULL;
6129 }
6130
6131 if (!potential_rvalue_constant_expression (body))
6132 {
6133 if (!DECL_GENERATED_P (fun))
6134 require_potential_rvalue_constant_expression (body);
6135 return NULL;
6136 }
6137
6138 if (DECL_CONSTRUCTOR_P (fun)
6139 && cx_check_missing_mem_inits (fun, body, !DECL_GENERATED_P (fun)))
6140 return NULL;
6141
6142 /* Create the constexpr function table if necessary. */
6143 if (constexpr_fundef_table == NULL)
6144 constexpr_fundef_table = htab_create_ggc (101,
6145 constexpr_fundef_hash,
6146 constexpr_fundef_equal,
6147 ggc_free);
6148 entry.decl = fun;
6149 entry.body = body;
6150 slot = (constexpr_fundef **)
6151 htab_find_slot (constexpr_fundef_table, &entry, INSERT);
6152
6153 gcc_assert (*slot == NULL);
6154 *slot = ggc_alloc_constexpr_fundef ();
6155 **slot = entry;
6156
6157 return fun;
6158 }
6159
6160 /* FUN is a non-constexpr function called in a context that requires a
6161 constant expression. If it comes from a constexpr template, explain why
6162 the instantiation isn't constexpr. */
6163
6164 void
6165 explain_invalid_constexpr_fn (tree fun)
6166 {
6167 static struct pointer_set_t *diagnosed;
6168 tree body;
6169 location_t save_loc;
6170 /* Only diagnose defaulted functions or instantiations. */
6171 if (!DECL_DEFAULTED_FN (fun)
6172 && !is_instantiation_of_constexpr (fun))
6173 return;
6174 if (diagnosed == NULL)
6175 diagnosed = pointer_set_create ();
6176 if (pointer_set_insert (diagnosed, fun) != 0)
6177 /* Already explained. */
6178 return;
6179
6180 save_loc = input_location;
6181 input_location = DECL_SOURCE_LOCATION (fun);
6182 inform (0, "%q+D is not usable as a constexpr function because:", fun);
6183 /* First check the declaration. */
6184 if (is_valid_constexpr_fn (fun, true))
6185 {
6186 /* Then if it's OK, the body. */
6187 if (DECL_DEFAULTED_FN (fun))
6188 explain_implicit_non_constexpr (fun);
6189 else
6190 {
6191 body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
6192 require_potential_rvalue_constant_expression (body);
6193 if (DECL_CONSTRUCTOR_P (fun))
6194 cx_check_missing_mem_inits (fun, body, true);
6195 }
6196 }
6197 input_location = save_loc;
6198 }
6199
6200 /* Objects of this type represent calls to constexpr functions
6201 along with the bindings of parameters to their arguments, for
6202 the purpose of compile time evaluation. */
6203
6204 typedef struct GTY(()) constexpr_call {
6205 /* Description of the constexpr function definition. */
6206 constexpr_fundef *fundef;
6207 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
6208 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
6209 Note: This arrangement is made to accomodate the use of
6210 iterative_hash_template_arg (see pt.c). If you change this
6211 representation, also change the hash calculation in
6212 cxx_eval_call_expression. */
6213 tree bindings;
6214 /* Result of the call.
6215 NULL means the call is being evaluated.
6216 error_mark_node means that the evaluation was erroneous;
6217 otherwise, the actuall value of the call. */
6218 tree result;
6219 /* The hash of this call; we remember it here to avoid having to
6220 recalculate it when expanding the hash table. */
6221 hashval_t hash;
6222 } constexpr_call;
6223
6224 /* A table of all constexpr calls that have been evaluated by the
6225 compiler in this translation unit. */
6226
6227 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
6228
6229 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
6230 bool, bool, bool *);
6231 static tree cxx_eval_vec_perm_expr (const constexpr_call *, tree, bool, bool,
6232 bool *);
6233
6234
6235 /* Compute a hash value for a constexpr call representation. */
6236
6237 static hashval_t
6238 constexpr_call_hash (const void *p)
6239 {
6240 const constexpr_call *info = (const constexpr_call *) p;
6241 return info->hash;
6242 }
6243
6244 /* Return 1 if the objects pointed to by P and Q represent calls
6245 to the same constexpr function with the same arguments.
6246 Otherwise, return 0. */
6247
6248 static int
6249 constexpr_call_equal (const void *p, const void *q)
6250 {
6251 const constexpr_call *lhs = (const constexpr_call *) p;
6252 const constexpr_call *rhs = (const constexpr_call *) q;
6253 tree lhs_bindings;
6254 tree rhs_bindings;
6255 if (lhs == rhs)
6256 return 1;
6257 if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
6258 return 0;
6259 lhs_bindings = lhs->bindings;
6260 rhs_bindings = rhs->bindings;
6261 while (lhs_bindings != NULL && rhs_bindings != NULL)
6262 {
6263 tree lhs_arg = TREE_VALUE (lhs_bindings);
6264 tree rhs_arg = TREE_VALUE (rhs_bindings);
6265 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
6266 if (!cp_tree_equal (lhs_arg, rhs_arg))
6267 return 0;
6268 lhs_bindings = TREE_CHAIN (lhs_bindings);
6269 rhs_bindings = TREE_CHAIN (rhs_bindings);
6270 }
6271 return lhs_bindings == rhs_bindings;
6272 }
6273
6274 /* Initialize the constexpr call table, if needed. */
6275
6276 static void
6277 maybe_initialize_constexpr_call_table (void)
6278 {
6279 if (constexpr_call_table == NULL)
6280 constexpr_call_table = htab_create_ggc (101,
6281 constexpr_call_hash,
6282 constexpr_call_equal,
6283 ggc_free);
6284 }
6285
6286 /* Return true if T designates the implied `this' parameter. */
6287
6288 static inline bool
6289 is_this_parameter (tree t)
6290 {
6291 return t == current_class_ptr;
6292 }
6293
6294 /* We have an expression tree T that represents a call, either CALL_EXPR
6295 or AGGR_INIT_EXPR. If the call is lexically to a named function,
6296 retrun the _DECL for that function. */
6297
6298 static tree
6299 get_function_named_in_call (tree t)
6300 {
6301 tree fun = NULL;
6302 switch (TREE_CODE (t))
6303 {
6304 case CALL_EXPR:
6305 fun = CALL_EXPR_FN (t);
6306 break;
6307
6308 case AGGR_INIT_EXPR:
6309 fun = AGGR_INIT_EXPR_FN (t);
6310 break;
6311
6312 default:
6313 gcc_unreachable();
6314 break;
6315 }
6316 if (TREE_CODE (fun) == ADDR_EXPR
6317 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
6318 fun = TREE_OPERAND (fun, 0);
6319 return fun;
6320 }
6321
6322 /* We have an expression tree T that represents a call, either CALL_EXPR
6323 or AGGR_INIT_EXPR. Return the Nth argument. */
6324
6325 static inline tree
6326 get_nth_callarg (tree t, int n)
6327 {
6328 switch (TREE_CODE (t))
6329 {
6330 case CALL_EXPR:
6331 return CALL_EXPR_ARG (t, n);
6332
6333 case AGGR_INIT_EXPR:
6334 return AGGR_INIT_EXPR_ARG (t, n);
6335
6336 default:
6337 gcc_unreachable ();
6338 return NULL;
6339 }
6340 }
6341
6342 /* Look up the binding of the function parameter T in a constexpr
6343 function call context CALL. */
6344
6345 static tree
6346 lookup_parameter_binding (const constexpr_call *call, tree t)
6347 {
6348 tree b = purpose_member (t, call->bindings);
6349 return TREE_VALUE (b);
6350 }
6351
6352 /* Attempt to evaluate T which represents a call to a builtin function.
6353 We assume here that all builtin functions evaluate to scalar types
6354 represented by _CST nodes. */
6355
6356 static tree
6357 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
6358 bool allow_non_constant, bool addr,
6359 bool *non_constant_p)
6360 {
6361 const int nargs = call_expr_nargs (t);
6362 tree *args = (tree *) alloca (nargs * sizeof (tree));
6363 tree new_call;
6364 int i;
6365 for (i = 0; i < nargs; ++i)
6366 {
6367 args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
6368 allow_non_constant, addr,
6369 non_constant_p);
6370 if (allow_non_constant && *non_constant_p)
6371 return t;
6372 }
6373 if (*non_constant_p)
6374 return t;
6375 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
6376 CALL_EXPR_FN (t), nargs, args);
6377 return fold (new_call);
6378 }
6379
6380 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
6381 the type of the value to match. */
6382
6383 static tree
6384 adjust_temp_type (tree type, tree temp)
6385 {
6386 if (TREE_TYPE (temp) == type)
6387 return temp;
6388 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
6389 if (TREE_CODE (temp) == CONSTRUCTOR)
6390 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
6391 gcc_assert (SCALAR_TYPE_P (type));
6392 return cp_fold_convert (type, temp);
6393 }
6394
6395 /* Subroutine of cxx_eval_call_expression.
6396 We are processing a call expression (either CALL_EXPR or
6397 AGGR_INIT_EXPR) in the call context of OLD_CALL. Evaluate
6398 all arguments and bind their values to correspondings
6399 parameters, making up the NEW_CALL context. */
6400
6401 static void
6402 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
6403 constexpr_call *new_call,
6404 bool allow_non_constant,
6405 bool *non_constant_p)
6406 {
6407 const int nargs = call_expr_nargs (t);
6408 tree fun = new_call->fundef->decl;
6409 tree parms = DECL_ARGUMENTS (fun);
6410 int i;
6411 for (i = 0; i < nargs; ++i)
6412 {
6413 tree x, arg;
6414 tree type = parms ? TREE_TYPE (parms) : void_type_node;
6415 /* For member function, the first argument is a pointer to the implied
6416 object. And for an object contruction, don't bind `this' before
6417 it is fully constructed. */
6418 if (i == 0 && DECL_CONSTRUCTOR_P (fun))
6419 goto next;
6420 x = get_nth_callarg (t, i);
6421 arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
6422 TREE_CODE (type) == REFERENCE_TYPE,
6423 non_constant_p);
6424 /* Don't VERIFY_CONSTANT here. */
6425 if (*non_constant_p && allow_non_constant)
6426 return;
6427 /* Just discard ellipsis args after checking their constantitude. */
6428 if (!parms)
6429 continue;
6430 if (*non_constant_p)
6431 /* Don't try to adjust the type of non-constant args. */
6432 goto next;
6433
6434 /* Make sure the binding has the same type as the parm. */
6435 if (TREE_CODE (type) != REFERENCE_TYPE)
6436 arg = adjust_temp_type (type, arg);
6437 new_call->bindings = tree_cons (parms, arg, new_call->bindings);
6438 next:
6439 parms = TREE_CHAIN (parms);
6440 }
6441 }
6442
6443 /* Variables and functions to manage constexpr call expansion context.
6444 These do not need to be marked for PCH or GC. */
6445
6446 /* FIXME remember and print actual constant arguments. */
6447 static VEC(tree,heap) *call_stack = NULL;
6448 static int call_stack_tick;
6449 static int last_cx_error_tick;
6450
6451 static bool
6452 push_cx_call_context (tree call)
6453 {
6454 ++call_stack_tick;
6455 if (!EXPR_HAS_LOCATION (call))
6456 SET_EXPR_LOCATION (call, input_location);
6457 VEC_safe_push (tree, heap, call_stack, call);
6458 if (VEC_length (tree, call_stack) > (unsigned) max_constexpr_depth)
6459 return false;
6460 return true;
6461 }
6462
6463 static void
6464 pop_cx_call_context (void)
6465 {
6466 ++call_stack_tick;
6467 VEC_pop (tree, call_stack);
6468 }
6469
6470 VEC(tree,heap) *
6471 cx_error_context (void)
6472 {
6473 VEC(tree,heap) *r = NULL;
6474 if (call_stack_tick != last_cx_error_tick
6475 && !VEC_empty (tree, call_stack))
6476 r = call_stack;
6477 last_cx_error_tick = call_stack_tick;
6478 return r;
6479 }
6480
6481 /* Subroutine of cxx_eval_constant_expression.
6482 Evaluate the call expression tree T in the context of OLD_CALL expression
6483 evaluation. */
6484
6485 static tree
6486 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
6487 bool allow_non_constant, bool addr,
6488 bool *non_constant_p)
6489 {
6490 location_t loc = EXPR_LOC_OR_HERE (t);
6491 tree fun = get_function_named_in_call (t);
6492 tree result;
6493 constexpr_call new_call = { NULL, NULL, NULL, 0 };
6494 constexpr_call **slot;
6495 constexpr_call *entry;
6496 bool depth_ok;
6497
6498 if (TREE_CODE (fun) != FUNCTION_DECL)
6499 {
6500 /* Might be a constexpr function pointer. */
6501 fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
6502 /*addr*/false, non_constant_p);
6503 if (TREE_CODE (fun) == ADDR_EXPR)
6504 fun = TREE_OPERAND (fun, 0);
6505 }
6506 if (TREE_CODE (fun) != FUNCTION_DECL)
6507 {
6508 if (!allow_non_constant && !*non_constant_p)
6509 error_at (loc, "expression %qE does not designate a constexpr "
6510 "function", fun);
6511 *non_constant_p = true;
6512 return t;
6513 }
6514 if (DECL_CLONED_FUNCTION_P (fun))
6515 fun = DECL_CLONED_FUNCTION (fun);
6516 if (is_builtin_fn (fun))
6517 return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
6518 addr, non_constant_p);
6519 if (!DECL_DECLARED_CONSTEXPR_P (fun))
6520 {
6521 if (!allow_non_constant)
6522 {
6523 error_at (loc, "call to non-constexpr function %qD", fun);
6524 explain_invalid_constexpr_fn (fun);
6525 }
6526 *non_constant_p = true;
6527 return t;
6528 }
6529
6530 /* Shortcut trivial copy constructor/op=. */
6531 if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
6532 {
6533 tree arg = convert_from_reference (get_nth_callarg (t, 1));
6534 return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
6535 addr, non_constant_p);
6536 }
6537
6538 /* If in direct recursive call, optimize definition search. */
6539 if (old_call != NULL && old_call->fundef->decl == fun)
6540 new_call.fundef = old_call->fundef;
6541 else
6542 {
6543 new_call.fundef = retrieve_constexpr_fundef (fun);
6544 if (new_call.fundef == NULL || new_call.fundef->body == NULL)
6545 {
6546 if (!allow_non_constant)
6547 {
6548 if (DECL_INITIAL (fun))
6549 {
6550 /* The definition of fun was somehow unsuitable. */
6551 error_at (loc, "%qD called in a constant expression", fun);
6552 explain_invalid_constexpr_fn (fun);
6553 }
6554 else
6555 error_at (loc, "%qD used before its definition", fun);
6556 }
6557 *non_constant_p = true;
6558 return t;
6559 }
6560 }
6561 cxx_bind_parameters_in_call (old_call, t, &new_call,
6562 allow_non_constant, non_constant_p);
6563 if (*non_constant_p)
6564 return t;
6565
6566 depth_ok = push_cx_call_context (t);
6567
6568 new_call.hash
6569 = iterative_hash_template_arg (new_call.bindings,
6570 constexpr_fundef_hash (new_call.fundef));
6571
6572 /* If we have seen this call before, we are done. */
6573 maybe_initialize_constexpr_call_table ();
6574 slot = (constexpr_call **)
6575 htab_find_slot (constexpr_call_table, &new_call, INSERT);
6576 entry = *slot;
6577 if (entry == NULL)
6578 {
6579 /* We need to keep a pointer to the entry, not just the slot, as the
6580 slot can move in the call to cxx_eval_builtin_function_call. */
6581 *slot = entry = ggc_alloc_constexpr_call ();
6582 *entry = new_call;
6583 }
6584 /* Calls which are in progress have their result set to NULL
6585 so that we can detect circular dependencies. */
6586 else if (entry->result == NULL)
6587 {
6588 if (!allow_non_constant)
6589 error ("call has circular dependency");
6590 *non_constant_p = true;
6591 entry->result = result = error_mark_node;
6592 }
6593
6594 if (!depth_ok)
6595 {
6596 if (!allow_non_constant)
6597 error ("constexpr evaluation depth exceeds maximum of %d (use "
6598 "-fconstexpr-depth= to increase the maximum)",
6599 max_constexpr_depth);
6600 *non_constant_p = true;
6601 entry->result = result = error_mark_node;
6602 }
6603 else
6604 {
6605 result = entry->result;
6606 if (!result || result == error_mark_node)
6607 result = (cxx_eval_constant_expression
6608 (&new_call, new_call.fundef->body,
6609 allow_non_constant, addr,
6610 non_constant_p));
6611 if (result == error_mark_node)
6612 *non_constant_p = true;
6613 if (*non_constant_p)
6614 entry->result = result = error_mark_node;
6615 else
6616 {
6617 /* If this was a call to initialize an object, set the type of
6618 the CONSTRUCTOR to the type of that object. */
6619 if (DECL_CONSTRUCTOR_P (fun))
6620 {
6621 tree ob_arg = get_nth_callarg (t, 0);
6622 STRIP_NOPS (ob_arg);
6623 gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
6624 && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
6625 result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
6626 result);
6627 }
6628 entry->result = result;
6629 }
6630 }
6631
6632 pop_cx_call_context ();
6633 return unshare_expr (result);
6634 }
6635
6636 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
6637
6638 bool
6639 reduced_constant_expression_p (tree t)
6640 {
6641 if (TREE_OVERFLOW_P (t))
6642 /* Integer overflow makes this not a constant expression. */
6643 return false;
6644 /* FIXME are we calling this too much? */
6645 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6646 }
6647
6648 /* Some expressions may have constant operands but are not constant
6649 themselves, such as 1/0. Call this function (or rather, the macro
6650 following it) to check for that condition.
6651
6652 We only call this in places that require an arithmetic constant, not in
6653 places where we might have a non-constant expression that can be a
6654 component of a constant expression, such as the address of a constexpr
6655 variable that might be dereferenced later. */
6656
6657 static bool
6658 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p)
6659 {
6660 if (!*non_constant_p && !reduced_constant_expression_p (t))
6661 {
6662 if (!allow_non_constant)
6663 {
6664 /* If T was already folded to a _CST with TREE_OVERFLOW set,
6665 printing the folded constant isn't helpful. */
6666 if (TREE_OVERFLOW_P (t))
6667 {
6668 permerror (input_location, "overflow in constant expression");
6669 /* If we're being permissive (and are in an enforcing
6670 context), consider this constant. */
6671 if (flag_permissive)
6672 return false;
6673 }
6674 else
6675 error ("%q+E is not a constant expression", t);
6676 }
6677 *non_constant_p = true;
6678 }
6679 return *non_constant_p;
6680 }
6681 #define VERIFY_CONSTANT(X) \
6682 do { \
6683 if (verify_constant ((X), allow_non_constant, non_constant_p)) \
6684 return t; \
6685 } while (0)
6686
6687 /* Subroutine of cxx_eval_constant_expression.
6688 Attempt to reduce the unary expression tree T to a compile time value.
6689 If successful, return the value. Otherwise issue a diagnostic
6690 and return error_mark_node. */
6691
6692 static tree
6693 cxx_eval_unary_expression (const constexpr_call *call, tree t,
6694 bool allow_non_constant, bool addr,
6695 bool *non_constant_p)
6696 {
6697 tree r;
6698 tree orig_arg = TREE_OPERAND (t, 0);
6699 tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6700 addr, non_constant_p);
6701 VERIFY_CONSTANT (arg);
6702 if (arg == orig_arg)
6703 return t;
6704 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6705 VERIFY_CONSTANT (r);
6706 return r;
6707 }
6708
6709 /* Subroutine of cxx_eval_constant_expression.
6710 Like cxx_eval_unary_expression, except for binary expressions. */
6711
6712 static tree
6713 cxx_eval_binary_expression (const constexpr_call *call, tree t,
6714 bool allow_non_constant, bool addr,
6715 bool *non_constant_p)
6716 {
6717 tree r;
6718 tree orig_lhs = TREE_OPERAND (t, 0);
6719 tree orig_rhs = TREE_OPERAND (t, 1);
6720 tree lhs, rhs;
6721 lhs = cxx_eval_constant_expression (call, orig_lhs,
6722 allow_non_constant, addr,
6723 non_constant_p);
6724 VERIFY_CONSTANT (lhs);
6725 rhs = cxx_eval_constant_expression (call, orig_rhs,
6726 allow_non_constant, addr,
6727 non_constant_p);
6728 VERIFY_CONSTANT (rhs);
6729 if (lhs == orig_lhs && rhs == orig_rhs)
6730 return t;
6731 r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6732 VERIFY_CONSTANT (r);
6733 return r;
6734 }
6735
6736 /* Subroutine of cxx_eval_constant_expression.
6737 Attempt to evaluate condition expressions. Dead branches are not
6738 looked into. */
6739
6740 static tree
6741 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6742 bool allow_non_constant, bool addr,
6743 bool *non_constant_p)
6744 {
6745 tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6746 allow_non_constant, addr,
6747 non_constant_p);
6748 VERIFY_CONSTANT (val);
6749 /* Don't VERIFY_CONSTANT the other operands. */
6750 if (integer_zerop (val))
6751 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6752 allow_non_constant, addr,
6753 non_constant_p);
6754 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6755 allow_non_constant, addr,
6756 non_constant_p);
6757 }
6758
6759 /* Subroutine of cxx_eval_constant_expression.
6760 Attempt to reduce a reference to an array slot. */
6761
6762 static tree
6763 cxx_eval_array_reference (const constexpr_call *call, tree t,
6764 bool allow_non_constant, bool addr,
6765 bool *non_constant_p)
6766 {
6767 tree oldary = TREE_OPERAND (t, 0);
6768 tree ary = cxx_eval_constant_expression (call, oldary,
6769 allow_non_constant, addr,
6770 non_constant_p);
6771 tree index, oldidx;
6772 HOST_WIDE_INT i;
6773 tree elem_type;
6774 unsigned len, elem_nchars = 1;
6775 if (*non_constant_p)
6776 return t;
6777 oldidx = TREE_OPERAND (t, 1);
6778 index = cxx_eval_constant_expression (call, oldidx,
6779 allow_non_constant, false,
6780 non_constant_p);
6781 VERIFY_CONSTANT (index);
6782 if (addr && ary == oldary && index == oldidx)
6783 return t;
6784 else if (addr)
6785 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6786 elem_type = TREE_TYPE (TREE_TYPE (ary));
6787 if (TREE_CODE (ary) == CONSTRUCTOR)
6788 len = CONSTRUCTOR_NELTS (ary);
6789 else if (TREE_CODE (ary) == STRING_CST)
6790 {
6791 elem_nchars = (TYPE_PRECISION (elem_type)
6792 / TYPE_PRECISION (char_type_node));
6793 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
6794 }
6795 else
6796 {
6797 /* We can't do anything with other tree codes, so use
6798 VERIFY_CONSTANT to complain and fail. */
6799 VERIFY_CONSTANT (ary);
6800 gcc_unreachable ();
6801 }
6802 if (compare_tree_int (index, len) >= 0)
6803 {
6804 if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
6805 {
6806 /* If it's within the array bounds but doesn't have an explicit
6807 initializer, it's value-initialized. */
6808 tree val = build_value_init (elem_type, tf_warning_or_error);
6809 return cxx_eval_constant_expression (call, val,
6810 allow_non_constant, addr,
6811 non_constant_p);
6812 }
6813
6814 if (!allow_non_constant)
6815 error ("array subscript out of bound");
6816 *non_constant_p = true;
6817 return t;
6818 }
6819 i = tree_low_cst (index, 0);
6820 if (TREE_CODE (ary) == CONSTRUCTOR)
6821 return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
6822 else if (elem_nchars == 1)
6823 return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6824 TREE_STRING_POINTER (ary)[i]);
6825 else
6826 {
6827 tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
6828 return native_interpret_expr (type, (const unsigned char *)
6829 TREE_STRING_POINTER (ary)
6830 + i * elem_nchars, elem_nchars);
6831 }
6832 /* Don't VERIFY_CONSTANT here. */
6833 }
6834
6835 /* Subroutine of cxx_eval_constant_expression.
6836 Attempt to reduce a field access of a value of class type. */
6837
6838 static tree
6839 cxx_eval_component_reference (const constexpr_call *call, tree t,
6840 bool allow_non_constant, bool addr,
6841 bool *non_constant_p)
6842 {
6843 unsigned HOST_WIDE_INT i;
6844 tree field;
6845 tree value;
6846 tree part = TREE_OPERAND (t, 1);
6847 tree orig_whole = TREE_OPERAND (t, 0);
6848 tree whole = cxx_eval_constant_expression (call, orig_whole,
6849 allow_non_constant, addr,
6850 non_constant_p);
6851 if (whole == orig_whole)
6852 return t;
6853 if (addr)
6854 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6855 whole, part, NULL_TREE);
6856 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6857 CONSTRUCTOR. */
6858 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6859 {
6860 if (!allow_non_constant)
6861 error ("%qE is not a constant expression", orig_whole);
6862 *non_constant_p = true;
6863 }
6864 if (DECL_MUTABLE_P (part))
6865 {
6866 if (!allow_non_constant)
6867 error ("mutable %qD is not usable in a constant expression", part);
6868 *non_constant_p = true;
6869 }
6870 if (*non_constant_p)
6871 return t;
6872 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6873 {
6874 if (field == part)
6875 return value;
6876 }
6877 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
6878 && CONSTRUCTOR_NELTS (whole) > 0)
6879 {
6880 /* DR 1188 says we don't have to deal with this. */
6881 if (!allow_non_constant)
6882 error ("accessing %qD member instead of initialized %qD member in "
6883 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6884 *non_constant_p = true;
6885 return t;
6886 }
6887
6888 /* If there's no explicit init for this field, it's value-initialized. */
6889 value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
6890 return cxx_eval_constant_expression (call, value,
6891 allow_non_constant, addr,
6892 non_constant_p);
6893 }
6894
6895 /* Subroutine of cxx_eval_constant_expression.
6896 Attempt to reduce a field access of a value of class type that is
6897 expressed as a BIT_FIELD_REF. */
6898
6899 static tree
6900 cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
6901 bool allow_non_constant, bool addr,
6902 bool *non_constant_p)
6903 {
6904 tree orig_whole = TREE_OPERAND (t, 0);
6905 tree retval, fldval, utype, mask;
6906 bool fld_seen = false;
6907 HOST_WIDE_INT istart, isize;
6908 tree whole = cxx_eval_constant_expression (call, orig_whole,
6909 allow_non_constant, addr,
6910 non_constant_p);
6911 tree start, field, value;
6912 unsigned HOST_WIDE_INT i;
6913
6914 if (whole == orig_whole)
6915 return t;
6916 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6917 CONSTRUCTOR. */
6918 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6919 {
6920 if (!allow_non_constant)
6921 error ("%qE is not a constant expression", orig_whole);
6922 *non_constant_p = true;
6923 }
6924 if (*non_constant_p)
6925 return t;
6926
6927 start = TREE_OPERAND (t, 2);
6928 istart = tree_low_cst (start, 0);
6929 isize = tree_low_cst (TREE_OPERAND (t, 1), 0);
6930 utype = TREE_TYPE (t);
6931 if (!TYPE_UNSIGNED (utype))
6932 utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
6933 retval = build_int_cst (utype, 0);
6934 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6935 {
6936 tree bitpos = bit_position (field);
6937 if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
6938 return value;
6939 if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
6940 && TREE_CODE (value) == INTEGER_CST
6941 && host_integerp (bitpos, 0)
6942 && host_integerp (DECL_SIZE (field), 0))
6943 {
6944 HOST_WIDE_INT bit = tree_low_cst (bitpos, 0);
6945 HOST_WIDE_INT sz = tree_low_cst (DECL_SIZE (field), 0);
6946 HOST_WIDE_INT shift;
6947 if (bit >= istart && bit + sz <= istart + isize)
6948 {
6949 fldval = fold_convert (utype, value);
6950 mask = build_int_cst_type (utype, -1);
6951 mask = fold_build2 (LSHIFT_EXPR, utype, mask,
6952 size_int (TYPE_PRECISION (utype) - sz));
6953 mask = fold_build2 (RSHIFT_EXPR, utype, mask,
6954 size_int (TYPE_PRECISION (utype) - sz));
6955 fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
6956 shift = bit - istart;
6957 if (BYTES_BIG_ENDIAN)
6958 shift = TYPE_PRECISION (utype) - shift - sz;
6959 fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
6960 size_int (shift));
6961 retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
6962 fld_seen = true;
6963 }
6964 }
6965 }
6966 if (fld_seen)
6967 return fold_convert (TREE_TYPE (t), retval);
6968 gcc_unreachable ();
6969 return error_mark_node;
6970 }
6971
6972 /* Subroutine of cxx_eval_constant_expression.
6973 Evaluate a short-circuited logical expression T in the context
6974 of a given constexpr CALL. BAILOUT_VALUE is the value for
6975 early return. CONTINUE_VALUE is used here purely for
6976 sanity check purposes. */
6977
6978 static tree
6979 cxx_eval_logical_expression (const constexpr_call *call, tree t,
6980 tree bailout_value, tree continue_value,
6981 bool allow_non_constant, bool addr,
6982 bool *non_constant_p)
6983 {
6984 tree r;
6985 tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6986 allow_non_constant, addr,
6987 non_constant_p);
6988 VERIFY_CONSTANT (lhs);
6989 if (tree_int_cst_equal (lhs, bailout_value))
6990 return lhs;
6991 gcc_assert (tree_int_cst_equal (lhs, continue_value));
6992 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6993 allow_non_constant, addr, non_constant_p);
6994 VERIFY_CONSTANT (r);
6995 return r;
6996 }
6997
6998 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
6999 CONSTRUCTOR elements to initialize (part of) an object containing that
7000 field. Return a pointer to the constructor_elt corresponding to the
7001 initialization of the field. */
7002
7003 static constructor_elt *
7004 base_field_constructor_elt (VEC(constructor_elt,gc) *v, tree ref)
7005 {
7006 tree aggr = TREE_OPERAND (ref, 0);
7007 tree field = TREE_OPERAND (ref, 1);
7008 HOST_WIDE_INT i;
7009 constructor_elt *ce;
7010
7011 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
7012
7013 if (TREE_CODE (aggr) == COMPONENT_REF)
7014 {
7015 constructor_elt *base_ce
7016 = base_field_constructor_elt (v, aggr);
7017 v = CONSTRUCTOR_ELTS (base_ce->value);
7018 }
7019
7020 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7021 if (ce->index == field)
7022 return ce;
7023
7024 gcc_unreachable ();
7025 return NULL;
7026 }
7027
7028 /* Subroutine of cxx_eval_constant_expression.
7029 The expression tree T denotes a C-style array or a C-style
7030 aggregate. Reduce it to a constant expression. */
7031
7032 static tree
7033 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
7034 bool allow_non_constant, bool addr,
7035 bool *non_constant_p)
7036 {
7037 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
7038 VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc,
7039 VEC_length (constructor_elt, v));
7040 constructor_elt *ce;
7041 HOST_WIDE_INT i;
7042 bool changed = false;
7043 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
7044 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7045 {
7046 tree elt = cxx_eval_constant_expression (call, ce->value,
7047 allow_non_constant, addr,
7048 non_constant_p);
7049 /* Don't VERIFY_CONSTANT here. */
7050 if (allow_non_constant && *non_constant_p)
7051 goto fail;
7052 if (elt != ce->value)
7053 changed = true;
7054 if (TREE_CODE (ce->index) == COMPONENT_REF)
7055 {
7056 /* This is an initialization of a vfield inside a base
7057 subaggregate that we already initialized; push this
7058 initialization into the previous initialization. */
7059 constructor_elt *inner = base_field_constructor_elt (n, ce->index);
7060 inner->value = elt;
7061 }
7062 else if (TREE_CODE (ce->index) == NOP_EXPR)
7063 {
7064 /* This is an initializer for an empty base; now that we've
7065 checked that it's constant, we can ignore it. */
7066 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (ce->index))));
7067 }
7068 else
7069 CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
7070 }
7071 if (*non_constant_p || !changed)
7072 {
7073 fail:
7074 VEC_free (constructor_elt, gc, n);
7075 return t;
7076 }
7077 t = build_constructor (TREE_TYPE (t), n);
7078 TREE_CONSTANT (t) = true;
7079 return t;
7080 }
7081
7082 /* Subroutine of cxx_eval_constant_expression.
7083 The expression tree T is a VEC_INIT_EXPR which denotes the desired
7084 initialization of a non-static data member of array type. Reduce it to a
7085 CONSTRUCTOR.
7086
7087 Note that apart from value-initialization (when VALUE_INIT is true),
7088 this is only intended to support value-initialization and the
7089 initializations done by defaulted constructors for classes with
7090 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
7091 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
7092 for the copy/move constructor. */
7093
7094 static tree
7095 cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
7096 bool value_init, bool allow_non_constant, bool addr,
7097 bool *non_constant_p)
7098 {
7099 tree elttype = TREE_TYPE (atype);
7100 int max = tree_low_cst (array_type_nelts (atype), 0);
7101 VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc, max + 1);
7102 bool pre_init = false;
7103 int i;
7104
7105 /* For the default constructor, build up a call to the default
7106 constructor of the element type. We only need to handle class types
7107 here, as for a constructor to be constexpr, all members must be
7108 initialized, which for a defaulted default constructor means they must
7109 be of a class type with a constexpr default constructor. */
7110 if (TREE_CODE (elttype) == ARRAY_TYPE)
7111 /* We only do this at the lowest level. */;
7112 else if (value_init)
7113 {
7114 init = build_value_init (elttype, tf_warning_or_error);
7115 init = cxx_eval_constant_expression
7116 (call, init, allow_non_constant, addr, non_constant_p);
7117 pre_init = true;
7118 }
7119 else if (!init)
7120 {
7121 VEC(tree,gc) *argvec = make_tree_vector ();
7122 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7123 &argvec, elttype, LOOKUP_NORMAL,
7124 tf_warning_or_error);
7125 release_tree_vector (argvec);
7126 init = cxx_eval_constant_expression (call, init, allow_non_constant,
7127 addr, non_constant_p);
7128 pre_init = true;
7129 }
7130
7131 if (*non_constant_p && !allow_non_constant)
7132 goto fail;
7133
7134 for (i = 0; i <= max; ++i)
7135 {
7136 tree idx = build_int_cst (size_type_node, i);
7137 tree eltinit;
7138 if (TREE_CODE (elttype) == ARRAY_TYPE)
7139 {
7140 /* A multidimensional array; recurse. */
7141 if (value_init || init == NULL_TREE)
7142 eltinit = NULL_TREE;
7143 else
7144 eltinit = cp_build_array_ref (input_location, init, idx,
7145 tf_warning_or_error);
7146 eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
7147 allow_non_constant, addr,
7148 non_constant_p);
7149 }
7150 else if (pre_init)
7151 {
7152 /* Initializing an element using value or default initialization
7153 we just pre-built above. */
7154 if (i == 0)
7155 eltinit = init;
7156 else
7157 eltinit = unshare_expr (init);
7158 }
7159 else
7160 {
7161 /* Copying an element. */
7162 VEC(tree,gc) *argvec;
7163 gcc_assert (same_type_ignoring_top_level_qualifiers_p
7164 (atype, TREE_TYPE (init)));
7165 eltinit = cp_build_array_ref (input_location, init, idx,
7166 tf_warning_or_error);
7167 if (!real_lvalue_p (init))
7168 eltinit = move (eltinit);
7169 argvec = make_tree_vector ();
7170 VEC_quick_push (tree, argvec, eltinit);
7171 eltinit = (build_special_member_call
7172 (NULL_TREE, complete_ctor_identifier, &argvec,
7173 elttype, LOOKUP_NORMAL, tf_warning_or_error));
7174 release_tree_vector (argvec);
7175 eltinit = cxx_eval_constant_expression
7176 (call, eltinit, allow_non_constant, addr, non_constant_p);
7177 }
7178 if (*non_constant_p && !allow_non_constant)
7179 goto fail;
7180 CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
7181 }
7182
7183 if (!*non_constant_p)
7184 {
7185 init = build_constructor (atype, n);
7186 TREE_CONSTANT (init) = true;
7187 return init;
7188 }
7189
7190 fail:
7191 VEC_free (constructor_elt, gc, n);
7192 return init;
7193 }
7194
7195 static tree
7196 cxx_eval_vec_init (const constexpr_call *call, tree t,
7197 bool allow_non_constant, bool addr,
7198 bool *non_constant_p)
7199 {
7200 tree atype = TREE_TYPE (t);
7201 tree init = VEC_INIT_EXPR_INIT (t);
7202 tree r = cxx_eval_vec_init_1 (call, atype, init,
7203 VEC_INIT_EXPR_VALUE_INIT (t),
7204 allow_non_constant, addr, non_constant_p);
7205 if (*non_constant_p)
7206 return t;
7207 else
7208 return r;
7209 }
7210
7211 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
7212 match. We want to be less strict for simple *& folding; if we have a
7213 non-const temporary that we access through a const pointer, that should
7214 work. We handle this here rather than change fold_indirect_ref_1
7215 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
7216 don't really make sense outside of constant expression evaluation. Also
7217 we want to allow folding to COMPONENT_REF, which could cause trouble
7218 with TBAA in fold_indirect_ref_1.
7219
7220 Try to keep this function synced with fold_indirect_ref_1. */
7221
7222 static tree
7223 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
7224 {
7225 tree sub, subtype;
7226
7227 sub = op0;
7228 STRIP_NOPS (sub);
7229 subtype = TREE_TYPE (sub);
7230 if (!POINTER_TYPE_P (subtype))
7231 return NULL_TREE;
7232
7233 if (TREE_CODE (sub) == ADDR_EXPR)
7234 {
7235 tree op = TREE_OPERAND (sub, 0);
7236 tree optype = TREE_TYPE (op);
7237
7238 /* *&CONST_DECL -> to the value of the const decl. */
7239 if (TREE_CODE (op) == CONST_DECL)
7240 return DECL_INITIAL (op);
7241 /* *&p => p; make sure to handle *&"str"[cst] here. */
7242 if (same_type_ignoring_top_level_qualifiers_p (optype, type))
7243 {
7244 tree fop = fold_read_from_constant_string (op);
7245 if (fop)
7246 return fop;
7247 else
7248 return op;
7249 }
7250 /* *(foo *)&fooarray => fooarray[0] */
7251 else if (TREE_CODE (optype) == ARRAY_TYPE
7252 && (same_type_ignoring_top_level_qualifiers_p
7253 (type, TREE_TYPE (optype))))
7254 {
7255 tree type_domain = TYPE_DOMAIN (optype);
7256 tree min_val = size_zero_node;
7257 if (type_domain && TYPE_MIN_VALUE (type_domain))
7258 min_val = TYPE_MIN_VALUE (type_domain);
7259 return build4_loc (loc, ARRAY_REF, type, op, min_val,
7260 NULL_TREE, NULL_TREE);
7261 }
7262 /* *(foo *)&complexfoo => __real__ complexfoo */
7263 else if (TREE_CODE (optype) == COMPLEX_TYPE
7264 && (same_type_ignoring_top_level_qualifiers_p
7265 (type, TREE_TYPE (optype))))
7266 return fold_build1_loc (loc, REALPART_EXPR, type, op);
7267 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
7268 else if (TREE_CODE (optype) == VECTOR_TYPE
7269 && (same_type_ignoring_top_level_qualifiers_p
7270 (type, TREE_TYPE (optype))))
7271 {
7272 tree part_width = TYPE_SIZE (type);
7273 tree index = bitsize_int (0);
7274 return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
7275 }
7276 /* Also handle conversion to an empty base class, which
7277 is represented with a NOP_EXPR. */
7278 else if (is_empty_class (type)
7279 && CLASS_TYPE_P (optype)
7280 && DERIVED_FROM_P (type, optype))
7281 {
7282 *empty_base = true;
7283 return op;
7284 }
7285 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
7286 else if (RECORD_OR_UNION_TYPE_P (optype))
7287 {
7288 tree field = TYPE_FIELDS (optype);
7289 for (; field; field = DECL_CHAIN (field))
7290 if (TREE_CODE (field) == FIELD_DECL
7291 && integer_zerop (byte_position (field))
7292 && (same_type_ignoring_top_level_qualifiers_p
7293 (TREE_TYPE (field), type)))
7294 {
7295 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
7296 break;
7297 }
7298 }
7299 }
7300 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
7301 && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
7302 {
7303 tree op00 = TREE_OPERAND (sub, 0);
7304 tree op01 = TREE_OPERAND (sub, 1);
7305
7306 STRIP_NOPS (op00);
7307 if (TREE_CODE (op00) == ADDR_EXPR)
7308 {
7309 tree op00type;
7310 op00 = TREE_OPERAND (op00, 0);
7311 op00type = TREE_TYPE (op00);
7312
7313 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
7314 if (TREE_CODE (op00type) == VECTOR_TYPE
7315 && (same_type_ignoring_top_level_qualifiers_p
7316 (type, TREE_TYPE (op00type))))
7317 {
7318 HOST_WIDE_INT offset = tree_low_cst (op01, 0);
7319 tree part_width = TYPE_SIZE (type);
7320 unsigned HOST_WIDE_INT part_widthi = tree_low_cst (part_width, 0)/BITS_PER_UNIT;
7321 unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
7322 tree index = bitsize_int (indexi);
7323
7324 if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
7325 return fold_build3_loc (loc,
7326 BIT_FIELD_REF, type, op00,
7327 part_width, index);
7328
7329 }
7330 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
7331 else if (TREE_CODE (op00type) == COMPLEX_TYPE
7332 && (same_type_ignoring_top_level_qualifiers_p
7333 (type, TREE_TYPE (op00type))))
7334 {
7335 tree size = TYPE_SIZE_UNIT (type);
7336 if (tree_int_cst_equal (size, op01))
7337 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
7338 }
7339 /* ((foo *)&fooarray)[1] => fooarray[1] */
7340 else if (TREE_CODE (op00type) == ARRAY_TYPE
7341 && (same_type_ignoring_top_level_qualifiers_p
7342 (type, TREE_TYPE (op00type))))
7343 {
7344 tree type_domain = TYPE_DOMAIN (op00type);
7345 tree min_val = size_zero_node;
7346 if (type_domain && TYPE_MIN_VALUE (type_domain))
7347 min_val = TYPE_MIN_VALUE (type_domain);
7348 op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
7349 TYPE_SIZE_UNIT (type));
7350 op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
7351 return build4_loc (loc, ARRAY_REF, type, op00, op01,
7352 NULL_TREE, NULL_TREE);
7353 }
7354 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
7355 else if (RECORD_OR_UNION_TYPE_P (op00type))
7356 {
7357 tree field = TYPE_FIELDS (op00type);
7358 for (; field; field = DECL_CHAIN (field))
7359 if (TREE_CODE (field) == FIELD_DECL
7360 && tree_int_cst_equal (byte_position (field), op01)
7361 && (same_type_ignoring_top_level_qualifiers_p
7362 (TREE_TYPE (field), type)))
7363 {
7364 return fold_build3 (COMPONENT_REF, type, op00,
7365 field, NULL_TREE);
7366 break;
7367 }
7368 }
7369 }
7370 }
7371 /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
7372 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
7373 && (same_type_ignoring_top_level_qualifiers_p
7374 (type, TREE_TYPE (TREE_TYPE (subtype)))))
7375 {
7376 tree type_domain;
7377 tree min_val = size_zero_node;
7378 sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
7379 if (!sub)
7380 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
7381 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
7382 if (type_domain && TYPE_MIN_VALUE (type_domain))
7383 min_val = TYPE_MIN_VALUE (type_domain);
7384 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
7385 NULL_TREE);
7386 }
7387
7388 return NULL_TREE;
7389 }
7390
7391 static tree
7392 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
7393 bool allow_non_constant, bool addr,
7394 bool *non_constant_p)
7395 {
7396 tree orig_op0 = TREE_OPERAND (t, 0);
7397 tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
7398 /*addr*/false, non_constant_p);
7399 bool empty_base = false;
7400 tree r;
7401
7402 /* Don't VERIFY_CONSTANT here. */
7403 if (*non_constant_p)
7404 return t;
7405
7406 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
7407 &empty_base);
7408
7409 if (r)
7410 r = cxx_eval_constant_expression (call, r, allow_non_constant,
7411 addr, non_constant_p);
7412 else
7413 {
7414 tree sub = op0;
7415 STRIP_NOPS (sub);
7416 if (TREE_CODE (sub) == POINTER_PLUS_EXPR)
7417 {
7418 sub = TREE_OPERAND (sub, 0);
7419 STRIP_NOPS (sub);
7420 }
7421 if (TREE_CODE (sub) == ADDR_EXPR)
7422 {
7423 /* We couldn't fold to a constant value. Make sure it's not
7424 something we should have been able to fold. */
7425 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
7426 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
7427 /* DR 1188 says we don't have to deal with this. */
7428 if (!allow_non_constant)
7429 error ("accessing value of %qE through a %qT glvalue in a "
7430 "constant expression", build_fold_indirect_ref (sub),
7431 TREE_TYPE (t));
7432 *non_constant_p = true;
7433 return t;
7434 }
7435 }
7436
7437 /* If we're pulling out the value of an empty base, make sure
7438 that the whole object is constant and then return an empty
7439 CONSTRUCTOR. */
7440 if (empty_base)
7441 {
7442 VERIFY_CONSTANT (r);
7443 r = build_constructor (TREE_TYPE (t), NULL);
7444 TREE_CONSTANT (r) = true;
7445 }
7446
7447 if (r == NULL_TREE)
7448 return t;
7449 return r;
7450 }
7451
7452 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
7453 Shared between potential_constant_expression and
7454 cxx_eval_constant_expression. */
7455
7456 static void
7457 non_const_var_error (tree r)
7458 {
7459 tree type = TREE_TYPE (r);
7460 error ("the value of %qD is not usable in a constant "
7461 "expression", r);
7462 /* Avoid error cascade. */
7463 if (DECL_INITIAL (r) == error_mark_node)
7464 return;
7465 if (DECL_DECLARED_CONSTEXPR_P (r))
7466 inform (DECL_SOURCE_LOCATION (r),
7467 "%qD used in its own initializer", r);
7468 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7469 {
7470 if (!CP_TYPE_CONST_P (type))
7471 inform (DECL_SOURCE_LOCATION (r),
7472 "%q#D is not const", r);
7473 else if (CP_TYPE_VOLATILE_P (type))
7474 inform (DECL_SOURCE_LOCATION (r),
7475 "%q#D is volatile", r);
7476 else if (!DECL_INITIAL (r)
7477 || !TREE_CONSTANT (DECL_INITIAL (r)))
7478 inform (DECL_SOURCE_LOCATION (r),
7479 "%qD was not initialized with a constant "
7480 "expression", r);
7481 else
7482 gcc_unreachable ();
7483 }
7484 else
7485 {
7486 if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
7487 inform (DECL_SOURCE_LOCATION (r),
7488 "%qD was not declared %<constexpr%>", r);
7489 else
7490 inform (DECL_SOURCE_LOCATION (r),
7491 "%qD does not have integral or enumeration type",
7492 r);
7493 }
7494 }
7495
7496 /* Evaluate VEC_PERM_EXPR (v1, v2, mask). */
7497 static tree
7498 cxx_eval_vec_perm_expr (const constexpr_call *call, tree t,
7499 bool allow_non_constant, bool addr,
7500 bool * non_constant_p)
7501 {
7502 int i;
7503 tree args[3];
7504 tree val;
7505 tree elttype = TREE_TYPE (t);
7506
7507 for (i = 0; i < 3; i++)
7508 {
7509 args[i] = cxx_eval_constant_expression (call, TREE_OPERAND (t, i),
7510 allow_non_constant, addr,
7511 non_constant_p);
7512 if (*non_constant_p)
7513 goto fail;
7514 }
7515
7516 gcc_assert (TREE_CODE (TREE_TYPE (args[0])) == VECTOR_TYPE);
7517 gcc_assert (TREE_CODE (TREE_TYPE (args[1])) == VECTOR_TYPE);
7518 gcc_assert (TREE_CODE (TREE_TYPE (args[2])) == VECTOR_TYPE);
7519
7520 val = fold_ternary_loc (EXPR_LOCATION (t), VEC_PERM_EXPR, elttype,
7521 args[0], args[1], args[2]);
7522 if (val != NULL_TREE)
7523 return val;
7524
7525 fail:
7526 return t;
7527 }
7528
7529 /* Attempt to reduce the expression T to a constant value.
7530 On failure, issue diagnostic and return error_mark_node. */
7531 /* FIXME unify with c_fully_fold */
7532
7533 static tree
7534 cxx_eval_constant_expression (const constexpr_call *call, tree t,
7535 bool allow_non_constant, bool addr,
7536 bool *non_constant_p)
7537 {
7538 tree r = t;
7539
7540 if (t == error_mark_node)
7541 {
7542 *non_constant_p = true;
7543 return t;
7544 }
7545 if (CONSTANT_CLASS_P (t))
7546 {
7547 if (TREE_CODE (t) == PTRMEM_CST)
7548 t = cplus_expand_constant (t);
7549 return t;
7550 }
7551 if (TREE_CODE (t) != NOP_EXPR
7552 && reduced_constant_expression_p (t))
7553 return fold (t);
7554
7555 switch (TREE_CODE (t))
7556 {
7557 case VAR_DECL:
7558 if (addr)
7559 return t;
7560 /* else fall through. */
7561 case CONST_DECL:
7562 r = integral_constant_value (t);
7563 if (TREE_CODE (r) == TARGET_EXPR
7564 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
7565 r = TARGET_EXPR_INITIAL (r);
7566 if (DECL_P (r))
7567 {
7568 if (!allow_non_constant)
7569 non_const_var_error (r);
7570 *non_constant_p = true;
7571 }
7572 break;
7573
7574 case FUNCTION_DECL:
7575 case TEMPLATE_DECL:
7576 case LABEL_DECL:
7577 return t;
7578
7579 case PARM_DECL:
7580 if (call && DECL_CONTEXT (t) == call->fundef->decl)
7581 {
7582 if (DECL_ARTIFICIAL (t) && DECL_CONSTRUCTOR_P (DECL_CONTEXT (t)))
7583 {
7584 if (!allow_non_constant)
7585 sorry ("use of the value of the object being constructed "
7586 "in a constant expression");
7587 *non_constant_p = true;
7588 }
7589 else
7590 r = lookup_parameter_binding (call, t);
7591 }
7592 else if (addr)
7593 /* Defer in case this is only used for its type. */;
7594 else
7595 {
7596 if (!allow_non_constant)
7597 error ("%qE is not a constant expression", t);
7598 *non_constant_p = true;
7599 }
7600 break;
7601
7602 case CALL_EXPR:
7603 case AGGR_INIT_EXPR:
7604 r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
7605 non_constant_p);
7606 break;
7607
7608 case TARGET_EXPR:
7609 if (!literal_type_p (TREE_TYPE (t)))
7610 {
7611 if (!allow_non_constant)
7612 {
7613 error ("temporary of non-literal type %qT in a "
7614 "constant expression", TREE_TYPE (t));
7615 explain_non_literal_class (TREE_TYPE (t));
7616 }
7617 *non_constant_p = true;
7618 break;
7619 }
7620 /* else fall through. */
7621 case INIT_EXPR:
7622 /* Pass false for 'addr' because these codes indicate
7623 initialization of a temporary. */
7624 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7625 allow_non_constant, false,
7626 non_constant_p);
7627 if (!*non_constant_p)
7628 /* Adjust the type of the result to the type of the temporary. */
7629 r = adjust_temp_type (TREE_TYPE (t), r);
7630 break;
7631
7632 case SCOPE_REF:
7633 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7634 allow_non_constant, addr,
7635 non_constant_p);
7636 break;
7637
7638 case RETURN_EXPR:
7639 case NON_LVALUE_EXPR:
7640 case TRY_CATCH_EXPR:
7641 case CLEANUP_POINT_EXPR:
7642 case MUST_NOT_THROW_EXPR:
7643 case SAVE_EXPR:
7644 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7645 allow_non_constant, addr,
7646 non_constant_p);
7647 break;
7648
7649 /* These differ from cxx_eval_unary_expression in that this doesn't
7650 check for a constant operand or result; an address can be
7651 constant without its operand being, and vice versa. */
7652 case INDIRECT_REF:
7653 r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
7654 non_constant_p);
7655 break;
7656
7657 case ADDR_EXPR:
7658 {
7659 tree oldop = TREE_OPERAND (t, 0);
7660 tree op = cxx_eval_constant_expression (call, oldop,
7661 allow_non_constant,
7662 /*addr*/true,
7663 non_constant_p);
7664 /* Don't VERIFY_CONSTANT here. */
7665 if (*non_constant_p)
7666 return t;
7667 /* This function does more aggressive folding than fold itself. */
7668 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
7669 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
7670 return t;
7671 break;
7672 }
7673
7674 case REALPART_EXPR:
7675 case IMAGPART_EXPR:
7676 case CONJ_EXPR:
7677 case FIX_TRUNC_EXPR:
7678 case FLOAT_EXPR:
7679 case NEGATE_EXPR:
7680 case ABS_EXPR:
7681 case BIT_NOT_EXPR:
7682 case TRUTH_NOT_EXPR:
7683 case FIXED_CONVERT_EXPR:
7684 r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
7685 non_constant_p);
7686 break;
7687
7688 case COMPOUND_EXPR:
7689 {
7690 /* check_return_expr sometimes wraps a TARGET_EXPR in a
7691 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
7692 introduced by build_call_a. */
7693 tree op0 = TREE_OPERAND (t, 0);
7694 tree op1 = TREE_OPERAND (t, 1);
7695 STRIP_NOPS (op1);
7696 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7697 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7698 r = cxx_eval_constant_expression (call, op0, allow_non_constant,
7699 addr, non_constant_p);
7700 else
7701 {
7702 /* Check that the LHS is constant and then discard it. */
7703 cxx_eval_constant_expression (call, op0, allow_non_constant,
7704 false, non_constant_p);
7705 r = cxx_eval_constant_expression (call, op1, allow_non_constant,
7706 addr, non_constant_p);
7707 }
7708 }
7709 break;
7710
7711 case POINTER_PLUS_EXPR:
7712 case PLUS_EXPR:
7713 case MINUS_EXPR:
7714 case MULT_EXPR:
7715 case TRUNC_DIV_EXPR:
7716 case CEIL_DIV_EXPR:
7717 case FLOOR_DIV_EXPR:
7718 case ROUND_DIV_EXPR:
7719 case TRUNC_MOD_EXPR:
7720 case CEIL_MOD_EXPR:
7721 case ROUND_MOD_EXPR:
7722 case RDIV_EXPR:
7723 case EXACT_DIV_EXPR:
7724 case MIN_EXPR:
7725 case MAX_EXPR:
7726 case LSHIFT_EXPR:
7727 case RSHIFT_EXPR:
7728 case LROTATE_EXPR:
7729 case RROTATE_EXPR:
7730 case BIT_IOR_EXPR:
7731 case BIT_XOR_EXPR:
7732 case BIT_AND_EXPR:
7733 case TRUTH_XOR_EXPR:
7734 case LT_EXPR:
7735 case LE_EXPR:
7736 case GT_EXPR:
7737 case GE_EXPR:
7738 case EQ_EXPR:
7739 case NE_EXPR:
7740 case UNORDERED_EXPR:
7741 case ORDERED_EXPR:
7742 case UNLT_EXPR:
7743 case UNLE_EXPR:
7744 case UNGT_EXPR:
7745 case UNGE_EXPR:
7746 case UNEQ_EXPR:
7747 case RANGE_EXPR:
7748 case COMPLEX_EXPR:
7749 r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
7750 non_constant_p);
7751 break;
7752
7753 /* fold can introduce non-IF versions of these; still treat them as
7754 short-circuiting. */
7755 case TRUTH_AND_EXPR:
7756 case TRUTH_ANDIF_EXPR:
7757 r = cxx_eval_logical_expression (call, t, boolean_false_node,
7758 boolean_true_node,
7759 allow_non_constant, addr,
7760 non_constant_p);
7761 break;
7762
7763 case TRUTH_OR_EXPR:
7764 case TRUTH_ORIF_EXPR:
7765 r = cxx_eval_logical_expression (call, t, boolean_true_node,
7766 boolean_false_node,
7767 allow_non_constant, addr,
7768 non_constant_p);
7769 break;
7770
7771 case ARRAY_REF:
7772 r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
7773 non_constant_p);
7774 break;
7775
7776 case COMPONENT_REF:
7777 r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
7778 non_constant_p);
7779 break;
7780
7781 case BIT_FIELD_REF:
7782 r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
7783 non_constant_p);
7784 break;
7785
7786 case COND_EXPR:
7787 case VEC_COND_EXPR:
7788 r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
7789 non_constant_p);
7790 break;
7791
7792 case CONSTRUCTOR:
7793 r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
7794 non_constant_p);
7795 break;
7796
7797 case VEC_INIT_EXPR:
7798 /* We can get this in a defaulted constructor for a class with a
7799 non-static data member of array type. Either the initializer will
7800 be NULL, meaning default-initialization, or it will be an lvalue
7801 or xvalue of the same type, meaning direct-initialization from the
7802 corresponding member. */
7803 r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
7804 non_constant_p);
7805 break;
7806
7807 case VEC_PERM_EXPR:
7808 r = cxx_eval_vec_perm_expr (call, t, allow_non_constant, addr,
7809 non_constant_p);
7810 break;
7811
7812 case CONVERT_EXPR:
7813 case VIEW_CONVERT_EXPR:
7814 case NOP_EXPR:
7815 {
7816 tree oldop = TREE_OPERAND (t, 0);
7817 tree op = cxx_eval_constant_expression (call, oldop,
7818 allow_non_constant, addr,
7819 non_constant_p);
7820 if (*non_constant_p)
7821 return t;
7822 if (op == oldop)
7823 /* We didn't fold at the top so we could check for ptr-int
7824 conversion. */
7825 return fold (t);
7826 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), op);
7827 /* Conversion of an out-of-range value has implementation-defined
7828 behavior; the language considers it different from arithmetic
7829 overflow, which is undefined. */
7830 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
7831 TREE_OVERFLOW (r) = false;
7832 }
7833 break;
7834
7835 case EMPTY_CLASS_EXPR:
7836 /* This is good enough for a function argument that might not get
7837 used, and they can't do anything with it, so just return it. */
7838 return t;
7839
7840 case LAMBDA_EXPR:
7841 case PREINCREMENT_EXPR:
7842 case POSTINCREMENT_EXPR:
7843 case PREDECREMENT_EXPR:
7844 case POSTDECREMENT_EXPR:
7845 case NEW_EXPR:
7846 case VEC_NEW_EXPR:
7847 case DELETE_EXPR:
7848 case VEC_DELETE_EXPR:
7849 case THROW_EXPR:
7850 case MODIFY_EXPR:
7851 case MODOP_EXPR:
7852 /* GCC internal stuff. */
7853 case VA_ARG_EXPR:
7854 case OBJ_TYPE_REF:
7855 case WITH_CLEANUP_EXPR:
7856 case STATEMENT_LIST:
7857 case BIND_EXPR:
7858 case NON_DEPENDENT_EXPR:
7859 case BASELINK:
7860 case EXPR_STMT:
7861 case OFFSET_REF:
7862 if (!allow_non_constant)
7863 error_at (EXPR_LOC_OR_HERE (t),
7864 "expression %qE is not a constant-expression", t);
7865 *non_constant_p = true;
7866 break;
7867
7868 default:
7869 internal_error ("unexpected expression %qE of kind %s", t,
7870 tree_code_name[TREE_CODE (t)]);
7871 *non_constant_p = true;
7872 break;
7873 }
7874
7875 if (r == error_mark_node)
7876 *non_constant_p = true;
7877
7878 if (*non_constant_p)
7879 return t;
7880 else
7881 return r;
7882 }
7883
7884 static tree
7885 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
7886 {
7887 bool non_constant_p = false;
7888 tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
7889 false, &non_constant_p);
7890
7891 verify_constant (r, allow_non_constant, &non_constant_p);
7892
7893 if (TREE_CODE (t) != CONSTRUCTOR
7894 && cp_has_mutable_p (TREE_TYPE (t)))
7895 {
7896 /* We allow a mutable type if the original expression was a
7897 CONSTRUCTOR so that we can do aggregate initialization of
7898 constexpr variables. */
7899 if (!allow_non_constant)
7900 error ("%qT cannot be the type of a complete constant expression "
7901 "because it has mutable sub-objects", TREE_TYPE (t));
7902 non_constant_p = true;
7903 }
7904
7905 /* Technically we should check this for all subexpressions, but that
7906 runs into problems with our internal representation of pointer
7907 subtraction and the 5.19 rules are still in flux. */
7908 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
7909 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
7910 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
7911 {
7912 if (!allow_non_constant)
7913 error ("conversion from pointer type %qT "
7914 "to arithmetic type %qT in a constant-expression",
7915 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
7916 non_constant_p = true;
7917 }
7918
7919 if (non_constant_p && !allow_non_constant)
7920 return error_mark_node;
7921 else if (non_constant_p && TREE_CONSTANT (t))
7922 {
7923 /* This isn't actually constant, so unset TREE_CONSTANT. */
7924 if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
7925 r = copy_node (t);
7926 else
7927 r = build_nop (TREE_TYPE (t), t);
7928 TREE_CONSTANT (r) = false;
7929 return r;
7930 }
7931 else if (non_constant_p || r == t)
7932 return t;
7933 else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
7934 {
7935 if (TREE_CODE (t) == TARGET_EXPR
7936 && TARGET_EXPR_INITIAL (t) == r)
7937 return t;
7938 else
7939 {
7940 r = get_target_expr (r);
7941 TREE_CONSTANT (r) = true;
7942 return r;
7943 }
7944 }
7945 else
7946 return r;
7947 }
7948
7949 /* Returns true if T is a valid subexpression of a constant expression,
7950 even if it isn't itself a constant expression. */
7951
7952 bool
7953 is_sub_constant_expr (tree t)
7954 {
7955 bool non_constant_p = false;
7956 cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
7957 return !non_constant_p;
7958 }
7959
7960 /* If T represents a constant expression returns its reduced value.
7961 Otherwise return error_mark_node. If T is dependent, then
7962 return NULL. */
7963
7964 tree
7965 cxx_constant_value (tree t)
7966 {
7967 return cxx_eval_outermost_constant_expr (t, false);
7968 }
7969
7970 /* If T is a constant expression, returns its reduced value.
7971 Otherwise, if T does not have TREE_CONSTANT set, returns T.
7972 Otherwise, returns a version of T without TREE_CONSTANT. */
7973
7974 tree
7975 maybe_constant_value (tree t)
7976 {
7977 tree r;
7978
7979 if (type_dependent_expression_p (t)
7980 || type_unknown_p (t)
7981 || BRACE_ENCLOSED_INITIALIZER_P (t)
7982 || !potential_constant_expression (t)
7983 || value_dependent_expression_p (t))
7984 {
7985 if (TREE_OVERFLOW_P (t))
7986 {
7987 t = build_nop (TREE_TYPE (t), t);
7988 TREE_CONSTANT (t) = false;
7989 }
7990 return t;
7991 }
7992
7993 r = cxx_eval_outermost_constant_expr (t, true);
7994 #ifdef ENABLE_CHECKING
7995 /* cp_tree_equal looks through NOPs, so allow them. */
7996 gcc_assert (r == t
7997 || CONVERT_EXPR_P (t)
7998 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
7999 || !cp_tree_equal (r, t));
8000 #endif
8001 return r;
8002 }
8003
8004 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
8005 than wrapped in a TARGET_EXPR. */
8006
8007 tree
8008 maybe_constant_init (tree t)
8009 {
8010 t = maybe_constant_value (t);
8011 if (TREE_CODE (t) == TARGET_EXPR)
8012 {
8013 tree init = TARGET_EXPR_INITIAL (t);
8014 if (TREE_CODE (init) == CONSTRUCTOR
8015 && TREE_CONSTANT (init))
8016 t = init;
8017 }
8018 return t;
8019 }
8020
8021 #if 0
8022 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
8023 /* Return true if the object referred to by REF has automatic or thread
8024 local storage. */
8025
8026 enum { ck_ok, ck_bad, ck_unknown };
8027 static int
8028 check_automatic_or_tls (tree ref)
8029 {
8030 enum machine_mode mode;
8031 HOST_WIDE_INT bitsize, bitpos;
8032 tree offset;
8033 int volatilep = 0, unsignedp = 0;
8034 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
8035 &mode, &unsignedp, &volatilep, false);
8036 duration_kind dk;
8037
8038 /* If there isn't a decl in the middle, we don't know the linkage here,
8039 and this isn't a constant expression anyway. */
8040 if (!DECL_P (decl))
8041 return ck_unknown;
8042 dk = decl_storage_duration (decl);
8043 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
8044 }
8045 #endif
8046
8047 /* Return true if T denotes a potentially constant expression. Issue
8048 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
8049 an lvalue-rvalue conversion is implied.
8050
8051 C++0x [expr.const] used to say
8052
8053 6 An expression is a potential constant expression if it is
8054 a constant expression where all occurences of function
8055 parameters are replaced by arbitrary constant expressions
8056 of the appropriate type.
8057
8058 2 A conditional expression is a constant expression unless it
8059 involves one of the following as a potentially evaluated
8060 subexpression (3.2), but subexpressions of logical AND (5.14),
8061 logical OR (5.15), and conditional (5.16) operations that are
8062 not evaluated are not considered. */
8063
8064 static bool
8065 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
8066 {
8067 enum { any = false, rval = true };
8068 int i;
8069 tree tmp;
8070
8071 /* C++98 has different rules for the form of a constant expression that
8072 are enforced in the parser, so we can assume that anything that gets
8073 this far is suitable. */
8074 if (cxx_dialect < cxx0x)
8075 return true;
8076
8077 if (t == error_mark_node)
8078 return false;
8079 if (t == NULL_TREE)
8080 return true;
8081 if (TREE_THIS_VOLATILE (t))
8082 {
8083 if (flags & tf_error)
8084 error ("expression %qE has side-effects", t);
8085 return false;
8086 }
8087 if (CONSTANT_CLASS_P (t))
8088 {
8089 if (TREE_OVERFLOW (t))
8090 {
8091 if (flags & tf_error)
8092 {
8093 permerror (EXPR_LOC_OR_HERE (t),
8094 "overflow in constant expression");
8095 if (flag_permissive)
8096 return true;
8097 }
8098 return false;
8099 }
8100 return true;
8101 }
8102
8103 switch (TREE_CODE (t))
8104 {
8105 case FUNCTION_DECL:
8106 case BASELINK:
8107 case TEMPLATE_DECL:
8108 case OVERLOAD:
8109 case TEMPLATE_ID_EXPR:
8110 case LABEL_DECL:
8111 case CONST_DECL:
8112 case SIZEOF_EXPR:
8113 case ALIGNOF_EXPR:
8114 case OFFSETOF_EXPR:
8115 case NOEXCEPT_EXPR:
8116 case TEMPLATE_PARM_INDEX:
8117 case TRAIT_EXPR:
8118 case IDENTIFIER_NODE:
8119 case USERDEF_LITERAL:
8120 /* We can see a FIELD_DECL in a pointer-to-member expression. */
8121 case FIELD_DECL:
8122 case PARM_DECL:
8123 case USING_DECL:
8124 return true;
8125
8126 case AGGR_INIT_EXPR:
8127 case CALL_EXPR:
8128 /* -- an invocation of a function other than a constexpr function
8129 or a constexpr constructor. */
8130 {
8131 tree fun = get_function_named_in_call (t);
8132 const int nargs = call_expr_nargs (t);
8133 i = 0;
8134
8135 if (is_overloaded_fn (fun))
8136 {
8137 if (TREE_CODE (fun) == FUNCTION_DECL)
8138 {
8139 if (builtin_valid_in_constant_expr_p (fun))
8140 return true;
8141 if (!DECL_DECLARED_CONSTEXPR_P (fun)
8142 /* Allow any built-in function; if the expansion
8143 isn't constant, we'll deal with that then. */
8144 && !is_builtin_fn (fun))
8145 {
8146 if (flags & tf_error)
8147 {
8148 error_at (EXPR_LOC_OR_HERE (t),
8149 "call to non-constexpr function %qD", fun);
8150 explain_invalid_constexpr_fn (fun);
8151 }
8152 return false;
8153 }
8154 /* A call to a non-static member function takes the address
8155 of the object as the first argument. But in a constant
8156 expression the address will be folded away, so look
8157 through it now. */
8158 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
8159 && !DECL_CONSTRUCTOR_P (fun))
8160 {
8161 tree x = get_nth_callarg (t, 0);
8162 if (is_this_parameter (x))
8163 {
8164 if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8165 {
8166 if (flags & tf_error)
8167 sorry ("calling a member function of the "
8168 "object being constructed in a constant "
8169 "expression");
8170 return false;
8171 }
8172 /* Otherwise OK. */;
8173 }
8174 else if (!potential_constant_expression_1 (x, rval, flags))
8175 return false;
8176 i = 1;
8177 }
8178 }
8179 else
8180 fun = get_first_fn (fun);
8181 /* Skip initial arguments to base constructors. */
8182 if (DECL_BASE_CONSTRUCTOR_P (fun))
8183 i = num_artificial_parms_for (fun);
8184 fun = DECL_ORIGIN (fun);
8185 }
8186 else
8187 {
8188 if (potential_constant_expression_1 (fun, rval, flags))
8189 /* Might end up being a constant function pointer. */;
8190 else
8191 return false;
8192 }
8193 for (; i < nargs; ++i)
8194 {
8195 tree x = get_nth_callarg (t, i);
8196 if (!potential_constant_expression_1 (x, rval, flags))
8197 return false;
8198 }
8199 return true;
8200 }
8201
8202 case NON_LVALUE_EXPR:
8203 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
8204 -- an lvalue of integral type that refers to a non-volatile
8205 const variable or static data member initialized with
8206 constant expressions, or
8207
8208 -- an lvalue of literal type that refers to non-volatile
8209 object defined with constexpr, or that refers to a
8210 sub-object of such an object; */
8211 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8212
8213 case VAR_DECL:
8214 if (want_rval && !decl_constant_var_p (t)
8215 && !dependent_type_p (TREE_TYPE (t)))
8216 {
8217 if (flags & tf_error)
8218 non_const_var_error (t);
8219 return false;
8220 }
8221 return true;
8222
8223 case NOP_EXPR:
8224 case CONVERT_EXPR:
8225 case VIEW_CONVERT_EXPR:
8226 /* -- a reinterpret_cast. FIXME not implemented, and this rule
8227 may change to something more specific to type-punning (DR 1312). */
8228 {
8229 tree from = TREE_OPERAND (t, 0);
8230 return (potential_constant_expression_1
8231 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
8232 }
8233
8234 case ADDR_EXPR:
8235 /* -- a unary operator & that is applied to an lvalue that
8236 designates an object with thread or automatic storage
8237 duration; */
8238 t = TREE_OPERAND (t, 0);
8239 #if 0
8240 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
8241 any checking here, as we might dereference the pointer later. If
8242 we remove this code, also remove check_automatic_or_tls. */
8243 i = check_automatic_or_tls (t);
8244 if (i == ck_ok)
8245 return true;
8246 if (i == ck_bad)
8247 {
8248 if (flags & tf_error)
8249 error ("address-of an object %qE with thread local or "
8250 "automatic storage is not a constant expression", t);
8251 return false;
8252 }
8253 #endif
8254 return potential_constant_expression_1 (t, any, flags);
8255
8256 case COMPONENT_REF:
8257 case BIT_FIELD_REF:
8258 case ARROW_EXPR:
8259 case OFFSET_REF:
8260 /* -- a class member access unless its postfix-expression is
8261 of literal type or of pointer to literal type. */
8262 /* This test would be redundant, as it follows from the
8263 postfix-expression being a potential constant expression. */
8264 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8265 want_rval, flags);
8266
8267 case EXPR_PACK_EXPANSION:
8268 return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
8269 want_rval, flags);
8270
8271 case INDIRECT_REF:
8272 {
8273 tree x = TREE_OPERAND (t, 0);
8274 STRIP_NOPS (x);
8275 if (is_this_parameter (x))
8276 {
8277 if (want_rval && DECL_CONTEXT (x)
8278 && DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8279 {
8280 if (flags & tf_error)
8281 sorry ("use of the value of the object being constructed "
8282 "in a constant expression");
8283 return false;
8284 }
8285 return true;
8286 }
8287 return potential_constant_expression_1 (x, rval, flags);
8288 }
8289
8290 case LAMBDA_EXPR:
8291 case DYNAMIC_CAST_EXPR:
8292 case PSEUDO_DTOR_EXPR:
8293 case PREINCREMENT_EXPR:
8294 case POSTINCREMENT_EXPR:
8295 case PREDECREMENT_EXPR:
8296 case POSTDECREMENT_EXPR:
8297 case NEW_EXPR:
8298 case VEC_NEW_EXPR:
8299 case DELETE_EXPR:
8300 case VEC_DELETE_EXPR:
8301 case THROW_EXPR:
8302 case MODIFY_EXPR:
8303 case MODOP_EXPR:
8304 /* GCC internal stuff. */
8305 case VA_ARG_EXPR:
8306 case OBJ_TYPE_REF:
8307 case WITH_CLEANUP_EXPR:
8308 case CLEANUP_POINT_EXPR:
8309 case MUST_NOT_THROW_EXPR:
8310 case TRY_CATCH_EXPR:
8311 case STATEMENT_LIST:
8312 /* Don't bother trying to define a subset of statement-expressions to
8313 be constant-expressions, at least for now. */
8314 case STMT_EXPR:
8315 case EXPR_STMT:
8316 case BIND_EXPR:
8317 case TRANSACTION_EXPR:
8318 case IF_STMT:
8319 case DO_STMT:
8320 case FOR_STMT:
8321 case WHILE_STMT:
8322 if (flags & tf_error)
8323 error ("expression %qE is not a constant-expression", t);
8324 return false;
8325
8326 case TYPEID_EXPR:
8327 /* -- a typeid expression whose operand is of polymorphic
8328 class type; */
8329 {
8330 tree e = TREE_OPERAND (t, 0);
8331 if (!TYPE_P (e) && !type_dependent_expression_p (e)
8332 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
8333 {
8334 if (flags & tf_error)
8335 error ("typeid-expression is not a constant expression "
8336 "because %qE is of polymorphic type", e);
8337 return false;
8338 }
8339 return true;
8340 }
8341
8342 case MINUS_EXPR:
8343 /* -- a subtraction where both operands are pointers. */
8344 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8345 && TYPE_PTR_P (TREE_OPERAND (t, 1)))
8346 {
8347 if (flags & tf_error)
8348 error ("difference of two pointer expressions is not "
8349 "a constant expression");
8350 return false;
8351 }
8352 want_rval = true;
8353 goto binary;
8354
8355 case LT_EXPR:
8356 case LE_EXPR:
8357 case GT_EXPR:
8358 case GE_EXPR:
8359 case EQ_EXPR:
8360 case NE_EXPR:
8361 /* -- a relational or equality operator where at least
8362 one of the operands is a pointer. */
8363 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8364 || TYPE_PTR_P (TREE_OPERAND (t, 1)))
8365 {
8366 if (flags & tf_error)
8367 error ("pointer comparison expression is not a "
8368 "constant expression");
8369 return false;
8370 }
8371 want_rval = true;
8372 goto binary;
8373
8374 case BIT_NOT_EXPR:
8375 /* A destructor. */
8376 if (TYPE_P (TREE_OPERAND (t, 0)))
8377 return true;
8378 /* else fall through. */
8379
8380 case REALPART_EXPR:
8381 case IMAGPART_EXPR:
8382 case CONJ_EXPR:
8383 case SAVE_EXPR:
8384 case FIX_TRUNC_EXPR:
8385 case FLOAT_EXPR:
8386 case NEGATE_EXPR:
8387 case ABS_EXPR:
8388 case TRUTH_NOT_EXPR:
8389 case FIXED_CONVERT_EXPR:
8390 case UNARY_PLUS_EXPR:
8391 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
8392 flags);
8393
8394 case CAST_EXPR:
8395 case CONST_CAST_EXPR:
8396 case STATIC_CAST_EXPR:
8397 case REINTERPRET_CAST_EXPR:
8398 case IMPLICIT_CONV_EXPR:
8399 return (potential_constant_expression_1
8400 (TREE_OPERAND (t, 0),
8401 TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
8402
8403 case PAREN_EXPR:
8404 case NON_DEPENDENT_EXPR:
8405 /* For convenience. */
8406 case RETURN_EXPR:
8407 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8408 want_rval, flags);
8409
8410 case SCOPE_REF:
8411 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8412 want_rval, flags);
8413
8414 case TARGET_EXPR:
8415 if (!literal_type_p (TREE_TYPE (t)))
8416 {
8417 if (flags & tf_error)
8418 {
8419 error ("temporary of non-literal type %qT in a "
8420 "constant expression", TREE_TYPE (t));
8421 explain_non_literal_class (TREE_TYPE (t));
8422 }
8423 return false;
8424 }
8425 case INIT_EXPR:
8426 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8427 rval, flags);
8428
8429 case CONSTRUCTOR:
8430 {
8431 VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
8432 constructor_elt *ce;
8433 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
8434 if (!potential_constant_expression_1 (ce->value, want_rval, flags))
8435 return false;
8436 return true;
8437 }
8438
8439 case TREE_LIST:
8440 {
8441 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
8442 || DECL_P (TREE_PURPOSE (t)));
8443 if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
8444 flags))
8445 return false;
8446 if (TREE_CHAIN (t) == NULL_TREE)
8447 return true;
8448 return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
8449 flags);
8450 }
8451
8452 case TRUNC_DIV_EXPR:
8453 case CEIL_DIV_EXPR:
8454 case FLOOR_DIV_EXPR:
8455 case ROUND_DIV_EXPR:
8456 case TRUNC_MOD_EXPR:
8457 case CEIL_MOD_EXPR:
8458 case ROUND_MOD_EXPR:
8459 {
8460 tree denom = TREE_OPERAND (t, 1);
8461 /* We can't call maybe_constant_value on an expression
8462 that hasn't been through fold_non_dependent_expr yet. */
8463 if (!processing_template_decl)
8464 denom = maybe_constant_value (denom);
8465 if (integer_zerop (denom))
8466 {
8467 if (flags & tf_error)
8468 error ("division by zero is not a constant-expression");
8469 return false;
8470 }
8471 else
8472 {
8473 want_rval = true;
8474 goto binary;
8475 }
8476 }
8477
8478 case COMPOUND_EXPR:
8479 {
8480 /* check_return_expr sometimes wraps a TARGET_EXPR in a
8481 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
8482 introduced by build_call_a. */
8483 tree op0 = TREE_OPERAND (t, 0);
8484 tree op1 = TREE_OPERAND (t, 1);
8485 STRIP_NOPS (op1);
8486 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
8487 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
8488 return potential_constant_expression_1 (op0, want_rval, flags);
8489 else
8490 goto binary;
8491 }
8492
8493 /* If the first operand is the non-short-circuit constant, look at
8494 the second operand; otherwise we only care about the first one for
8495 potentiality. */
8496 case TRUTH_AND_EXPR:
8497 case TRUTH_ANDIF_EXPR:
8498 tmp = boolean_true_node;
8499 goto truth;
8500 case TRUTH_OR_EXPR:
8501 case TRUTH_ORIF_EXPR:
8502 tmp = boolean_false_node;
8503 truth:
8504 if (TREE_OPERAND (t, 0) == tmp)
8505 return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
8506 else
8507 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8508
8509 case PLUS_EXPR:
8510 case MULT_EXPR:
8511 case POINTER_PLUS_EXPR:
8512 case RDIV_EXPR:
8513 case EXACT_DIV_EXPR:
8514 case MIN_EXPR:
8515 case MAX_EXPR:
8516 case LSHIFT_EXPR:
8517 case RSHIFT_EXPR:
8518 case LROTATE_EXPR:
8519 case RROTATE_EXPR:
8520 case BIT_IOR_EXPR:
8521 case BIT_XOR_EXPR:
8522 case BIT_AND_EXPR:
8523 case TRUTH_XOR_EXPR:
8524 case UNORDERED_EXPR:
8525 case ORDERED_EXPR:
8526 case UNLT_EXPR:
8527 case UNLE_EXPR:
8528 case UNGT_EXPR:
8529 case UNGE_EXPR:
8530 case UNEQ_EXPR:
8531 case LTGT_EXPR:
8532 case RANGE_EXPR:
8533 case COMPLEX_EXPR:
8534 want_rval = true;
8535 /* Fall through. */
8536 case ARRAY_REF:
8537 case ARRAY_RANGE_REF:
8538 case MEMBER_REF:
8539 case DOTSTAR_EXPR:
8540 binary:
8541 for (i = 0; i < 2; ++i)
8542 if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8543 want_rval, flags))
8544 return false;
8545 return true;
8546
8547 case FMA_EXPR:
8548 case VEC_PERM_EXPR:
8549 for (i = 0; i < 3; ++i)
8550 if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8551 true, flags))
8552 return false;
8553 return true;
8554
8555 case COND_EXPR:
8556 case VEC_COND_EXPR:
8557 /* If the condition is a known constant, we know which of the legs we
8558 care about; otherwise we only require that the condition and
8559 either of the legs be potentially constant. */
8560 tmp = TREE_OPERAND (t, 0);
8561 if (!potential_constant_expression_1 (tmp, rval, flags))
8562 return false;
8563 else if (integer_zerop (tmp))
8564 return potential_constant_expression_1 (TREE_OPERAND (t, 2),
8565 want_rval, flags);
8566 else if (TREE_CODE (tmp) == INTEGER_CST)
8567 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8568 want_rval, flags);
8569 for (i = 1; i < 3; ++i)
8570 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
8571 want_rval, tf_none))
8572 return true;
8573 if (flags & tf_error)
8574 error ("expression %qE is not a constant-expression", t);
8575 return false;
8576
8577 case VEC_INIT_EXPR:
8578 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
8579 return true;
8580 if (flags & tf_error)
8581 {
8582 error ("non-constant array initialization");
8583 diagnose_non_constexpr_vec_init (t);
8584 }
8585 return false;
8586
8587 default:
8588 sorry ("unexpected AST of kind %s", tree_code_name[TREE_CODE (t)]);
8589 gcc_unreachable();
8590 return false;
8591 }
8592 }
8593
8594 /* The main entry point to the above. */
8595
8596 bool
8597 potential_constant_expression (tree t)
8598 {
8599 return potential_constant_expression_1 (t, false, tf_none);
8600 }
8601
8602 /* As above, but require a constant rvalue. */
8603
8604 bool
8605 potential_rvalue_constant_expression (tree t)
8606 {
8607 return potential_constant_expression_1 (t, true, tf_none);
8608 }
8609
8610 /* Like above, but complain about non-constant expressions. */
8611
8612 bool
8613 require_potential_constant_expression (tree t)
8614 {
8615 return potential_constant_expression_1 (t, false, tf_warning_or_error);
8616 }
8617
8618 /* Cross product of the above. */
8619
8620 bool
8621 require_potential_rvalue_constant_expression (tree t)
8622 {
8623 return potential_constant_expression_1 (t, true, tf_warning_or_error);
8624 }
8625 \f
8626 /* Constructor for a lambda expression. */
8627
8628 tree
8629 build_lambda_expr (void)
8630 {
8631 tree lambda = make_node (LAMBDA_EXPR);
8632 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
8633 LAMBDA_EXPR_CAPTURE_LIST (lambda) = NULL_TREE;
8634 LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
8635 LAMBDA_EXPR_PENDING_PROXIES (lambda) = NULL;
8636 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
8637 LAMBDA_EXPR_MUTABLE_P (lambda) = false;
8638 return lambda;
8639 }
8640
8641 /* Create the closure object for a LAMBDA_EXPR. */
8642
8643 tree
8644 build_lambda_object (tree lambda_expr)
8645 {
8646 /* Build aggregate constructor call.
8647 - cp_parser_braced_list
8648 - cp_parser_functional_cast */
8649 VEC(constructor_elt,gc) *elts = NULL;
8650 tree node, expr, type;
8651 location_t saved_loc;
8652
8653 if (processing_template_decl)
8654 return lambda_expr;
8655
8656 /* Make sure any error messages refer to the lambda-introducer. */
8657 saved_loc = input_location;
8658 input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
8659
8660 for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8661 node;
8662 node = TREE_CHAIN (node))
8663 {
8664 tree field = TREE_PURPOSE (node);
8665 tree val = TREE_VALUE (node);
8666
8667 if (field == error_mark_node)
8668 {
8669 expr = error_mark_node;
8670 goto out;
8671 }
8672
8673 if (DECL_P (val))
8674 mark_used (val);
8675
8676 /* Mere mortals can't copy arrays with aggregate initialization, so
8677 do some magic to make it work here. */
8678 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
8679 val = build_array_copy (val);
8680 else if (DECL_NORMAL_CAPTURE_P (field)
8681 && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
8682 {
8683 /* "the entities that are captured by copy are used to
8684 direct-initialize each corresponding non-static data
8685 member of the resulting closure object."
8686
8687 There's normally no way to express direct-initialization
8688 from an element of a CONSTRUCTOR, so we build up a special
8689 TARGET_EXPR to bypass the usual copy-initialization. */
8690 val = force_rvalue (val, tf_warning_or_error);
8691 if (TREE_CODE (val) == TARGET_EXPR)
8692 TARGET_EXPR_DIRECT_INIT_P (val) = true;
8693 }
8694
8695 CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
8696 }
8697
8698 expr = build_constructor (init_list_type_node, elts);
8699 CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
8700
8701 /* N2927: "[The closure] class type is not an aggregate."
8702 But we briefly treat it as an aggregate to make this simpler. */
8703 type = LAMBDA_EXPR_CLOSURE (lambda_expr);
8704 CLASSTYPE_NON_AGGREGATE (type) = 0;
8705 expr = finish_compound_literal (type, expr, tf_warning_or_error);
8706 CLASSTYPE_NON_AGGREGATE (type) = 1;
8707
8708 out:
8709 input_location = saved_loc;
8710 return expr;
8711 }
8712
8713 /* Return an initialized RECORD_TYPE for LAMBDA.
8714 LAMBDA must have its explicit captures already. */
8715
8716 tree
8717 begin_lambda_type (tree lambda)
8718 {
8719 tree type;
8720
8721 {
8722 /* Unique name. This is just like an unnamed class, but we cannot use
8723 make_anon_name because of certain checks against TYPE_ANONYMOUS_P. */
8724 tree name;
8725 name = make_lambda_name ();
8726
8727 /* Create the new RECORD_TYPE for this lambda. */
8728 type = xref_tag (/*tag_code=*/record_type,
8729 name,
8730 /*scope=*/ts_within_enclosing_non_class,
8731 /*template_header_p=*/false);
8732 }
8733
8734 /* Designate it as a struct so that we can use aggregate initialization. */
8735 CLASSTYPE_DECLARED_CLASS (type) = false;
8736
8737 /* Clear base types. */
8738 xref_basetypes (type, /*bases=*/NULL_TREE);
8739
8740 /* Start the class. */
8741 type = begin_class_definition (type);
8742 if (type == error_mark_node)
8743 return error_mark_node;
8744
8745 /* Cross-reference the expression and the type. */
8746 LAMBDA_EXPR_CLOSURE (lambda) = type;
8747 CLASSTYPE_LAMBDA_EXPR (type) = lambda;
8748
8749 return type;
8750 }
8751
8752 /* Returns the type to use for the return type of the operator() of a
8753 closure class. */
8754
8755 tree
8756 lambda_return_type (tree expr)
8757 {
8758 if (expr == NULL_TREE)
8759 return void_type_node;
8760 if (type_unknown_p (expr)
8761 || BRACE_ENCLOSED_INITIALIZER_P (expr))
8762 {
8763 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
8764 return void_type_node;
8765 }
8766 gcc_checking_assert (!type_dependent_expression_p (expr));
8767 return cv_unqualified (type_decays_to (unlowered_expr_type (expr)));
8768 }
8769
8770 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
8771 closure type. */
8772
8773 tree
8774 lambda_function (tree lambda)
8775 {
8776 tree type;
8777 if (TREE_CODE (lambda) == LAMBDA_EXPR)
8778 type = LAMBDA_EXPR_CLOSURE (lambda);
8779 else
8780 type = lambda;
8781 gcc_assert (LAMBDA_TYPE_P (type));
8782 /* Don't let debug_tree cause instantiation. */
8783 if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
8784 && !COMPLETE_OR_OPEN_TYPE_P (type))
8785 return NULL_TREE;
8786 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
8787 /*protect=*/0, /*want_type=*/false,
8788 tf_warning_or_error);
8789 if (lambda)
8790 lambda = BASELINK_FUNCTIONS (lambda);
8791 return lambda;
8792 }
8793
8794 /* Returns the type to use for the FIELD_DECL corresponding to the
8795 capture of EXPR.
8796 The caller should add REFERENCE_TYPE for capture by reference. */
8797
8798 tree
8799 lambda_capture_field_type (tree expr)
8800 {
8801 tree type;
8802 if (type_dependent_expression_p (expr))
8803 {
8804 type = cxx_make_type (DECLTYPE_TYPE);
8805 DECLTYPE_TYPE_EXPR (type) = expr;
8806 DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
8807 SET_TYPE_STRUCTURAL_EQUALITY (type);
8808 }
8809 else
8810 type = non_reference (unlowered_expr_type (expr));
8811 return type;
8812 }
8813
8814 /* Insert the deduced return type for an auto function. */
8815
8816 void
8817 apply_deduced_return_type (tree fco, tree return_type)
8818 {
8819 tree result;
8820
8821 if (return_type == error_mark_node)
8822 return;
8823
8824 if (LAMBDA_FUNCTION_P (fco))
8825 {
8826 tree lambda = CLASSTYPE_LAMBDA_EXPR (current_class_type);
8827 LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
8828 }
8829
8830 if (DECL_CONV_FN_P (fco))
8831 DECL_NAME (fco) = mangle_conv_op_name_for_type (return_type);
8832
8833 TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
8834
8835 result = DECL_RESULT (fco);
8836 if (result == NULL_TREE)
8837 return;
8838 if (TREE_TYPE (result) == return_type)
8839 return;
8840
8841 /* We already have a DECL_RESULT from start_preparsed_function.
8842 Now we need to redo the work it and allocate_struct_function
8843 did to reflect the new type. */
8844 gcc_assert (current_function_decl == fco);
8845 result = build_decl (input_location, RESULT_DECL, NULL_TREE,
8846 TYPE_MAIN_VARIANT (return_type));
8847 DECL_ARTIFICIAL (result) = 1;
8848 DECL_IGNORED_P (result) = 1;
8849 cp_apply_type_quals_to_decl (cp_type_quals (return_type),
8850 result);
8851
8852 DECL_RESULT (fco) = result;
8853
8854 if (!processing_template_decl)
8855 {
8856 bool aggr = aggregate_value_p (result, fco);
8857 #ifdef PCC_STATIC_STRUCT_RETURN
8858 cfun->returns_pcc_struct = aggr;
8859 #endif
8860 cfun->returns_struct = aggr;
8861 }
8862
8863 }
8864
8865 /* DECL is a local variable or parameter from the surrounding scope of a
8866 lambda-expression. Returns the decltype for a use of the capture field
8867 for DECL even if it hasn't been captured yet. */
8868
8869 static tree
8870 capture_decltype (tree decl)
8871 {
8872 tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8873 /* FIXME do lookup instead of list walk? */
8874 tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
8875 tree type;
8876
8877 if (cap)
8878 type = TREE_TYPE (TREE_PURPOSE (cap));
8879 else
8880 switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
8881 {
8882 case CPLD_NONE:
8883 error ("%qD is not captured", decl);
8884 return error_mark_node;
8885
8886 case CPLD_COPY:
8887 type = TREE_TYPE (decl);
8888 if (TREE_CODE (type) == REFERENCE_TYPE
8889 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
8890 type = TREE_TYPE (type);
8891 break;
8892
8893 case CPLD_REFERENCE:
8894 type = TREE_TYPE (decl);
8895 if (TREE_CODE (type) != REFERENCE_TYPE)
8896 type = build_reference_type (TREE_TYPE (decl));
8897 break;
8898
8899 default:
8900 gcc_unreachable ();
8901 }
8902
8903 if (TREE_CODE (type) != REFERENCE_TYPE)
8904 {
8905 if (!LAMBDA_EXPR_MUTABLE_P (lam))
8906 type = cp_build_qualified_type (type, (cp_type_quals (type)
8907 |TYPE_QUAL_CONST));
8908 type = build_reference_type (type);
8909 }
8910 return type;
8911 }
8912
8913 /* Returns true iff DECL is a lambda capture proxy variable created by
8914 build_capture_proxy. */
8915
8916 bool
8917 is_capture_proxy (tree decl)
8918 {
8919 return (TREE_CODE (decl) == VAR_DECL
8920 && DECL_HAS_VALUE_EXPR_P (decl)
8921 && !DECL_ANON_UNION_VAR_P (decl)
8922 && LAMBDA_FUNCTION_P (DECL_CONTEXT (decl)));
8923 }
8924
8925 /* Returns true iff DECL is a capture proxy for a normal capture
8926 (i.e. without explicit initializer). */
8927
8928 bool
8929 is_normal_capture_proxy (tree decl)
8930 {
8931 tree val;
8932
8933 if (!is_capture_proxy (decl))
8934 /* It's not a capture proxy. */
8935 return false;
8936
8937 /* It is a capture proxy, is it a normal capture? */
8938 val = DECL_VALUE_EXPR (decl);
8939 gcc_assert (TREE_CODE (val) == COMPONENT_REF);
8940 val = TREE_OPERAND (val, 1);
8941 return DECL_NORMAL_CAPTURE_P (val);
8942 }
8943
8944 /* VAR is a capture proxy created by build_capture_proxy; add it to the
8945 current function, which is the operator() for the appropriate lambda. */
8946
8947 void
8948 insert_capture_proxy (tree var)
8949 {
8950 cp_binding_level *b;
8951 int skip;
8952 tree stmt_list;
8953
8954 /* Put the capture proxy in the extra body block so that it won't clash
8955 with a later local variable. */
8956 b = current_binding_level;
8957 for (skip = 0; ; ++skip)
8958 {
8959 cp_binding_level *n = b->level_chain;
8960 if (n->kind == sk_function_parms)
8961 break;
8962 b = n;
8963 }
8964 pushdecl_with_scope (var, b, false);
8965
8966 /* And put a DECL_EXPR in the STATEMENT_LIST for the same block. */
8967 var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
8968 stmt_list = VEC_index (tree, stmt_list_stack,
8969 VEC_length (tree, stmt_list_stack) - 1 - skip);
8970 gcc_assert (stmt_list);
8971 append_to_statement_list_force (var, &stmt_list);
8972 }
8973
8974 /* We've just finished processing a lambda; if the containing scope is also
8975 a lambda, insert any capture proxies that were created while processing
8976 the nested lambda. */
8977
8978 void
8979 insert_pending_capture_proxies (void)
8980 {
8981 tree lam;
8982 VEC(tree,gc) *proxies;
8983 unsigned i;
8984
8985 if (!current_function_decl || !LAMBDA_FUNCTION_P (current_function_decl))
8986 return;
8987
8988 lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8989 proxies = LAMBDA_EXPR_PENDING_PROXIES (lam);
8990 for (i = 0; i < VEC_length (tree, proxies); ++i)
8991 {
8992 tree var = VEC_index (tree, proxies, i);
8993 insert_capture_proxy (var);
8994 }
8995 release_tree_vector (LAMBDA_EXPR_PENDING_PROXIES (lam));
8996 LAMBDA_EXPR_PENDING_PROXIES (lam) = NULL;
8997 }
8998
8999 /* Given REF, a COMPONENT_REF designating a field in the lambda closure,
9000 return the type we want the proxy to have: the type of the field itself,
9001 with added const-qualification if the lambda isn't mutable and the
9002 capture is by value. */
9003
9004 tree
9005 lambda_proxy_type (tree ref)
9006 {
9007 tree type;
9008 if (REFERENCE_REF_P (ref))
9009 ref = TREE_OPERAND (ref, 0);
9010 type = TREE_TYPE (ref);
9011 if (!dependent_type_p (type))
9012 return type;
9013 type = cxx_make_type (DECLTYPE_TYPE);
9014 DECLTYPE_TYPE_EXPR (type) = ref;
9015 DECLTYPE_FOR_LAMBDA_PROXY (type) = true;
9016 SET_TYPE_STRUCTURAL_EQUALITY (type);
9017 return type;
9018 }
9019
9020 /* MEMBER is a capture field in a lambda closure class. Now that we're
9021 inside the operator(), build a placeholder var for future lookups and
9022 debugging. */
9023
9024 tree
9025 build_capture_proxy (tree member)
9026 {
9027 tree var, object, fn, closure, name, lam, type;
9028
9029 closure = DECL_CONTEXT (member);
9030 fn = lambda_function (closure);
9031 lam = CLASSTYPE_LAMBDA_EXPR (closure);
9032
9033 /* The proxy variable forwards to the capture field. */
9034 object = build_fold_indirect_ref (DECL_ARGUMENTS (fn));
9035 object = finish_non_static_data_member (member, object, NULL_TREE);
9036 if (REFERENCE_REF_P (object))
9037 object = TREE_OPERAND (object, 0);
9038
9039 /* Remove the __ inserted by add_capture. */
9040 name = get_identifier (IDENTIFIER_POINTER (DECL_NAME (member)) + 2);
9041
9042 type = lambda_proxy_type (object);
9043 var = build_decl (input_location, VAR_DECL, name, type);
9044 SET_DECL_VALUE_EXPR (var, object);
9045 DECL_HAS_VALUE_EXPR_P (var) = 1;
9046 DECL_ARTIFICIAL (var) = 1;
9047 TREE_USED (var) = 1;
9048 DECL_CONTEXT (var) = fn;
9049
9050 if (name == this_identifier)
9051 {
9052 gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (lam) == member);
9053 LAMBDA_EXPR_THIS_CAPTURE (lam) = var;
9054 }
9055
9056 if (fn == current_function_decl)
9057 insert_capture_proxy (var);
9058 else
9059 VEC_safe_push (tree, gc, LAMBDA_EXPR_PENDING_PROXIES (lam), var);
9060
9061 return var;
9062 }
9063
9064 /* From an ID and INITIALIZER, create a capture (by reference if
9065 BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
9066 and return it. */
9067
9068 tree
9069 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
9070 bool explicit_init_p)
9071 {
9072 char *buf;
9073 tree type, member, name;
9074
9075 type = lambda_capture_field_type (initializer);
9076 if (by_reference_p)
9077 {
9078 type = build_reference_type (type);
9079 if (!real_lvalue_p (initializer))
9080 error ("cannot capture %qE by reference", initializer);
9081 }
9082 else
9083 /* Capture by copy requires a complete type. */
9084 type = complete_type (type);
9085
9086 /* Add __ to the beginning of the field name so that user code
9087 won't find the field with name lookup. We can't just leave the name
9088 unset because template instantiation uses the name to find
9089 instantiated fields. */
9090 buf = (char *) alloca (IDENTIFIER_LENGTH (id) + 3);
9091 buf[1] = buf[0] = '_';
9092 memcpy (buf + 2, IDENTIFIER_POINTER (id),
9093 IDENTIFIER_LENGTH (id) + 1);
9094 name = get_identifier (buf);
9095
9096 /* If TREE_TYPE isn't set, we're still in the introducer, so check
9097 for duplicates. */
9098 if (!LAMBDA_EXPR_CLOSURE (lambda))
9099 {
9100 if (IDENTIFIER_MARKED (name))
9101 {
9102 pedwarn (input_location, 0,
9103 "already captured %qD in lambda expression", id);
9104 return NULL_TREE;
9105 }
9106 IDENTIFIER_MARKED (name) = true;
9107 }
9108
9109 /* Make member variable. */
9110 member = build_lang_decl (FIELD_DECL, name, type);
9111
9112 if (!explicit_init_p)
9113 /* Normal captures are invisible to name lookup but uses are replaced
9114 with references to the capture field; we implement this by only
9115 really making them invisible in unevaluated context; see
9116 qualify_lookup. For now, let's make explicitly initialized captures
9117 always visible. */
9118 DECL_NORMAL_CAPTURE_P (member) = true;
9119
9120 if (id == this_identifier)
9121 LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
9122
9123 /* Add it to the appropriate closure class if we've started it. */
9124 if (current_class_type
9125 && current_class_type == LAMBDA_EXPR_CLOSURE (lambda))
9126 finish_member_declaration (member);
9127
9128 LAMBDA_EXPR_CAPTURE_LIST (lambda)
9129 = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
9130
9131 if (LAMBDA_EXPR_CLOSURE (lambda))
9132 return build_capture_proxy (member);
9133 /* For explicit captures we haven't started the function yet, so we wait
9134 and build the proxy from cp_parser_lambda_body. */
9135 return NULL_TREE;
9136 }
9137
9138 /* Register all the capture members on the list CAPTURES, which is the
9139 LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer. */
9140
9141 void
9142 register_capture_members (tree captures)
9143 {
9144 if (captures == NULL_TREE)
9145 return;
9146
9147 register_capture_members (TREE_CHAIN (captures));
9148 /* We set this in add_capture to avoid duplicates. */
9149 IDENTIFIER_MARKED (DECL_NAME (TREE_PURPOSE (captures))) = false;
9150 finish_member_declaration (TREE_PURPOSE (captures));
9151 }
9152
9153 /* Similar to add_capture, except this works on a stack of nested lambdas.
9154 BY_REFERENCE_P in this case is derived from the default capture mode.
9155 Returns the capture for the lambda at the bottom of the stack. */
9156
9157 tree
9158 add_default_capture (tree lambda_stack, tree id, tree initializer)
9159 {
9160 bool this_capture_p = (id == this_identifier);
9161
9162 tree var = NULL_TREE;
9163
9164 tree saved_class_type = current_class_type;
9165
9166 tree node;
9167
9168 for (node = lambda_stack;
9169 node;
9170 node = TREE_CHAIN (node))
9171 {
9172 tree lambda = TREE_VALUE (node);
9173
9174 current_class_type = LAMBDA_EXPR_CLOSURE (lambda);
9175 var = add_capture (lambda,
9176 id,
9177 initializer,
9178 /*by_reference_p=*/
9179 (!this_capture_p
9180 && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
9181 == CPLD_REFERENCE)),
9182 /*explicit_init_p=*/false);
9183 initializer = convert_from_reference (var);
9184 }
9185
9186 current_class_type = saved_class_type;
9187
9188 return var;
9189 }
9190
9191 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
9192 INDIRECT_REF, possibly adding it through default capturing. */
9193
9194 tree
9195 lambda_expr_this_capture (tree lambda)
9196 {
9197 tree result;
9198
9199 tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9200
9201 /* Try to default capture 'this' if we can. */
9202 if (!this_capture
9203 && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
9204 {
9205 tree containing_function = TYPE_CONTEXT (LAMBDA_EXPR_CLOSURE (lambda));
9206 tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
9207 tree init = NULL_TREE;
9208
9209 /* If we are in a lambda function, we can move out until we hit:
9210 1. a non-lambda function,
9211 2. a lambda function capturing 'this', or
9212 3. a non-default capturing lambda function. */
9213 while (LAMBDA_FUNCTION_P (containing_function))
9214 {
9215 tree lambda
9216 = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
9217
9218 if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
9219 {
9220 /* An outer lambda has already captured 'this'. */
9221 init = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9222 break;
9223 }
9224
9225 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
9226 /* An outer lambda won't let us capture 'this'. */
9227 break;
9228
9229 lambda_stack = tree_cons (NULL_TREE,
9230 lambda,
9231 lambda_stack);
9232
9233 containing_function = decl_function_context (containing_function);
9234 }
9235
9236 if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
9237 && !LAMBDA_FUNCTION_P (containing_function))
9238 /* First parameter is 'this'. */
9239 init = DECL_ARGUMENTS (containing_function);
9240
9241 if (init)
9242 this_capture = add_default_capture (lambda_stack,
9243 /*id=*/this_identifier,
9244 init);
9245 }
9246
9247 if (!this_capture)
9248 {
9249 error ("%<this%> was not captured for this lambda function");
9250 result = error_mark_node;
9251 }
9252 else
9253 {
9254 /* To make sure that current_class_ref is for the lambda. */
9255 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref))
9256 == LAMBDA_EXPR_CLOSURE (lambda));
9257
9258 result = this_capture;
9259
9260 /* If 'this' is captured, each use of 'this' is transformed into an
9261 access to the corresponding unnamed data member of the closure
9262 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
9263 ensures that the transformed expression is an rvalue. ] */
9264 result = rvalue (result);
9265 }
9266
9267 return result;
9268 }
9269
9270 /* Returns the method basetype of the innermost non-lambda function, or
9271 NULL_TREE if none. */
9272
9273 tree
9274 nonlambda_method_basetype (void)
9275 {
9276 tree fn, type;
9277 if (!current_class_ref)
9278 return NULL_TREE;
9279
9280 type = current_class_type;
9281 if (!LAMBDA_TYPE_P (type))
9282 return type;
9283
9284 /* Find the nearest enclosing non-lambda function. */
9285 fn = TYPE_NAME (type);
9286 do
9287 fn = decl_function_context (fn);
9288 while (fn && LAMBDA_FUNCTION_P (fn));
9289
9290 if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9291 return NULL_TREE;
9292
9293 return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
9294 }
9295
9296 /* If the closure TYPE has a static op(), also add a conversion to function
9297 pointer. */
9298
9299 void
9300 maybe_add_lambda_conv_op (tree type)
9301 {
9302 bool nested = (current_function_decl != NULL_TREE);
9303 tree callop = lambda_function (type);
9304 tree rettype, name, fntype, fn, body, compound_stmt;
9305 tree thistype, stattype, statfn, convfn, call, arg;
9306 VEC (tree, gc) *argvec;
9307
9308 if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
9309 return;
9310
9311 if (processing_template_decl)
9312 return;
9313
9314 stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
9315 FUNCTION_ARG_CHAIN (callop));
9316
9317 /* First build up the conversion op. */
9318
9319 rettype = build_pointer_type (stattype);
9320 name = mangle_conv_op_name_for_type (rettype);
9321 thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
9322 fntype = build_method_type_directly (thistype, rettype, void_list_node);
9323 fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
9324 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9325
9326 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9327 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9328 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9329
9330 SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
9331 grokclassfn (type, fn, NO_SPECIAL);
9332 set_linkage_according_to_type (type, fn);
9333 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9334 DECL_IN_AGGR_P (fn) = 1;
9335 DECL_ARTIFICIAL (fn) = 1;
9336 DECL_NOT_REALLY_EXTERN (fn) = 1;
9337 DECL_DECLARED_INLINE_P (fn) = 1;
9338 DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
9339
9340 add_method (type, fn, NULL_TREE);
9341
9342 /* Generic thunk code fails for varargs; we'll complain in mark_used if
9343 the conversion op is used. */
9344 if (varargs_function_p (callop))
9345 {
9346 DECL_DELETED_FN (fn) = 1;
9347 return;
9348 }
9349
9350 /* Now build up the thunk to be returned. */
9351
9352 name = get_identifier ("_FUN");
9353 fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
9354 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9355 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9356 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9357 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9358 grokclassfn (type, fn, NO_SPECIAL);
9359 set_linkage_according_to_type (type, fn);
9360 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9361 DECL_IN_AGGR_P (fn) = 1;
9362 DECL_ARTIFICIAL (fn) = 1;
9363 DECL_NOT_REALLY_EXTERN (fn) = 1;
9364 DECL_DECLARED_INLINE_P (fn) = 1;
9365 DECL_STATIC_FUNCTION_P (fn) = 1;
9366 DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
9367 for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
9368 DECL_CONTEXT (arg) = fn;
9369
9370 add_method (type, fn, NULL_TREE);
9371
9372 if (nested)
9373 push_function_context ();
9374 else
9375 /* Still increment function_depth so that we don't GC in the
9376 middle of an expression. */
9377 ++function_depth;
9378
9379 /* Generate the body of the thunk. */
9380
9381 start_preparsed_function (statfn, NULL_TREE,
9382 SF_PRE_PARSED | SF_INCLASS_INLINE);
9383 if (DECL_ONE_ONLY (statfn))
9384 {
9385 /* Put the thunk in the same comdat group as the call op. */
9386 symtab_add_to_same_comdat_group
9387 ((symtab_node) cgraph_get_create_node (statfn),
9388 (symtab_node) cgraph_get_create_node (callop));
9389 }
9390 body = begin_function_body ();
9391 compound_stmt = begin_compound_stmt (0);
9392
9393 arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
9394 null_pointer_node);
9395 argvec = make_tree_vector ();
9396 VEC_quick_push (tree, argvec, arg);
9397 for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
9398 {
9399 mark_exp_read (arg);
9400 VEC_safe_push (tree, gc, argvec, arg);
9401 }
9402 call = build_call_a (callop, VEC_length (tree, argvec),
9403 VEC_address (tree, argvec));
9404 CALL_FROM_THUNK_P (call) = 1;
9405 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
9406 call = build_cplus_new (TREE_TYPE (call), call, tf_warning_or_error);
9407 call = convert_from_reference (call);
9408 finish_return_stmt (call);
9409
9410 finish_compound_stmt (compound_stmt);
9411 finish_function_body (body);
9412
9413 expand_or_defer_fn (finish_function (2));
9414
9415 /* Generate the body of the conversion op. */
9416
9417 start_preparsed_function (convfn, NULL_TREE,
9418 SF_PRE_PARSED | SF_INCLASS_INLINE);
9419 body = begin_function_body ();
9420 compound_stmt = begin_compound_stmt (0);
9421
9422 finish_return_stmt (decay_conversion (statfn, tf_warning_or_error));
9423
9424 finish_compound_stmt (compound_stmt);
9425 finish_function_body (body);
9426
9427 expand_or_defer_fn (finish_function (2));
9428
9429 if (nested)
9430 pop_function_context ();
9431 else
9432 --function_depth;
9433 }
9434
9435 /* Returns true iff VAL is a lambda-related declaration which should
9436 be ignored by unqualified lookup. */
9437
9438 bool
9439 is_lambda_ignored_entity (tree val)
9440 {
9441 /* In unevaluated context, look past normal capture proxies. */
9442 if (cp_unevaluated_operand && is_normal_capture_proxy (val))
9443 return true;
9444
9445 /* Always ignore lambda fields, their names are only for debugging. */
9446 if (TREE_CODE (val) == FIELD_DECL
9447 && CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (val)))
9448 return true;
9449
9450 /* None of the lookups that use qualify_lookup want the op() from the
9451 lambda; they want the one from the enclosing class. */
9452 if (TREE_CODE (val) == FUNCTION_DECL && LAMBDA_FUNCTION_P (val))
9453 return true;
9454
9455 return false;
9456 }
9457
9458 #include "gt-cp-semantics.h"