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