]> git.ipfire.org Git - thirdparty/gcc.git/blame_incremental - gcc/cp/semantics.c
parser.c (cp_parser_unary_expression): Remove redundant C++0x check.
[thirdparty/gcc.git] / gcc / cp / semantics.c
... / ...
CommitLineData
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
23You should have received a copy of the GNU General Public License
24along 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
54static tree maybe_convert_cond (tree);
55static tree finalize_nrv_r (tree *, int *, void *);
56static tree capture_decltype (tree);
57static 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
111typedef 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;
131DEF_VEC_O (deferred_access);
132DEF_VEC_ALLOC_O (deferred_access,gc);
133
134/* Data for deferred access checking. */
135static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
136static 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
141void
142push_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
161void
162resume_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
171void
172stop_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
182void
183pop_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
196VEC (deferred_access_check,gc)*
197get_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
210void
211pop_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
259void
260perform_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
288void
289perform_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
297void
298perform_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
345bool
346speculative_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
369int
370stmts_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
379tree
380add_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
403stmt_tree
404current_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
413static tree
414maybe_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
426static tree
427maybe_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
438void
439add_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
450tree
451do_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
471static tree
472do_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
484void
485push_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
498static void
499begin_cond (tree *cond_p)
500{
501 if (processing_template_decl)
502 *cond_p = push_stmt_list ();
503}
504
505/* Finish such a conditional. */
506
507static void
508finish_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
532static void
533simplify_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
553tree
554finish_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
588static tree
589maybe_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
619tree
620finish_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
660tree
661begin_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
674void
675finish_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
685tree
686finish_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
694void
695begin_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
703void
704finish_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
711void
712finish_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
723tree
724begin_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
737void
738finish_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
746void
747finish_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
756tree
757begin_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
767void
768finish_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
783void
784finish_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
794tree
795finish_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
832tree
833begin_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
852void
853finish_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
865void
866finish_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
875void
876finish_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
908void
909finish_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
930tree
931begin_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
948void
949finish_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
959tree
960finish_break_stmt (void)
961{
962 return add_stmt (build_stmt (input_location, BREAK_STMT));
963}
964
965/* Finish a continue-statement. */
966
967tree
968finish_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
976tree
977begin_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
992void
993finish_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
1030void
1031finish_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
1048tree
1049begin_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
1061tree
1062begin_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
1075void
1076finish_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
1085void
1086finish_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
1094void
1095finish_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
1103void
1104finish_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
1115void
1116finish_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
1126void
1127finish_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
1136tree
1137begin_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
1155void
1156finish_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
1179void
1180finish_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
1194tree
1195begin_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
1232void
1233finish_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
1270tree
1271finish_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 cxx_readonly_error (operand, lv_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
1386tree
1387finish_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
1403void
1404finish_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
1417void
1418finish_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
1425void
1426finish_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
1435void
1436finish_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
1466tree
1467finish_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
1487tree
1488finish_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
1577void
1578add_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
1607void
1608check_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
1685tree
1686finish_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
1755tree
1756begin_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
1766tree
1767finish_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
1828tree
1829finish_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
1866tree
1867stmt_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
1886bool
1887empty_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
1918tree
1919perform_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
1978tree
1979finish_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
2117tree
2118finish_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
2125tree
2126finish_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
2164tree
2165finish_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
2213tree
2214finish_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
2239tree
2240finish_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
2285tree
2286finish_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
2298void
2299finish_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
2314tree
2315finish_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
2329tree
2330finish_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
2353tree
2354check_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
2373tree
2374begin_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
2464void
2465finish_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
2568void
2569note_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
2584void
2585finish_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
2598tree
2599finish_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
2619tree
2620finish_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/* If FNS is a member function, a set of member functions, or a
2650 template-id referring to one or more member functions, return a
2651 BASELINK for FNS, incorporating the current access context.
2652 Otherwise, return FNS unchanged. */
2653
2654tree
2655baselink_for_fns (tree fns)
2656{
2657 tree fn;
2658 tree cl;
2659
2660 if (BASELINK_P (fns)
2661 || error_operand_p (fns))
2662 return fns;
2663
2664 fn = fns;
2665 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2666 fn = TREE_OPERAND (fn, 0);
2667 fn = get_first_fn (fn);
2668 if (!DECL_FUNCTION_MEMBER_P (fn))
2669 return fns;
2670
2671 cl = currently_open_derived_class (DECL_CONTEXT (fn));
2672 if (!cl)
2673 cl = DECL_CONTEXT (fn);
2674 cl = TYPE_BINFO (cl);
2675 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2676}
2677
2678/* Returns true iff DECL is an automatic variable from a function outside
2679 the current one. */
2680
2681static bool
2682outer_automatic_var_p (tree decl)
2683{
2684 return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2685 && DECL_FUNCTION_SCOPE_P (decl)
2686 && !TREE_STATIC (decl)
2687 && DECL_CONTEXT (decl) != current_function_decl);
2688}
2689
2690/* Returns true iff DECL is a capture field from a lambda that is not our
2691 immediate context. */
2692
2693static bool
2694outer_lambda_capture_p (tree decl)
2695{
2696 return (TREE_CODE (decl) == FIELD_DECL
2697 && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2698 && (!current_class_type
2699 || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2700}
2701
2702/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2703 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2704 if non-NULL, is the type or namespace used to explicitly qualify
2705 ID_EXPRESSION. DECL is the entity to which that name has been
2706 resolved.
2707
2708 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2709 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2710 be set to true if this expression isn't permitted in a
2711 constant-expression, but it is otherwise not set by this function.
2712 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2713 constant-expression, but a non-constant expression is also
2714 permissible.
2715
2716 DONE is true if this expression is a complete postfix-expression;
2717 it is false if this expression is followed by '->', '[', '(', etc.
2718 ADDRESS_P is true iff this expression is the operand of '&'.
2719 TEMPLATE_P is true iff the qualified-id was of the form
2720 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2721 appears as a template argument.
2722
2723 If an error occurs, and it is the kind of error that might cause
2724 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2725 is the caller's responsibility to issue the message. *ERROR_MSG
2726 will be a string with static storage duration, so the caller need
2727 not "free" it.
2728
2729 Return an expression for the entity, after issuing appropriate
2730 diagnostics. This function is also responsible for transforming a
2731 reference to a non-static member into a COMPONENT_REF that makes
2732 the use of "this" explicit.
2733
2734 Upon return, *IDK will be filled in appropriately. */
2735tree
2736finish_id_expression (tree id_expression,
2737 tree decl,
2738 tree scope,
2739 cp_id_kind *idk,
2740 bool integral_constant_expression_p,
2741 bool allow_non_integral_constant_expression_p,
2742 bool *non_integral_constant_expression_p,
2743 bool template_p,
2744 bool done,
2745 bool address_p,
2746 bool template_arg_p,
2747 const char **error_msg,
2748 location_t location)
2749{
2750 /* Initialize the output parameters. */
2751 *idk = CP_ID_KIND_NONE;
2752 *error_msg = NULL;
2753
2754 if (id_expression == error_mark_node)
2755 return error_mark_node;
2756 /* If we have a template-id, then no further lookup is
2757 required. If the template-id was for a template-class, we
2758 will sometimes have a TYPE_DECL at this point. */
2759 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2760 || TREE_CODE (decl) == TYPE_DECL)
2761 ;
2762 /* Look up the name. */
2763 else
2764 {
2765 if (decl == error_mark_node)
2766 {
2767 /* Name lookup failed. */
2768 if (scope
2769 && (!TYPE_P (scope)
2770 || (!dependent_type_p (scope)
2771 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2772 && IDENTIFIER_TYPENAME_P (id_expression)
2773 && dependent_type_p (TREE_TYPE (id_expression))))))
2774 {
2775 /* If the qualifying type is non-dependent (and the name
2776 does not name a conversion operator to a dependent
2777 type), issue an error. */
2778 qualified_name_lookup_error (scope, id_expression, decl, location);
2779 return error_mark_node;
2780 }
2781 else if (!scope)
2782 {
2783 /* It may be resolved via Koenig lookup. */
2784 *idk = CP_ID_KIND_UNQUALIFIED;
2785 return id_expression;
2786 }
2787 else
2788 decl = id_expression;
2789 }
2790 /* If DECL is a variable that would be out of scope under
2791 ANSI/ISO rules, but in scope in the ARM, name lookup
2792 will succeed. Issue a diagnostic here. */
2793 else
2794 decl = check_for_out_of_scope_variable (decl);
2795
2796 /* Remember that the name was used in the definition of
2797 the current class so that we can check later to see if
2798 the meaning would have been different after the class
2799 was entirely defined. */
2800 if (!scope && decl != error_mark_node)
2801 maybe_note_name_used_in_class (id_expression, decl);
2802
2803 /* Disallow uses of local variables from containing functions, except
2804 within lambda-expressions. */
2805 if ((outer_automatic_var_p (decl)
2806 || outer_lambda_capture_p (decl))
2807 /* It's not a use (3.2) if we're in an unevaluated context. */
2808 && !cp_unevaluated_operand)
2809 {
2810 tree context = DECL_CONTEXT (decl);
2811 tree containing_function = current_function_decl;
2812 tree lambda_stack = NULL_TREE;
2813 tree lambda_expr = NULL_TREE;
2814 tree initializer = decl;
2815
2816 /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2817 support for an approach in which a reference to a local
2818 [constant] automatic variable in a nested class or lambda body
2819 would enter the expression as an rvalue, which would reduce
2820 the complexity of the problem"
2821
2822 FIXME update for final resolution of core issue 696. */
2823 if (decl_constant_var_p (decl))
2824 return integral_constant_value (decl);
2825
2826 if (TYPE_P (context))
2827 {
2828 /* Implicit capture of an explicit capture. */
2829 context = lambda_function (context);
2830 initializer = thisify_lambda_field (decl);
2831 }
2832
2833 /* If we are in a lambda function, we can move out until we hit
2834 1. the context,
2835 2. a non-lambda function, or
2836 3. a non-default capturing lambda function. */
2837 while (context != containing_function
2838 && LAMBDA_FUNCTION_P (containing_function))
2839 {
2840 lambda_expr = CLASSTYPE_LAMBDA_EXPR
2841 (DECL_CONTEXT (containing_function));
2842
2843 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2844 == CPLD_NONE)
2845 break;
2846
2847 lambda_stack = tree_cons (NULL_TREE,
2848 lambda_expr,
2849 lambda_stack);
2850
2851 containing_function
2852 = decl_function_context (containing_function);
2853 }
2854
2855 if (context == containing_function)
2856 {
2857 decl = add_default_capture (lambda_stack,
2858 /*id=*/DECL_NAME (decl),
2859 initializer);
2860 }
2861 else if (lambda_expr)
2862 {
2863 error ("%qD is not captured", decl);
2864 return error_mark_node;
2865 }
2866 else
2867 {
2868 error (TREE_CODE (decl) == VAR_DECL
2869 ? "use of %<auto%> variable from containing function"
2870 : "use of parameter from containing function");
2871 error (" %q+#D declared here", decl);
2872 return error_mark_node;
2873 }
2874 }
2875
2876 /* Also disallow uses of function parameters outside the function
2877 body, except inside an unevaluated context (i.e. decltype). */
2878 if (TREE_CODE (decl) == PARM_DECL
2879 && DECL_CONTEXT (decl) == NULL_TREE
2880 && !cp_unevaluated_operand)
2881 {
2882 error ("use of parameter %qD outside function body", decl);
2883 return error_mark_node;
2884 }
2885 }
2886
2887 /* If we didn't find anything, or what we found was a type,
2888 then this wasn't really an id-expression. */
2889 if (TREE_CODE (decl) == TEMPLATE_DECL
2890 && !DECL_FUNCTION_TEMPLATE_P (decl))
2891 {
2892 *error_msg = "missing template arguments";
2893 return error_mark_node;
2894 }
2895 else if (TREE_CODE (decl) == TYPE_DECL
2896 || TREE_CODE (decl) == NAMESPACE_DECL)
2897 {
2898 *error_msg = "expected primary-expression";
2899 return error_mark_node;
2900 }
2901
2902 /* If the name resolved to a template parameter, there is no
2903 need to look it up again later. */
2904 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2905 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2906 {
2907 tree r;
2908
2909 *idk = CP_ID_KIND_NONE;
2910 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2911 decl = TEMPLATE_PARM_DECL (decl);
2912 r = convert_from_reference (DECL_INITIAL (decl));
2913
2914 if (integral_constant_expression_p
2915 && !dependent_type_p (TREE_TYPE (decl))
2916 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2917 {
2918 if (!allow_non_integral_constant_expression_p)
2919 error ("template parameter %qD of type %qT is not allowed in "
2920 "an integral constant expression because it is not of "
2921 "integral or enumeration type", decl, TREE_TYPE (decl));
2922 *non_integral_constant_expression_p = true;
2923 }
2924 return r;
2925 }
2926 /* Similarly, we resolve enumeration constants to their
2927 underlying values. */
2928 else if (TREE_CODE (decl) == CONST_DECL)
2929 {
2930 *idk = CP_ID_KIND_NONE;
2931 if (!processing_template_decl)
2932 {
2933 used_types_insert (TREE_TYPE (decl));
2934 return DECL_INITIAL (decl);
2935 }
2936 return decl;
2937 }
2938 else
2939 {
2940 bool dependent_p;
2941
2942 /* If the declaration was explicitly qualified indicate
2943 that. The semantics of `A::f(3)' are different than
2944 `f(3)' if `f' is virtual. */
2945 *idk = (scope
2946 ? CP_ID_KIND_QUALIFIED
2947 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2948 ? CP_ID_KIND_TEMPLATE_ID
2949 : CP_ID_KIND_UNQUALIFIED));
2950
2951
2952 /* [temp.dep.expr]
2953
2954 An id-expression is type-dependent if it contains an
2955 identifier that was declared with a dependent type.
2956
2957 The standard is not very specific about an id-expression that
2958 names a set of overloaded functions. What if some of them
2959 have dependent types and some of them do not? Presumably,
2960 such a name should be treated as a dependent name. */
2961 /* Assume the name is not dependent. */
2962 dependent_p = false;
2963 if (!processing_template_decl)
2964 /* No names are dependent outside a template. */
2965 ;
2966 /* A template-id where the name of the template was not resolved
2967 is definitely dependent. */
2968 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2969 && (TREE_CODE (TREE_OPERAND (decl, 0))
2970 == IDENTIFIER_NODE))
2971 dependent_p = true;
2972 /* For anything except an overloaded function, just check its
2973 type. */
2974 else if (!is_overloaded_fn (decl))
2975 dependent_p
2976 = dependent_type_p (TREE_TYPE (decl));
2977 /* For a set of overloaded functions, check each of the
2978 functions. */
2979 else
2980 {
2981 tree fns = decl;
2982
2983 if (BASELINK_P (fns))
2984 fns = BASELINK_FUNCTIONS (fns);
2985
2986 /* For a template-id, check to see if the template
2987 arguments are dependent. */
2988 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2989 {
2990 tree args = TREE_OPERAND (fns, 1);
2991 dependent_p = any_dependent_template_arguments_p (args);
2992 /* The functions are those referred to by the
2993 template-id. */
2994 fns = TREE_OPERAND (fns, 0);
2995 }
2996
2997 /* If there are no dependent template arguments, go through
2998 the overloaded functions. */
2999 while (fns && !dependent_p)
3000 {
3001 tree fn = OVL_CURRENT (fns);
3002
3003 /* Member functions of dependent classes are
3004 dependent. */
3005 if (TREE_CODE (fn) == FUNCTION_DECL
3006 && type_dependent_expression_p (fn))
3007 dependent_p = true;
3008 else if (TREE_CODE (fn) == TEMPLATE_DECL
3009 && dependent_template_p (fn))
3010 dependent_p = true;
3011
3012 fns = OVL_NEXT (fns);
3013 }
3014 }
3015
3016 /* If the name was dependent on a template parameter, we will
3017 resolve the name at instantiation time. */
3018 if (dependent_p)
3019 {
3020 /* Create a SCOPE_REF for qualified names, if the scope is
3021 dependent. */
3022 if (scope)
3023 {
3024 if (TYPE_P (scope))
3025 {
3026 if (address_p && done)
3027 decl = finish_qualified_id_expr (scope, decl,
3028 done, address_p,
3029 template_p,
3030 template_arg_p);
3031 else
3032 {
3033 tree type = NULL_TREE;
3034 if (DECL_P (decl) && !dependent_scope_p (scope))
3035 type = TREE_TYPE (decl);
3036 decl = build_qualified_name (type,
3037 scope,
3038 id_expression,
3039 template_p);
3040 }
3041 }
3042 if (TREE_TYPE (decl))
3043 decl = convert_from_reference (decl);
3044 return decl;
3045 }
3046 /* A TEMPLATE_ID already contains all the information we
3047 need. */
3048 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3049 return id_expression;
3050 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3051 /* If we found a variable, then name lookup during the
3052 instantiation will always resolve to the same VAR_DECL
3053 (or an instantiation thereof). */
3054 if (TREE_CODE (decl) == VAR_DECL
3055 || TREE_CODE (decl) == PARM_DECL)
3056 return convert_from_reference (decl);
3057 /* The same is true for FIELD_DECL, but we also need to
3058 make sure that the syntax is correct. */
3059 else if (TREE_CODE (decl) == FIELD_DECL)
3060 {
3061 /* Since SCOPE is NULL here, this is an unqualified name.
3062 Access checking has been performed during name lookup
3063 already. Turn off checking to avoid duplicate errors. */
3064 push_deferring_access_checks (dk_no_check);
3065 decl = finish_non_static_data_member
3066 (decl, NULL_TREE,
3067 /*qualifying_scope=*/NULL_TREE);
3068 pop_deferring_access_checks ();
3069 return decl;
3070 }
3071 return id_expression;
3072 }
3073
3074 if (TREE_CODE (decl) == NAMESPACE_DECL)
3075 {
3076 error ("use of namespace %qD as expression", decl);
3077 return error_mark_node;
3078 }
3079 else if (DECL_CLASS_TEMPLATE_P (decl))
3080 {
3081 error ("use of class template %qT as expression", decl);
3082 return error_mark_node;
3083 }
3084 else if (TREE_CODE (decl) == TREE_LIST)
3085 {
3086 /* Ambiguous reference to base members. */
3087 error ("request for member %qD is ambiguous in "
3088 "multiple inheritance lattice", id_expression);
3089 print_candidates (decl);
3090 return error_mark_node;
3091 }
3092
3093 /* Mark variable-like entities as used. Functions are similarly
3094 marked either below or after overload resolution. */
3095 if (TREE_CODE (decl) == VAR_DECL
3096 || TREE_CODE (decl) == PARM_DECL
3097 || TREE_CODE (decl) == RESULT_DECL)
3098 mark_used (decl);
3099
3100 /* Only certain kinds of names are allowed in constant
3101 expression. Enumerators and template parameters have already
3102 been handled above. */
3103 if (integral_constant_expression_p
3104 && ! decl_constant_var_p (decl)
3105 && ! builtin_valid_in_constant_expr_p (decl))
3106 {
3107 if (!allow_non_integral_constant_expression_p)
3108 {
3109 error ("%qD cannot appear in a constant-expression", decl);
3110 return error_mark_node;
3111 }
3112 *non_integral_constant_expression_p = true;
3113 }
3114
3115 if (scope)
3116 {
3117 decl = (adjust_result_of_qualified_name_lookup
3118 (decl, scope, current_class_type));
3119
3120 if (TREE_CODE (decl) == FUNCTION_DECL)
3121 mark_used (decl);
3122
3123 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3124 decl = finish_qualified_id_expr (scope,
3125 decl,
3126 done,
3127 address_p,
3128 template_p,
3129 template_arg_p);
3130 else
3131 {
3132 tree r = convert_from_reference (decl);
3133
3134 /* In a template, return a SCOPE_REF for most qualified-ids
3135 so that we can check access at instantiation time. But if
3136 we're looking at a member of the current instantiation, we
3137 know we have access and building up the SCOPE_REF confuses
3138 non-type template argument handling. */
3139 if (processing_template_decl && TYPE_P (scope)
3140 && !currently_open_class (scope))
3141 r = build_qualified_name (TREE_TYPE (r),
3142 scope, decl,
3143 template_p);
3144 decl = r;
3145 }
3146 }
3147 else if (TREE_CODE (decl) == FIELD_DECL)
3148 {
3149 /* Since SCOPE is NULL here, this is an unqualified name.
3150 Access checking has been performed during name lookup
3151 already. Turn off checking to avoid duplicate errors. */
3152 push_deferring_access_checks (dk_no_check);
3153 decl = finish_non_static_data_member (decl, NULL_TREE,
3154 /*qualifying_scope=*/NULL_TREE);
3155 pop_deferring_access_checks ();
3156 }
3157 else if (is_overloaded_fn (decl))
3158 {
3159 tree first_fn;
3160
3161 first_fn = get_first_fn (decl);
3162 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3163 first_fn = DECL_TEMPLATE_RESULT (first_fn);
3164
3165 if (!really_overloaded_fn (decl))
3166 mark_used (first_fn);
3167
3168 if (!template_arg_p
3169 && TREE_CODE (first_fn) == FUNCTION_DECL
3170 && DECL_FUNCTION_MEMBER_P (first_fn)
3171 && !shared_member_p (decl))
3172 {
3173 /* A set of member functions. */
3174 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3175 return finish_class_member_access_expr (decl, id_expression,
3176 /*template_p=*/false,
3177 tf_warning_or_error);
3178 }
3179
3180 decl = baselink_for_fns (decl);
3181 }
3182 else
3183 {
3184 if (DECL_P (decl) && DECL_NONLOCAL (decl)
3185 && DECL_CLASS_SCOPE_P (decl))
3186 {
3187 tree context = context_for_name_lookup (decl);
3188 if (context != current_class_type)
3189 {
3190 tree path = currently_open_derived_class (context);
3191 perform_or_defer_access_check (TYPE_BINFO (path),
3192 decl, decl);
3193 }
3194 }
3195
3196 decl = convert_from_reference (decl);
3197 }
3198 }
3199
3200 if (TREE_DEPRECATED (decl))
3201 warn_deprecated_use (decl, NULL_TREE);
3202
3203 return decl;
3204}
3205
3206/* Implement the __typeof keyword: Return the type of EXPR, suitable for
3207 use as a type-specifier. */
3208
3209tree
3210finish_typeof (tree expr)
3211{
3212 tree type;
3213
3214 if (type_dependent_expression_p (expr))
3215 {
3216 type = cxx_make_type (TYPEOF_TYPE);
3217 TYPEOF_TYPE_EXPR (type) = expr;
3218 SET_TYPE_STRUCTURAL_EQUALITY (type);
3219
3220 return type;
3221 }
3222
3223 expr = mark_type_use (expr);
3224
3225 type = unlowered_expr_type (expr);
3226
3227 if (!type || type == unknown_type_node)
3228 {
3229 error ("type of %qE is unknown", expr);
3230 return error_mark_node;
3231 }
3232
3233 return type;
3234}
3235
3236/* Perform C++-specific checks for __builtin_offsetof before calling
3237 fold_offsetof. */
3238
3239tree
3240finish_offsetof (tree expr)
3241{
3242 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3243 {
3244 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3245 TREE_OPERAND (expr, 2));
3246 return error_mark_node;
3247 }
3248 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3249 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3250 || TREE_TYPE (expr) == unknown_type_node)
3251 {
3252 if (TREE_CODE (expr) == COMPONENT_REF
3253 || TREE_CODE (expr) == COMPOUND_EXPR)
3254 expr = TREE_OPERAND (expr, 1);
3255 error ("cannot apply %<offsetof%> to member function %qD", expr);
3256 return error_mark_node;
3257 }
3258 if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3259 expr = TREE_OPERAND (expr, 0);
3260 return fold_offsetof (expr, NULL_TREE);
3261}
3262
3263/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3264 function is broken out from the above for the benefit of the tree-ssa
3265 project. */
3266
3267void
3268simplify_aggr_init_expr (tree *tp)
3269{
3270 tree aggr_init_expr = *tp;
3271
3272 /* Form an appropriate CALL_EXPR. */
3273 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3274 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3275 tree type = TREE_TYPE (slot);
3276
3277 tree call_expr;
3278 enum style_t { ctor, arg, pcc } style;
3279
3280 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3281 style = ctor;
3282#ifdef PCC_STATIC_STRUCT_RETURN
3283 else if (1)
3284 style = pcc;
3285#endif
3286 else
3287 {
3288 gcc_assert (TREE_ADDRESSABLE (type));
3289 style = arg;
3290 }
3291
3292 call_expr = build_call_array_loc (input_location,
3293 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3294 fn,
3295 aggr_init_expr_nargs (aggr_init_expr),
3296 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3297 TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3298
3299 if (style == ctor)
3300 {
3301 /* Replace the first argument to the ctor with the address of the
3302 slot. */
3303 cxx_mark_addressable (slot);
3304 CALL_EXPR_ARG (call_expr, 0) =
3305 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3306 }
3307 else if (style == arg)
3308 {
3309 /* Just mark it addressable here, and leave the rest to
3310 expand_call{,_inline}. */
3311 cxx_mark_addressable (slot);
3312 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3313 call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3314 }
3315 else if (style == pcc)
3316 {
3317 /* If we're using the non-reentrant PCC calling convention, then we
3318 need to copy the returned value out of the static buffer into the
3319 SLOT. */
3320 push_deferring_access_checks (dk_no_check);
3321 call_expr = build_aggr_init (slot, call_expr,
3322 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3323 tf_warning_or_error);
3324 pop_deferring_access_checks ();
3325 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3326 }
3327
3328 if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3329 {
3330 tree init = build_zero_init (type, NULL_TREE,
3331 /*static_storage_p=*/false);
3332 init = build2 (INIT_EXPR, void_type_node, slot, init);
3333 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3334 init, call_expr);
3335 }
3336
3337 *tp = call_expr;
3338}
3339
3340/* Emit all thunks to FN that should be emitted when FN is emitted. */
3341
3342void
3343emit_associated_thunks (tree fn)
3344{
3345 /* When we use vcall offsets, we emit thunks with the virtual
3346 functions to which they thunk. The whole point of vcall offsets
3347 is so that you can know statically the entire set of thunks that
3348 will ever be needed for a given virtual function, thereby
3349 enabling you to output all the thunks with the function itself. */
3350 if (DECL_VIRTUAL_P (fn)
3351 /* Do not emit thunks for extern template instantiations. */
3352 && ! DECL_REALLY_EXTERN (fn))
3353 {
3354 tree thunk;
3355
3356 for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3357 {
3358 if (!THUNK_ALIAS (thunk))
3359 {
3360 use_thunk (thunk, /*emit_p=*/1);
3361 if (DECL_RESULT_THUNK_P (thunk))
3362 {
3363 tree probe;
3364
3365 for (probe = DECL_THUNKS (thunk);
3366 probe; probe = DECL_CHAIN (probe))
3367 use_thunk (probe, /*emit_p=*/1);
3368 }
3369 }
3370 else
3371 gcc_assert (!DECL_THUNKS (thunk));
3372 }
3373 }
3374}
3375
3376/* Generate RTL for FN. */
3377
3378bool
3379expand_or_defer_fn_1 (tree fn)
3380{
3381 /* When the parser calls us after finishing the body of a template
3382 function, we don't really want to expand the body. */
3383 if (processing_template_decl)
3384 {
3385 /* Normally, collection only occurs in rest_of_compilation. So,
3386 if we don't collect here, we never collect junk generated
3387 during the processing of templates until we hit a
3388 non-template function. It's not safe to do this inside a
3389 nested class, though, as the parser may have local state that
3390 is not a GC root. */
3391 if (!function_depth)
3392 ggc_collect ();
3393 return false;
3394 }
3395
3396 gcc_assert (DECL_SAVED_TREE (fn));
3397
3398 /* If this is a constructor or destructor body, we have to clone
3399 it. */
3400 if (maybe_clone_body (fn))
3401 {
3402 /* We don't want to process FN again, so pretend we've written
3403 it out, even though we haven't. */
3404 TREE_ASM_WRITTEN (fn) = 1;
3405 DECL_SAVED_TREE (fn) = NULL_TREE;
3406 return false;
3407 }
3408
3409 /* We make a decision about linkage for these functions at the end
3410 of the compilation. Until that point, we do not want the back
3411 end to output them -- but we do want it to see the bodies of
3412 these functions so that it can inline them as appropriate. */
3413 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3414 {
3415 if (DECL_INTERFACE_KNOWN (fn))
3416 /* We've already made a decision as to how this function will
3417 be handled. */;
3418 else if (!at_eof)
3419 {
3420 DECL_EXTERNAL (fn) = 1;
3421 DECL_NOT_REALLY_EXTERN (fn) = 1;
3422 note_vague_linkage_fn (fn);
3423 /* A non-template inline function with external linkage will
3424 always be COMDAT. As we must eventually determine the
3425 linkage of all functions, and as that causes writes to
3426 the data mapped in from the PCH file, it's advantageous
3427 to mark the functions at this point. */
3428 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3429 {
3430 /* This function must have external linkage, as
3431 otherwise DECL_INTERFACE_KNOWN would have been
3432 set. */
3433 gcc_assert (TREE_PUBLIC (fn));
3434 comdat_linkage (fn);
3435 DECL_INTERFACE_KNOWN (fn) = 1;
3436 }
3437 }
3438 else
3439 import_export_decl (fn);
3440
3441 /* If the user wants us to keep all inline functions, then mark
3442 this function as needed so that finish_file will make sure to
3443 output it later. Similarly, all dllexport'd functions must
3444 be emitted; there may be callers in other DLLs. */
3445 if ((flag_keep_inline_functions
3446 && DECL_DECLARED_INLINE_P (fn)
3447 && !DECL_REALLY_EXTERN (fn))
3448 || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
3449 mark_needed (fn);
3450 }
3451
3452 /* There's no reason to do any of the work here if we're only doing
3453 semantic analysis; this code just generates RTL. */
3454 if (flag_syntax_only)
3455 return false;
3456
3457 return true;
3458}
3459
3460void
3461expand_or_defer_fn (tree fn)
3462{
3463 if (expand_or_defer_fn_1 (fn))
3464 {
3465 function_depth++;
3466
3467 /* Expand or defer, at the whim of the compilation unit manager. */
3468 cgraph_finalize_function (fn, function_depth > 1);
3469 emit_associated_thunks (fn);
3470
3471 function_depth--;
3472 }
3473}
3474
3475struct nrv_data
3476{
3477 tree var;
3478 tree result;
3479 htab_t visited;
3480};
3481
3482/* Helper function for walk_tree, used by finalize_nrv below. */
3483
3484static tree
3485finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3486{
3487 struct nrv_data *dp = (struct nrv_data *)data;
3488 void **slot;
3489
3490 /* No need to walk into types. There wouldn't be any need to walk into
3491 non-statements, except that we have to consider STMT_EXPRs. */
3492 if (TYPE_P (*tp))
3493 *walk_subtrees = 0;
3494 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3495 but differs from using NULL_TREE in that it indicates that we care
3496 about the value of the RESULT_DECL. */
3497 else if (TREE_CODE (*tp) == RETURN_EXPR)
3498 TREE_OPERAND (*tp, 0) = dp->result;
3499 /* Change all cleanups for the NRV to only run when an exception is
3500 thrown. */
3501 else if (TREE_CODE (*tp) == CLEANUP_STMT
3502 && CLEANUP_DECL (*tp) == dp->var)
3503 CLEANUP_EH_ONLY (*tp) = 1;
3504 /* Replace the DECL_EXPR for the NRV with an initialization of the
3505 RESULT_DECL, if needed. */
3506 else if (TREE_CODE (*tp) == DECL_EXPR
3507 && DECL_EXPR_DECL (*tp) == dp->var)
3508 {
3509 tree init;
3510 if (DECL_INITIAL (dp->var)
3511 && DECL_INITIAL (dp->var) != error_mark_node)
3512 init = build2 (INIT_EXPR, void_type_node, dp->result,
3513 DECL_INITIAL (dp->var));
3514 else
3515 init = build_empty_stmt (EXPR_LOCATION (*tp));
3516 DECL_INITIAL (dp->var) = NULL_TREE;
3517 SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3518 *tp = init;
3519 }
3520 /* And replace all uses of the NRV with the RESULT_DECL. */
3521 else if (*tp == dp->var)
3522 *tp = dp->result;
3523
3524 /* Avoid walking into the same tree more than once. Unfortunately, we
3525 can't just use walk_tree_without duplicates because it would only call
3526 us for the first occurrence of dp->var in the function body. */
3527 slot = htab_find_slot (dp->visited, *tp, INSERT);
3528 if (*slot)
3529 *walk_subtrees = 0;
3530 else
3531 *slot = *tp;
3532
3533 /* Keep iterating. */
3534 return NULL_TREE;
3535}
3536
3537/* Called from finish_function to implement the named return value
3538 optimization by overriding all the RETURN_EXPRs and pertinent
3539 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3540 RESULT_DECL for the function. */
3541
3542void
3543finalize_nrv (tree *tp, tree var, tree result)
3544{
3545 struct nrv_data data;
3546
3547 /* Copy name from VAR to RESULT. */
3548 DECL_NAME (result) = DECL_NAME (var);
3549 /* Don't forget that we take its address. */
3550 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3551 /* Finally set DECL_VALUE_EXPR to avoid assigning
3552 a stack slot at -O0 for the original var and debug info
3553 uses RESULT location for VAR. */
3554 SET_DECL_VALUE_EXPR (var, result);
3555 DECL_HAS_VALUE_EXPR_P (var) = 1;
3556
3557 data.var = var;
3558 data.result = result;
3559 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3560 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3561 htab_delete (data.visited);
3562}
3563\f
3564/* Create CP_OMP_CLAUSE_INFO for clause C. Returns true if it is invalid. */
3565
3566bool
3567cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3568 bool need_copy_ctor, bool need_copy_assignment)
3569{
3570 int save_errorcount = errorcount;
3571 tree info, t;
3572
3573 /* Always allocate 3 elements for simplicity. These are the
3574 function decls for the ctor, dtor, and assignment op.
3575 This layout is known to the three lang hooks,
3576 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3577 and cxx_omp_clause_assign_op. */
3578 info = make_tree_vec (3);
3579 CP_OMP_CLAUSE_INFO (c) = info;
3580
3581 if (need_default_ctor || need_copy_ctor)
3582 {
3583 if (need_default_ctor)
3584 t = get_default_ctor (type);
3585 else
3586 t = get_copy_ctor (type);
3587
3588 if (t && !trivial_fn_p (t))
3589 TREE_VEC_ELT (info, 0) = t;
3590 }
3591
3592 if ((need_default_ctor || need_copy_ctor)
3593 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3594 TREE_VEC_ELT (info, 1) = get_dtor (type);
3595
3596 if (need_copy_assignment)
3597 {
3598 t = get_copy_assign (type);
3599
3600 if (t && !trivial_fn_p (t))
3601 TREE_VEC_ELT (info, 2) = t;
3602 }
3603
3604 return errorcount != save_errorcount;
3605}
3606
3607/* For all elements of CLAUSES, validate them vs OpenMP constraints.
3608 Remove any elements from the list that are invalid. */
3609
3610tree
3611finish_omp_clauses (tree clauses)
3612{
3613 bitmap_head generic_head, firstprivate_head, lastprivate_head;
3614 tree c, t, *pc = &clauses;
3615 const char *name;
3616
3617 bitmap_obstack_initialize (NULL);
3618 bitmap_initialize (&generic_head, &bitmap_default_obstack);
3619 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3620 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3621
3622 for (pc = &clauses, c = clauses; c ; c = *pc)
3623 {
3624 bool remove = false;
3625
3626 switch (OMP_CLAUSE_CODE (c))
3627 {
3628 case OMP_CLAUSE_SHARED:
3629 name = "shared";
3630 goto check_dup_generic;
3631 case OMP_CLAUSE_PRIVATE:
3632 name = "private";
3633 goto check_dup_generic;
3634 case OMP_CLAUSE_REDUCTION:
3635 name = "reduction";
3636 goto check_dup_generic;
3637 case OMP_CLAUSE_COPYPRIVATE:
3638 name = "copyprivate";
3639 goto check_dup_generic;
3640 case OMP_CLAUSE_COPYIN:
3641 name = "copyin";
3642 goto check_dup_generic;
3643 check_dup_generic:
3644 t = OMP_CLAUSE_DECL (c);
3645 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3646 {
3647 if (processing_template_decl)
3648 break;
3649 if (DECL_P (t))
3650 error ("%qD is not a variable in clause %qs", t, name);
3651 else
3652 error ("%qE is not a variable in clause %qs", t, name);
3653 remove = true;
3654 }
3655 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3656 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3657 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3658 {
3659 error ("%qD appears more than once in data clauses", t);
3660 remove = true;
3661 }
3662 else
3663 bitmap_set_bit (&generic_head, DECL_UID (t));
3664 break;
3665
3666 case OMP_CLAUSE_FIRSTPRIVATE:
3667 t = OMP_CLAUSE_DECL (c);
3668 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3669 {
3670 if (processing_template_decl)
3671 break;
3672 if (DECL_P (t))
3673 error ("%qD is not a variable in clause %<firstprivate%>", t);
3674 else
3675 error ("%qE is not a variable in clause %<firstprivate%>", t);
3676 remove = true;
3677 }
3678 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3679 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3680 {
3681 error ("%qD appears more than once in data clauses", t);
3682 remove = true;
3683 }
3684 else
3685 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3686 break;
3687
3688 case OMP_CLAUSE_LASTPRIVATE:
3689 t = OMP_CLAUSE_DECL (c);
3690 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3691 {
3692 if (processing_template_decl)
3693 break;
3694 if (DECL_P (t))
3695 error ("%qD is not a variable in clause %<lastprivate%>", t);
3696 else
3697 error ("%qE is not a variable in clause %<lastprivate%>", t);
3698 remove = true;
3699 }
3700 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3701 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3702 {
3703 error ("%qD appears more than once in data clauses", t);
3704 remove = true;
3705 }
3706 else
3707 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3708 break;
3709
3710 case OMP_CLAUSE_IF:
3711 t = OMP_CLAUSE_IF_EXPR (c);
3712 t = maybe_convert_cond (t);
3713 if (t == error_mark_node)
3714 remove = true;
3715 OMP_CLAUSE_IF_EXPR (c) = t;
3716 break;
3717
3718 case OMP_CLAUSE_NUM_THREADS:
3719 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3720 if (t == error_mark_node)
3721 remove = true;
3722 else if (!type_dependent_expression_p (t)
3723 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3724 {
3725 error ("num_threads expression must be integral");
3726 remove = true;
3727 }
3728 break;
3729
3730 case OMP_CLAUSE_SCHEDULE:
3731 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3732 if (t == NULL)
3733 ;
3734 else if (t == error_mark_node)
3735 remove = true;
3736 else if (!type_dependent_expression_p (t)
3737 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3738 {
3739 error ("schedule chunk size expression must be integral");
3740 remove = true;
3741 }
3742 break;
3743
3744 case OMP_CLAUSE_NOWAIT:
3745 case OMP_CLAUSE_ORDERED:
3746 case OMP_CLAUSE_DEFAULT:
3747 case OMP_CLAUSE_UNTIED:
3748 case OMP_CLAUSE_COLLAPSE:
3749 break;
3750
3751 default:
3752 gcc_unreachable ();
3753 }
3754
3755 if (remove)
3756 *pc = OMP_CLAUSE_CHAIN (c);
3757 else
3758 pc = &OMP_CLAUSE_CHAIN (c);
3759 }
3760
3761 for (pc = &clauses, c = clauses; c ; c = *pc)
3762 {
3763 enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3764 bool remove = false;
3765 bool need_complete_non_reference = false;
3766 bool need_default_ctor = false;
3767 bool need_copy_ctor = false;
3768 bool need_copy_assignment = false;
3769 bool need_implicitly_determined = false;
3770 tree type, inner_type;
3771
3772 switch (c_kind)
3773 {
3774 case OMP_CLAUSE_SHARED:
3775 name = "shared";
3776 need_implicitly_determined = true;
3777 break;
3778 case OMP_CLAUSE_PRIVATE:
3779 name = "private";
3780 need_complete_non_reference = true;
3781 need_default_ctor = true;
3782 need_implicitly_determined = true;
3783 break;
3784 case OMP_CLAUSE_FIRSTPRIVATE:
3785 name = "firstprivate";
3786 need_complete_non_reference = true;
3787 need_copy_ctor = true;
3788 need_implicitly_determined = true;
3789 break;
3790 case OMP_CLAUSE_LASTPRIVATE:
3791 name = "lastprivate";
3792 need_complete_non_reference = true;
3793 need_copy_assignment = true;
3794 need_implicitly_determined = true;
3795 break;
3796 case OMP_CLAUSE_REDUCTION:
3797 name = "reduction";
3798 need_implicitly_determined = true;
3799 break;
3800 case OMP_CLAUSE_COPYPRIVATE:
3801 name = "copyprivate";
3802 need_copy_assignment = true;
3803 break;
3804 case OMP_CLAUSE_COPYIN:
3805 name = "copyin";
3806 need_copy_assignment = true;
3807 break;
3808 default:
3809 pc = &OMP_CLAUSE_CHAIN (c);
3810 continue;
3811 }
3812
3813 t = OMP_CLAUSE_DECL (c);
3814 if (processing_template_decl
3815 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3816 {
3817 pc = &OMP_CLAUSE_CHAIN (c);
3818 continue;
3819 }
3820
3821 switch (c_kind)
3822 {
3823 case OMP_CLAUSE_LASTPRIVATE:
3824 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3825 need_default_ctor = true;
3826 break;
3827
3828 case OMP_CLAUSE_REDUCTION:
3829 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3830 || POINTER_TYPE_P (TREE_TYPE (t)))
3831 {
3832 error ("%qE has invalid type for %<reduction%>", t);
3833 remove = true;
3834 }
3835 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3836 {
3837 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3838 switch (r_code)
3839 {
3840 case PLUS_EXPR:
3841 case MULT_EXPR:
3842 case MINUS_EXPR:
3843 break;
3844 default:
3845 error ("%qE has invalid type for %<reduction(%s)%>",
3846 t, operator_name_info[r_code].name);
3847 remove = true;
3848 }
3849 }
3850 break;
3851
3852 case OMP_CLAUSE_COPYIN:
3853 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3854 {
3855 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3856 remove = true;
3857 }
3858 break;
3859
3860 default:
3861 break;
3862 }
3863
3864 if (need_complete_non_reference)
3865 {
3866 t = require_complete_type (t);
3867 if (t == error_mark_node)
3868 remove = true;
3869 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3870 {
3871 error ("%qE has reference type for %qs", t, name);
3872 remove = true;
3873 }
3874 }
3875 if (need_implicitly_determined)
3876 {
3877 const char *share_name = NULL;
3878
3879 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3880 share_name = "threadprivate";
3881 else switch (cxx_omp_predetermined_sharing (t))
3882 {
3883 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3884 break;
3885 case OMP_CLAUSE_DEFAULT_SHARED:
3886 share_name = "shared";
3887 break;
3888 case OMP_CLAUSE_DEFAULT_PRIVATE:
3889 share_name = "private";
3890 break;
3891 default:
3892 gcc_unreachable ();
3893 }
3894 if (share_name)
3895 {
3896 error ("%qE is predetermined %qs for %qs",
3897 t, share_name, name);
3898 remove = true;
3899 }
3900 }
3901
3902 /* We're interested in the base element, not arrays. */
3903 inner_type = type = TREE_TYPE (t);
3904 while (TREE_CODE (inner_type) == ARRAY_TYPE)
3905 inner_type = TREE_TYPE (inner_type);
3906
3907 /* Check for special function availability by building a call to one.
3908 Save the results, because later we won't be in the right context
3909 for making these queries. */
3910 if (CLASS_TYPE_P (inner_type)
3911 && (need_default_ctor || need_copy_ctor || need_copy_assignment)
3912 && !type_dependent_expression_p (t)
3913 && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
3914 need_copy_ctor, need_copy_assignment))
3915 remove = true;
3916
3917 if (remove)
3918 *pc = OMP_CLAUSE_CHAIN (c);
3919 else
3920 pc = &OMP_CLAUSE_CHAIN (c);
3921 }
3922
3923 bitmap_obstack_release (NULL);
3924 return clauses;
3925}
3926
3927/* For all variables in the tree_list VARS, mark them as thread local. */
3928
3929void
3930finish_omp_threadprivate (tree vars)
3931{
3932 tree t;
3933
3934 /* Mark every variable in VARS to be assigned thread local storage. */
3935 for (t = vars; t; t = TREE_CHAIN (t))
3936 {
3937 tree v = TREE_PURPOSE (t);
3938
3939 if (error_operand_p (v))
3940 ;
3941 else if (TREE_CODE (v) != VAR_DECL)
3942 error ("%<threadprivate%> %qD is not file, namespace "
3943 "or block scope variable", v);
3944 /* If V had already been marked threadprivate, it doesn't matter
3945 whether it had been used prior to this point. */
3946 else if (TREE_USED (v)
3947 && (DECL_LANG_SPECIFIC (v) == NULL
3948 || !CP_DECL_THREADPRIVATE_P (v)))
3949 error ("%qE declared %<threadprivate%> after first use", v);
3950 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3951 error ("automatic variable %qE cannot be %<threadprivate%>", v);
3952 else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3953 error ("%<threadprivate%> %qE has incomplete type", v);
3954 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
3955 && CP_DECL_CONTEXT (v) != current_class_type)
3956 error ("%<threadprivate%> %qE directive not "
3957 "in %qT definition", v, CP_DECL_CONTEXT (v));
3958 else
3959 {
3960 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
3961 if (DECL_LANG_SPECIFIC (v) == NULL)
3962 {
3963 retrofit_lang_decl (v);
3964
3965 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
3966 after the allocation of the lang_decl structure. */
3967 if (DECL_DISCRIMINATOR_P (v))
3968 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
3969 }
3970
3971 if (! DECL_THREAD_LOCAL_P (v))
3972 {
3973 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
3974 /* If rtl has been already set for this var, call
3975 make_decl_rtl once again, so that encode_section_info
3976 has a chance to look at the new decl flags. */
3977 if (DECL_RTL_SET_P (v))
3978 make_decl_rtl (v);
3979 }
3980 CP_DECL_THREADPRIVATE_P (v) = 1;
3981 }
3982 }
3983}
3984
3985/* Build an OpenMP structured block. */
3986
3987tree
3988begin_omp_structured_block (void)
3989{
3990 return do_pushlevel (sk_omp);
3991}
3992
3993tree
3994finish_omp_structured_block (tree block)
3995{
3996 return do_poplevel (block);
3997}
3998
3999/* Similarly, except force the retention of the BLOCK. */
4000
4001tree
4002begin_omp_parallel (void)
4003{
4004 keep_next_level (true);
4005 return begin_omp_structured_block ();
4006}
4007
4008tree
4009finish_omp_parallel (tree clauses, tree body)
4010{
4011 tree stmt;
4012
4013 body = finish_omp_structured_block (body);
4014
4015 stmt = make_node (OMP_PARALLEL);
4016 TREE_TYPE (stmt) = void_type_node;
4017 OMP_PARALLEL_CLAUSES (stmt) = clauses;
4018 OMP_PARALLEL_BODY (stmt) = body;
4019
4020 return add_stmt (stmt);
4021}
4022
4023tree
4024begin_omp_task (void)
4025{
4026 keep_next_level (true);
4027 return begin_omp_structured_block ();
4028}
4029
4030tree
4031finish_omp_task (tree clauses, tree body)
4032{
4033 tree stmt;
4034
4035 body = finish_omp_structured_block (body);
4036
4037 stmt = make_node (OMP_TASK);
4038 TREE_TYPE (stmt) = void_type_node;
4039 OMP_TASK_CLAUSES (stmt) = clauses;
4040 OMP_TASK_BODY (stmt) = body;
4041
4042 return add_stmt (stmt);
4043}
4044
4045/* Helper function for finish_omp_for. Convert Ith random access iterator
4046 into integral iterator. Return FALSE if successful. */
4047
4048static bool
4049handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4050 tree condv, tree incrv, tree *body,
4051 tree *pre_body, tree clauses)
4052{
4053 tree diff, iter_init, iter_incr = NULL, last;
4054 tree incr_var = NULL, orig_pre_body, orig_body, c;
4055 tree decl = TREE_VEC_ELT (declv, i);
4056 tree init = TREE_VEC_ELT (initv, i);
4057 tree cond = TREE_VEC_ELT (condv, i);
4058 tree incr = TREE_VEC_ELT (incrv, i);
4059 tree iter = decl;
4060 location_t elocus = locus;
4061
4062 if (init && EXPR_HAS_LOCATION (init))
4063 elocus = EXPR_LOCATION (init);
4064
4065 switch (TREE_CODE (cond))
4066 {
4067 case GT_EXPR:
4068 case GE_EXPR:
4069 case LT_EXPR:
4070 case LE_EXPR:
4071 if (TREE_OPERAND (cond, 1) == iter)
4072 cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4073 TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4074 if (TREE_OPERAND (cond, 0) != iter)
4075 cond = error_mark_node;
4076 else
4077 {
4078 tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4079 TREE_OPERAND (cond, 1), ERROR_MARK,
4080 NULL, tf_warning_or_error);
4081 if (error_operand_p (tem))
4082 return true;
4083 }
4084 break;
4085 default:
4086 cond = error_mark_node;
4087 break;
4088 }
4089 if (cond == error_mark_node)
4090 {
4091 error_at (elocus, "invalid controlling predicate");
4092 return true;
4093 }
4094 diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4095 ERROR_MARK, iter, ERROR_MARK, NULL,
4096 tf_warning_or_error);
4097 if (error_operand_p (diff))
4098 return true;
4099 if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4100 {
4101 error_at (elocus, "difference between %qE and %qD does not have integer type",
4102 TREE_OPERAND (cond, 1), iter);
4103 return true;
4104 }
4105
4106 switch (TREE_CODE (incr))
4107 {
4108 case PREINCREMENT_EXPR:
4109 case PREDECREMENT_EXPR:
4110 case POSTINCREMENT_EXPR:
4111 case POSTDECREMENT_EXPR:
4112 if (TREE_OPERAND (incr, 0) != iter)
4113 {
4114 incr = error_mark_node;
4115 break;
4116 }
4117 iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4118 tf_warning_or_error);
4119 if (error_operand_p (iter_incr))
4120 return true;
4121 else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4122 || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4123 incr = integer_one_node;
4124 else
4125 incr = integer_minus_one_node;
4126 break;
4127 case MODIFY_EXPR:
4128 if (TREE_OPERAND (incr, 0) != iter)
4129 incr = error_mark_node;
4130 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4131 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4132 {
4133 tree rhs = TREE_OPERAND (incr, 1);
4134 if (TREE_OPERAND (rhs, 0) == iter)
4135 {
4136 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4137 != INTEGER_TYPE)
4138 incr = error_mark_node;
4139 else
4140 {
4141 iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4142 TREE_OPERAND (rhs, 1),
4143 tf_warning_or_error);
4144 if (error_operand_p (iter_incr))
4145 return true;
4146 incr = TREE_OPERAND (rhs, 1);
4147 incr = cp_convert (TREE_TYPE (diff), incr);
4148 if (TREE_CODE (rhs) == MINUS_EXPR)
4149 {
4150 incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4151 incr = fold_if_not_in_template (incr);
4152 }
4153 if (TREE_CODE (incr) != INTEGER_CST
4154 && (TREE_CODE (incr) != NOP_EXPR
4155 || (TREE_CODE (TREE_OPERAND (incr, 0))
4156 != INTEGER_CST)))
4157 iter_incr = NULL;
4158 }
4159 }
4160 else if (TREE_OPERAND (rhs, 1) == iter)
4161 {
4162 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4163 || TREE_CODE (rhs) != PLUS_EXPR)
4164 incr = error_mark_node;
4165 else
4166 {
4167 iter_incr = build_x_binary_op (PLUS_EXPR,
4168 TREE_OPERAND (rhs, 0),
4169 ERROR_MARK, iter,
4170 ERROR_MARK, NULL,
4171 tf_warning_or_error);
4172 if (error_operand_p (iter_incr))
4173 return true;
4174 iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4175 iter_incr,
4176 tf_warning_or_error);
4177 if (error_operand_p (iter_incr))
4178 return true;
4179 incr = TREE_OPERAND (rhs, 0);
4180 iter_incr = NULL;
4181 }
4182 }
4183 else
4184 incr = error_mark_node;
4185 }
4186 else
4187 incr = error_mark_node;
4188 break;
4189 default:
4190 incr = error_mark_node;
4191 break;
4192 }
4193
4194 if (incr == error_mark_node)
4195 {
4196 error_at (elocus, "invalid increment expression");
4197 return true;
4198 }
4199
4200 incr = cp_convert (TREE_TYPE (diff), incr);
4201 for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4202 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4203 && OMP_CLAUSE_DECL (c) == iter)
4204 break;
4205
4206 decl = create_temporary_var (TREE_TYPE (diff));
4207 pushdecl (decl);
4208 add_decl_expr (decl);
4209 last = create_temporary_var (TREE_TYPE (diff));
4210 pushdecl (last);
4211 add_decl_expr (last);
4212 if (c && iter_incr == NULL)
4213 {
4214 incr_var = create_temporary_var (TREE_TYPE (diff));
4215 pushdecl (incr_var);
4216 add_decl_expr (incr_var);
4217 }
4218 gcc_assert (stmts_are_full_exprs_p ());
4219
4220 orig_pre_body = *pre_body;
4221 *pre_body = push_stmt_list ();
4222 if (orig_pre_body)
4223 add_stmt (orig_pre_body);
4224 if (init != NULL)
4225 finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4226 tf_warning_or_error));
4227 init = build_int_cst (TREE_TYPE (diff), 0);
4228 if (c && iter_incr == NULL)
4229 {
4230 finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4231 incr, tf_warning_or_error));
4232 incr = incr_var;
4233 iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4234 tf_warning_or_error);
4235 }
4236 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4237 tf_warning_or_error));
4238 *pre_body = pop_stmt_list (*pre_body);
4239
4240 cond = cp_build_binary_op (elocus,
4241 TREE_CODE (cond), decl, diff,
4242 tf_warning_or_error);
4243 incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4244 elocus, incr, NULL_TREE);
4245
4246 orig_body = *body;
4247 *body = push_stmt_list ();
4248 iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4249 iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4250 tf_warning_or_error);
4251 iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4252 finish_expr_stmt (iter_init);
4253 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4254 tf_warning_or_error));
4255 add_stmt (orig_body);
4256 *body = pop_stmt_list (*body);
4257
4258 if (c)
4259 {
4260 OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4261 finish_expr_stmt (iter_incr);
4262 OMP_CLAUSE_LASTPRIVATE_STMT (c)
4263 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4264 }
4265
4266 TREE_VEC_ELT (declv, i) = decl;
4267 TREE_VEC_ELT (initv, i) = init;
4268 TREE_VEC_ELT (condv, i) = cond;
4269 TREE_VEC_ELT (incrv, i) = incr;
4270
4271 return false;
4272}
4273
4274/* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
4275 are directly for their associated operands in the statement. DECL
4276 and INIT are a combo; if DECL is NULL then INIT ought to be a
4277 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
4278 optional statements that need to go before the loop into its
4279 sk_omp scope. */
4280
4281tree
4282finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4283 tree incrv, tree body, tree pre_body, tree clauses)
4284{
4285 tree omp_for = NULL, orig_incr = NULL;
4286 tree decl, init, cond, incr;
4287 location_t elocus;
4288 int i;
4289
4290 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4291 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4292 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4293 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4294 {
4295 decl = TREE_VEC_ELT (declv, i);
4296 init = TREE_VEC_ELT (initv, i);
4297 cond = TREE_VEC_ELT (condv, i);
4298 incr = TREE_VEC_ELT (incrv, i);
4299 elocus = locus;
4300
4301 if (decl == NULL)
4302 {
4303 if (init != NULL)
4304 switch (TREE_CODE (init))
4305 {
4306 case MODIFY_EXPR:
4307 decl = TREE_OPERAND (init, 0);
4308 init = TREE_OPERAND (init, 1);
4309 break;
4310 case MODOP_EXPR:
4311 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4312 {
4313 decl = TREE_OPERAND (init, 0);
4314 init = TREE_OPERAND (init, 2);
4315 }
4316 break;
4317 default:
4318 break;
4319 }
4320
4321 if (decl == NULL)
4322 {
4323 error_at (locus,
4324 "expected iteration declaration or initialization");
4325 return NULL;
4326 }
4327 }
4328
4329 if (init && EXPR_HAS_LOCATION (init))
4330 elocus = EXPR_LOCATION (init);
4331
4332 if (cond == NULL)
4333 {
4334 error_at (elocus, "missing controlling predicate");
4335 return NULL;
4336 }
4337
4338 if (incr == NULL)
4339 {
4340 error_at (elocus, "missing increment expression");
4341 return NULL;
4342 }
4343
4344 TREE_VEC_ELT (declv, i) = decl;
4345 TREE_VEC_ELT (initv, i) = init;
4346 }
4347
4348 if (dependent_omp_for_p (declv, initv, condv, incrv))
4349 {
4350 tree stmt;
4351
4352 stmt = make_node (OMP_FOR);
4353
4354 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4355 {
4356 /* This is really just a place-holder. We'll be decomposing this
4357 again and going through the cp_build_modify_expr path below when
4358 we instantiate the thing. */
4359 TREE_VEC_ELT (initv, i)
4360 = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4361 TREE_VEC_ELT (initv, i));
4362 }
4363
4364 TREE_TYPE (stmt) = void_type_node;
4365 OMP_FOR_INIT (stmt) = initv;
4366 OMP_FOR_COND (stmt) = condv;
4367 OMP_FOR_INCR (stmt) = incrv;
4368 OMP_FOR_BODY (stmt) = body;
4369 OMP_FOR_PRE_BODY (stmt) = pre_body;
4370 OMP_FOR_CLAUSES (stmt) = clauses;
4371
4372 SET_EXPR_LOCATION (stmt, locus);
4373 return add_stmt (stmt);
4374 }
4375
4376 if (processing_template_decl)
4377 orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4378
4379 for (i = 0; i < TREE_VEC_LENGTH (declv); )
4380 {
4381 decl = TREE_VEC_ELT (declv, i);
4382 init = TREE_VEC_ELT (initv, i);
4383 cond = TREE_VEC_ELT (condv, i);
4384 incr = TREE_VEC_ELT (incrv, i);
4385 if (orig_incr)
4386 TREE_VEC_ELT (orig_incr, i) = incr;
4387 elocus = locus;
4388
4389 if (init && EXPR_HAS_LOCATION (init))
4390 elocus = EXPR_LOCATION (init);
4391
4392 if (!DECL_P (decl))
4393 {
4394 error_at (elocus, "expected iteration declaration or initialization");
4395 return NULL;
4396 }
4397
4398 if (incr && TREE_CODE (incr) == MODOP_EXPR)
4399 {
4400 if (orig_incr)
4401 TREE_VEC_ELT (orig_incr, i) = incr;
4402 incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4403 TREE_CODE (TREE_OPERAND (incr, 1)),
4404 TREE_OPERAND (incr, 2),
4405 tf_warning_or_error);
4406 }
4407
4408 if (CLASS_TYPE_P (TREE_TYPE (decl)))
4409 {
4410 if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4411 incrv, &body, &pre_body, clauses))
4412 return NULL;
4413 continue;
4414 }
4415
4416 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4417 && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4418 {
4419 error_at (elocus, "invalid type for iteration variable %qE", decl);
4420 return NULL;
4421 }
4422
4423 if (!processing_template_decl)
4424 {
4425 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4426 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4427 }
4428 else
4429 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4430 if (cond
4431 && TREE_SIDE_EFFECTS (cond)
4432 && COMPARISON_CLASS_P (cond)
4433 && !processing_template_decl)
4434 {
4435 tree t = TREE_OPERAND (cond, 0);
4436 if (TREE_SIDE_EFFECTS (t)
4437 && t != decl
4438 && (TREE_CODE (t) != NOP_EXPR
4439 || TREE_OPERAND (t, 0) != decl))
4440 TREE_OPERAND (cond, 0)
4441 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4442
4443 t = TREE_OPERAND (cond, 1);
4444 if (TREE_SIDE_EFFECTS (t)
4445 && t != decl
4446 && (TREE_CODE (t) != NOP_EXPR
4447 || TREE_OPERAND (t, 0) != decl))
4448 TREE_OPERAND (cond, 1)
4449 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4450 }
4451 if (decl == error_mark_node || init == error_mark_node)
4452 return NULL;
4453
4454 TREE_VEC_ELT (declv, i) = decl;
4455 TREE_VEC_ELT (initv, i) = init;
4456 TREE_VEC_ELT (condv, i) = cond;
4457 TREE_VEC_ELT (incrv, i) = incr;
4458 i++;
4459 }
4460
4461 if (IS_EMPTY_STMT (pre_body))
4462 pre_body = NULL;
4463
4464 omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4465 body, pre_body);
4466
4467 if (omp_for == NULL)
4468 return NULL;
4469
4470 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4471 {
4472 decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4473 incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4474
4475 if (TREE_CODE (incr) != MODIFY_EXPR)
4476 continue;
4477
4478 if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4479 && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4480 && !processing_template_decl)
4481 {
4482 tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4483 if (TREE_SIDE_EFFECTS (t)
4484 && t != decl
4485 && (TREE_CODE (t) != NOP_EXPR
4486 || TREE_OPERAND (t, 0) != decl))
4487 TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4488 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4489
4490 t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4491 if (TREE_SIDE_EFFECTS (t)
4492 && t != decl
4493 && (TREE_CODE (t) != NOP_EXPR
4494 || TREE_OPERAND (t, 0) != decl))
4495 TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4496 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4497 }
4498
4499 if (orig_incr)
4500 TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4501 }
4502 if (omp_for != NULL)
4503 OMP_FOR_CLAUSES (omp_for) = clauses;
4504 return omp_for;
4505}
4506
4507void
4508finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4509{
4510 tree orig_lhs;
4511 tree orig_rhs;
4512 bool dependent_p;
4513 tree stmt;
4514
4515 orig_lhs = lhs;
4516 orig_rhs = rhs;
4517 dependent_p = false;
4518 stmt = NULL_TREE;
4519
4520 /* Even in a template, we can detect invalid uses of the atomic
4521 pragma if neither LHS nor RHS is type-dependent. */
4522 if (processing_template_decl)
4523 {
4524 dependent_p = (type_dependent_expression_p (lhs)
4525 || type_dependent_expression_p (rhs));
4526 if (!dependent_p)
4527 {
4528 lhs = build_non_dependent_expr (lhs);
4529 rhs = build_non_dependent_expr (rhs);
4530 }
4531 }
4532 if (!dependent_p)
4533 {
4534 stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4535 if (stmt == error_mark_node)
4536 return;
4537 }
4538 if (processing_template_decl)
4539 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4540 build2 (code, void_type_node, orig_lhs, orig_rhs));
4541 add_stmt (stmt);
4542}
4543
4544void
4545finish_omp_barrier (void)
4546{
4547 tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4548 VEC(tree,gc) *vec = make_tree_vector ();
4549 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4550 release_tree_vector (vec);
4551 finish_expr_stmt (stmt);
4552}
4553
4554void
4555finish_omp_flush (void)
4556{
4557 tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4558 VEC(tree,gc) *vec = make_tree_vector ();
4559 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4560 release_tree_vector (vec);
4561 finish_expr_stmt (stmt);
4562}
4563
4564void
4565finish_omp_taskwait (void)
4566{
4567 tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4568 VEC(tree,gc) *vec = make_tree_vector ();
4569 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4570 release_tree_vector (vec);
4571 finish_expr_stmt (stmt);
4572}
4573\f
4574void
4575init_cp_semantics (void)
4576{
4577}
4578\f
4579/* Build a STATIC_ASSERT for a static assertion with the condition
4580 CONDITION and the message text MESSAGE. LOCATION is the location
4581 of the static assertion in the source code. When MEMBER_P, this
4582 static assertion is a member of a class. */
4583void
4584finish_static_assert (tree condition, tree message, location_t location,
4585 bool member_p)
4586{
4587 if (check_for_bare_parameter_packs (condition))
4588 condition = error_mark_node;
4589
4590 if (type_dependent_expression_p (condition)
4591 || value_dependent_expression_p (condition))
4592 {
4593 /* We're in a template; build a STATIC_ASSERT and put it in
4594 the right place. */
4595 tree assertion;
4596
4597 assertion = make_node (STATIC_ASSERT);
4598 STATIC_ASSERT_CONDITION (assertion) = condition;
4599 STATIC_ASSERT_MESSAGE (assertion) = message;
4600 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4601
4602 if (member_p)
4603 maybe_add_class_template_decl_list (current_class_type,
4604 assertion,
4605 /*friend_p=*/0);
4606 else
4607 add_stmt (assertion);
4608
4609 return;
4610 }
4611
4612 /* Fold the expression and convert it to a boolean value. */
4613 condition = fold_non_dependent_expr (condition);
4614 condition = cp_convert (boolean_type_node, condition);
4615 condition = maybe_constant_value (condition);
4616
4617 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4618 /* Do nothing; the condition is satisfied. */
4619 ;
4620 else
4621 {
4622 location_t saved_loc = input_location;
4623
4624 input_location = location;
4625 if (TREE_CODE (condition) == INTEGER_CST
4626 && integer_zerop (condition))
4627 /* Report the error. */
4628 error ("static assertion failed: %E", message);
4629 else if (condition && condition != error_mark_node)
4630 {
4631 error ("non-constant condition for static assertion");
4632 cxx_constant_value (condition);
4633 }
4634 input_location = saved_loc;
4635 }
4636}
4637\f
4638/* Returns the type of EXPR for cases where we can determine it even though
4639 EXPR is a type-dependent expression. */
4640
4641tree
4642describable_type (tree expr)
4643{
4644 tree type = NULL_TREE;
4645
4646 if (! type_dependent_expression_p (expr)
4647 && ! type_unknown_p (expr))
4648 {
4649 type = unlowered_expr_type (expr);
4650 if (real_lvalue_p (expr))
4651 type = build_reference_type (type);
4652 }
4653
4654 if (type)
4655 return type;
4656
4657 switch (TREE_CODE (expr))
4658 {
4659 case VAR_DECL:
4660 case PARM_DECL:
4661 case RESULT_DECL:
4662 case FUNCTION_DECL:
4663 return TREE_TYPE (expr);
4664 break;
4665
4666 case NEW_EXPR:
4667 case CONST_DECL:
4668 case TEMPLATE_PARM_INDEX:
4669 case CAST_EXPR:
4670 case STATIC_CAST_EXPR:
4671 case REINTERPRET_CAST_EXPR:
4672 case CONST_CAST_EXPR:
4673 case DYNAMIC_CAST_EXPR:
4674 type = TREE_TYPE (expr);
4675 break;
4676
4677 case INDIRECT_REF:
4678 {
4679 tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4680 if (ptrtype && POINTER_TYPE_P (ptrtype))
4681 type = build_reference_type (TREE_TYPE (ptrtype));
4682 }
4683 break;
4684
4685 default:
4686 if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4687 type = TREE_TYPE (expr);
4688 break;
4689 }
4690
4691 if (type && type_uses_auto (type))
4692 return NULL_TREE;
4693 else
4694 return type;
4695}
4696
4697/* Implements the C++0x decltype keyword. Returns the type of EXPR,
4698 suitable for use as a type-specifier.
4699
4700 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4701 id-expression or a class member access, FALSE when it was parsed as
4702 a full expression. */
4703
4704tree
4705finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4706{
4707 tree orig_expr = expr;
4708 tree type = NULL_TREE;
4709
4710 if (!expr || error_operand_p (expr))
4711 return error_mark_node;
4712
4713 if (TYPE_P (expr)
4714 || TREE_CODE (expr) == TYPE_DECL
4715 || (TREE_CODE (expr) == BIT_NOT_EXPR
4716 && TYPE_P (TREE_OPERAND (expr, 0))))
4717 {
4718 error ("argument to decltype must be an expression");
4719 return error_mark_node;
4720 }
4721
4722 if (type_dependent_expression_p (expr)
4723 /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4724 if it isn't dependent, so that we can check access control at
4725 instantiation time, so defer the decltype as well (PR 42277). */
4726 || (id_expression_or_member_access_p
4727 && processing_template_decl
4728 && TREE_CODE (expr) == COMPONENT_REF))
4729 {
4730 if (id_expression_or_member_access_p)
4731 {
4732 switch (TREE_CODE (expr))
4733 {
4734 case VAR_DECL:
4735 case PARM_DECL:
4736 case RESULT_DECL:
4737 case FUNCTION_DECL:
4738 case CONST_DECL:
4739 case TEMPLATE_PARM_INDEX:
4740 type = TREE_TYPE (expr);
4741 break;
4742
4743 default:
4744 break;
4745 }
4746 }
4747
4748 if (type && !type_uses_auto (type))
4749 return type;
4750
4751 treat_as_dependent:
4752 type = cxx_make_type (DECLTYPE_TYPE);
4753 DECLTYPE_TYPE_EXPR (type) = expr;
4754 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4755 = id_expression_or_member_access_p;
4756 SET_TYPE_STRUCTURAL_EQUALITY (type);
4757
4758 return type;
4759 }
4760
4761 /* The type denoted by decltype(e) is defined as follows: */
4762
4763 expr = resolve_nondeduced_context (expr);
4764
4765 /* To get the size of a static data member declared as an array of
4766 unknown bound, we need to instantiate it. */
4767 if (TREE_CODE (expr) == VAR_DECL
4768 && VAR_HAD_UNKNOWN_BOUND (expr)
4769 && DECL_TEMPLATE_INSTANTIATION (expr))
4770 instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
4771
4772 if (id_expression_or_member_access_p)
4773 {
4774 /* If e is an id-expression or a class member access (5.2.5
4775 [expr.ref]), decltype(e) is defined as the type of the entity
4776 named by e. If there is no such entity, or e names a set of
4777 overloaded functions, the program is ill-formed. */
4778 if (TREE_CODE (expr) == IDENTIFIER_NODE)
4779 expr = lookup_name (expr);
4780
4781 if (TREE_CODE (expr) == INDIRECT_REF)
4782 /* This can happen when the expression is, e.g., "a.b". Just
4783 look at the underlying operand. */
4784 expr = TREE_OPERAND (expr, 0);
4785
4786 if (TREE_CODE (expr) == OFFSET_REF
4787 || TREE_CODE (expr) == MEMBER_REF)
4788 /* We're only interested in the field itself. If it is a
4789 BASELINK, we will need to see through it in the next
4790 step. */
4791 expr = TREE_OPERAND (expr, 1);
4792
4793 if (TREE_CODE (expr) == BASELINK)
4794 /* See through BASELINK nodes to the underlying functions. */
4795 expr = BASELINK_FUNCTIONS (expr);
4796
4797 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4798 expr = TREE_OPERAND (expr, 0);
4799
4800 if (TREE_CODE (expr) == OVERLOAD)
4801 {
4802 if (OVL_CHAIN (expr)
4803 || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
4804 {
4805 error ("%qE refers to a set of overloaded functions", orig_expr);
4806 return error_mark_node;
4807 }
4808 else
4809 /* An overload set containing only one function: just look
4810 at that function. */
4811 expr = OVL_FUNCTION (expr);
4812 }
4813
4814 switch (TREE_CODE (expr))
4815 {
4816 case FIELD_DECL:
4817 if (DECL_BIT_FIELD_TYPE (expr))
4818 {
4819 type = DECL_BIT_FIELD_TYPE (expr);
4820 break;
4821 }
4822 /* Fall through for fields that aren't bitfields. */
4823
4824 case FUNCTION_DECL:
4825 case VAR_DECL:
4826 case CONST_DECL:
4827 case PARM_DECL:
4828 case RESULT_DECL:
4829 case TEMPLATE_PARM_INDEX:
4830 expr = mark_type_use (expr);
4831 type = TREE_TYPE (expr);
4832 break;
4833
4834 case ERROR_MARK:
4835 type = error_mark_node;
4836 break;
4837
4838 case COMPONENT_REF:
4839 mark_type_use (expr);
4840 type = is_bitfield_expr_with_lowered_type (expr);
4841 if (!type)
4842 type = TREE_TYPE (TREE_OPERAND (expr, 1));
4843 break;
4844
4845 case BIT_FIELD_REF:
4846 gcc_unreachable ();
4847
4848 case INTEGER_CST:
4849 /* We can get here when the id-expression refers to an
4850 enumerator. */
4851 type = TREE_TYPE (expr);
4852 break;
4853
4854 default:
4855 gcc_assert (TYPE_P (expr) || DECL_P (expr)
4856 || TREE_CODE (expr) == SCOPE_REF);
4857 error ("argument to decltype must be an expression");
4858 return error_mark_node;
4859 }
4860 }
4861 else
4862 {
4863 /* Expressions of reference type are sometimes wrapped in
4864 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
4865 representation, not part of the language, so we have to look
4866 through them. */
4867 if (TREE_CODE (expr) == INDIRECT_REF
4868 && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4869 == REFERENCE_TYPE)
4870 expr = TREE_OPERAND (expr, 0);
4871
4872 if (TREE_CODE (expr) == CALL_EXPR)
4873 {
4874 /* If e is a function call (5.2.2 [expr.call]) or an
4875 invocation of an overloaded operator (parentheses around e
4876 are ignored), decltype(e) is defined as the return type of
4877 that function. */
4878 tree fndecl = get_callee_fndecl (expr);
4879 if (fndecl && fndecl != error_mark_node)
4880 type = TREE_TYPE (TREE_TYPE (fndecl));
4881 else
4882 {
4883 tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4884 if ((TREE_CODE (target_type) == REFERENCE_TYPE
4885 || TREE_CODE (target_type) == POINTER_TYPE)
4886 && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4887 || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4888 type = TREE_TYPE (TREE_TYPE (target_type));
4889 else if (processing_template_decl)
4890 /* Within a template finish_call_expr doesn't resolve
4891 CALL_EXPR_FN, so even though this decltype isn't really
4892 dependent let's defer resolving it. */
4893 goto treat_as_dependent;
4894 else
4895 sorry ("unable to determine the declared type of expression %<%E%>",
4896 expr);
4897 }
4898 }
4899 else
4900 {
4901 type = is_bitfield_expr_with_lowered_type (expr);
4902 if (type)
4903 {
4904 /* Bitfields are special, because their type encodes the
4905 number of bits they store. If the expression referenced a
4906 bitfield, TYPE now has the declared type of that
4907 bitfield. */
4908 type = cp_build_qualified_type (type,
4909 cp_type_quals (TREE_TYPE (expr)));
4910
4911 if (real_lvalue_p (expr))
4912 type = build_reference_type (type);
4913 }
4914 /* Within a lambda-expression:
4915
4916 Every occurrence of decltype((x)) where x is a possibly
4917 parenthesized id-expression that names an entity of
4918 automatic storage duration is treated as if x were
4919 transformed into an access to a corresponding data member
4920 of the closure type that would have been declared if x
4921 were a use of the denoted entity. */
4922 else if (outer_automatic_var_p (expr)
4923 && current_function_decl
4924 && LAMBDA_FUNCTION_P (current_function_decl))
4925 type = capture_decltype (expr);
4926 else
4927 {
4928 /* Otherwise, where T is the type of e, if e is an lvalue,
4929 decltype(e) is defined as T&, otherwise decltype(e) is
4930 defined as T. */
4931 type = TREE_TYPE (expr);
4932 if (type == error_mark_node)
4933 return error_mark_node;
4934 else if (expr == current_class_ptr)
4935 /* If the expression is just "this", we want the
4936 cv-unqualified pointer for the "this" type. */
4937 type = TYPE_MAIN_VARIANT (type);
4938 else if (real_lvalue_p (expr))
4939 {
4940 if (TREE_CODE (type) != REFERENCE_TYPE
4941 || TYPE_REF_IS_RVALUE (type))
4942 type = build_reference_type (non_reference (type));
4943 }
4944 else
4945 type = non_reference (type);
4946 }
4947 }
4948 }
4949
4950 if (!type || type == unknown_type_node)
4951 {
4952 error ("type of %qE is unknown", expr);
4953 return error_mark_node;
4954 }
4955
4956 return type;
4957}
4958
4959/* Called from trait_expr_value to evaluate either __has_nothrow_assign or
4960 __has_nothrow_copy, depending on assign_p. */
4961
4962static bool
4963classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
4964{
4965 tree fns;
4966
4967 if (assign_p)
4968 {
4969 int ix;
4970 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
4971 if (ix < 0)
4972 return false;
4973 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
4974 }
4975 else if (TYPE_HAS_COPY_CTOR (type))
4976 {
4977 /* If construction of the copy constructor was postponed, create
4978 it now. */
4979 if (CLASSTYPE_LAZY_COPY_CTOR (type))
4980 lazily_declare_fn (sfk_copy_constructor, type);
4981 if (CLASSTYPE_LAZY_MOVE_CTOR (type))
4982 lazily_declare_fn (sfk_move_constructor, type);
4983 fns = CLASSTYPE_CONSTRUCTORS (type);
4984 }
4985 else
4986 return false;
4987
4988 for (; fns; fns = OVL_NEXT (fns))
4989 {
4990 tree fn = OVL_CURRENT (fns);
4991
4992 if (assign_p)
4993 {
4994 if (copy_fn_p (fn) == 0)
4995 continue;
4996 }
4997 else if (copy_fn_p (fn) <= 0)
4998 continue;
4999
5000 if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5001 return false;
5002 }
5003
5004 return true;
5005}
5006
5007/* Actually evaluates the trait. */
5008
5009static bool
5010trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5011{
5012 enum tree_code type_code1;
5013 tree t;
5014
5015 type_code1 = TREE_CODE (type1);
5016
5017 switch (kind)
5018 {
5019 case CPTK_HAS_NOTHROW_ASSIGN:
5020 type1 = strip_array_types (type1);
5021 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5022 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5023 || (CLASS_TYPE_P (type1)
5024 && classtype_has_nothrow_assign_or_copy_p (type1,
5025 true))));
5026
5027 case CPTK_HAS_TRIVIAL_ASSIGN:
5028 /* ??? The standard seems to be missing the "or array of such a class
5029 type" wording for this trait. */
5030 type1 = strip_array_types (type1);
5031 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5032 && (trivial_type_p (type1)
5033 || (CLASS_TYPE_P (type1)
5034 && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5035
5036 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5037 type1 = strip_array_types (type1);
5038 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5039 || (CLASS_TYPE_P (type1)
5040 && (t = locate_ctor (type1))
5041 && TYPE_NOTHROW_P (TREE_TYPE (t))));
5042
5043 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5044 type1 = strip_array_types (type1);
5045 return (trivial_type_p (type1)
5046 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5047
5048 case CPTK_HAS_NOTHROW_COPY:
5049 type1 = strip_array_types (type1);
5050 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5051 || (CLASS_TYPE_P (type1)
5052 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5053
5054 case CPTK_HAS_TRIVIAL_COPY:
5055 /* ??? The standard seems to be missing the "or array of such a class
5056 type" wording for this trait. */
5057 type1 = strip_array_types (type1);
5058 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5059 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5060
5061 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5062 type1 = strip_array_types (type1);
5063 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5064 || (CLASS_TYPE_P (type1)
5065 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5066
5067 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5068 return type_has_virtual_destructor (type1);
5069
5070 case CPTK_IS_ABSTRACT:
5071 return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5072
5073 case CPTK_IS_BASE_OF:
5074 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5075 && DERIVED_FROM_P (type1, type2));
5076
5077 case CPTK_IS_CLASS:
5078 return (NON_UNION_CLASS_TYPE_P (type1));
5079
5080 case CPTK_IS_CONVERTIBLE_TO:
5081 /* TODO */
5082 return false;
5083
5084 case CPTK_IS_EMPTY:
5085 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5086
5087 case CPTK_IS_ENUM:
5088 return (type_code1 == ENUMERAL_TYPE);
5089
5090 case CPTK_IS_POD:
5091 return (pod_type_p (type1));
5092
5093 case CPTK_IS_POLYMORPHIC:
5094 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5095
5096 case CPTK_IS_STD_LAYOUT:
5097 return (std_layout_type_p (type1));
5098
5099 case CPTK_IS_TRIVIAL:
5100 return (trivial_type_p (type1));
5101
5102 case CPTK_IS_UNION:
5103 return (type_code1 == UNION_TYPE);
5104
5105 case CPTK_IS_LITERAL_TYPE:
5106 return (literal_type_p (type1));
5107
5108 default:
5109 gcc_unreachable ();
5110 return false;
5111 }
5112}
5113
5114/* Returns true if TYPE is a complete type, an array of unknown bound,
5115 or (possibly cv-qualified) void, returns false otherwise. */
5116
5117static bool
5118check_trait_type (tree type)
5119{
5120 if (COMPLETE_TYPE_P (type))
5121 return true;
5122
5123 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5124 && COMPLETE_TYPE_P (TREE_TYPE (type)))
5125 return true;
5126
5127 if (VOID_TYPE_P (type))
5128 return true;
5129
5130 return false;
5131}
5132
5133/* Process a trait expression. */
5134
5135tree
5136finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5137{
5138 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5139 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5140 || kind == CPTK_HAS_NOTHROW_COPY
5141 || kind == CPTK_HAS_TRIVIAL_ASSIGN
5142 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5143 || kind == CPTK_HAS_TRIVIAL_COPY
5144 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5145 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5146 || kind == CPTK_IS_ABSTRACT
5147 || kind == CPTK_IS_BASE_OF
5148 || kind == CPTK_IS_CLASS
5149 || kind == CPTK_IS_CONVERTIBLE_TO
5150 || kind == CPTK_IS_EMPTY
5151 || kind == CPTK_IS_ENUM
5152 || kind == CPTK_IS_POD
5153 || kind == CPTK_IS_POLYMORPHIC
5154 || kind == CPTK_IS_STD_LAYOUT
5155 || kind == CPTK_IS_TRIVIAL
5156 || kind == CPTK_IS_LITERAL_TYPE
5157 || kind == CPTK_IS_UNION);
5158
5159 if (kind == CPTK_IS_CONVERTIBLE_TO)
5160 {
5161 sorry ("__is_convertible_to");
5162 return error_mark_node;
5163 }
5164
5165 if (type1 == error_mark_node
5166 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5167 && type2 == error_mark_node))
5168 return error_mark_node;
5169
5170 if (processing_template_decl)
5171 {
5172 tree trait_expr = make_node (TRAIT_EXPR);
5173 TREE_TYPE (trait_expr) = boolean_type_node;
5174 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5175 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5176 TRAIT_EXPR_KIND (trait_expr) = kind;
5177 return trait_expr;
5178 }
5179
5180 complete_type (type1);
5181 if (type2)
5182 complete_type (type2);
5183
5184 switch (kind)
5185 {
5186 case CPTK_HAS_NOTHROW_ASSIGN:
5187 case CPTK_HAS_TRIVIAL_ASSIGN:
5188 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5189 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5190 case CPTK_HAS_NOTHROW_COPY:
5191 case CPTK_HAS_TRIVIAL_COPY:
5192 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5193 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5194 case CPTK_IS_ABSTRACT:
5195 case CPTK_IS_EMPTY:
5196 case CPTK_IS_POD:
5197 case CPTK_IS_POLYMORPHIC:
5198 case CPTK_IS_STD_LAYOUT:
5199 case CPTK_IS_TRIVIAL:
5200 case CPTK_IS_LITERAL_TYPE:
5201 if (!check_trait_type (type1))
5202 {
5203 error ("incomplete type %qT not allowed", type1);
5204 return error_mark_node;
5205 }
5206 break;
5207
5208 case CPTK_IS_BASE_OF:
5209 if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5210 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5211 && !COMPLETE_TYPE_P (type2))
5212 {
5213 error ("incomplete type %qT not allowed", type2);
5214 return error_mark_node;
5215 }
5216 break;
5217
5218 case CPTK_IS_CLASS:
5219 case CPTK_IS_ENUM:
5220 case CPTK_IS_UNION:
5221 break;
5222
5223 case CPTK_IS_CONVERTIBLE_TO:
5224 default:
5225 gcc_unreachable ();
5226 }
5227
5228 return (trait_expr_value (kind, type1, type2)
5229 ? boolean_true_node : boolean_false_node);
5230}
5231
5232/* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5233 which is ignored for C++. */
5234
5235void
5236set_float_const_decimal64 (void)
5237{
5238}
5239
5240void
5241clear_float_const_decimal64 (void)
5242{
5243}
5244
5245bool
5246float_const_decimal64_p (void)
5247{
5248 return 0;
5249}
5250
5251\f
5252/* Return true if T is a literal type. */
5253
5254bool
5255literal_type_p (tree t)
5256{
5257 if (SCALAR_TYPE_P (t))
5258 return true;
5259 if (CLASS_TYPE_P (t))
5260 return CLASSTYPE_LITERAL_P (t);
5261 if (TREE_CODE (t) == ARRAY_TYPE)
5262 return literal_type_p (strip_array_types (t));
5263 return false;
5264}
5265
5266/* If DECL is a variable declared `constexpr', require its type
5267 be literal. Return the DECL if OK, otherwise NULL. */
5268
5269tree
5270ensure_literal_type_for_constexpr_object (tree decl)
5271{
5272 tree type = TREE_TYPE (decl);
5273 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5274 && !processing_template_decl
5275 /* The call to complete_type is just for initializer_list. */
5276 && !literal_type_p (complete_type (type)))
5277 {
5278 error ("the type %qT of constexpr variable %qD is not literal",
5279 type, decl);
5280 return NULL;
5281 }
5282 return decl;
5283}
5284
5285/* Representation of entries in the constexpr function definition table. */
5286
5287typedef struct GTY(()) constexpr_fundef {
5288 tree decl;
5289 tree body;
5290} constexpr_fundef;
5291
5292/* This table holds all constexpr function definitions seen in
5293 the current translation unit. */
5294
5295static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
5296
5297/* Utility function used for managing the constexpr function table.
5298 Return true if the entries pointed to by P and Q are for the
5299 same constexpr function. */
5300
5301static inline int
5302constexpr_fundef_equal (const void *p, const void *q)
5303{
5304 const constexpr_fundef *lhs = (const constexpr_fundef *) p;
5305 const constexpr_fundef *rhs = (const constexpr_fundef *) q;
5306 return lhs->decl == rhs->decl;
5307}
5308
5309/* Utility function used for managing the constexpr function table.
5310 Return a hash value for the entry pointed to by Q. */
5311
5312static inline hashval_t
5313constexpr_fundef_hash (const void *p)
5314{
5315 const constexpr_fundef *fundef = (const constexpr_fundef *) p;
5316 return DECL_UID (fundef->decl);
5317}
5318
5319/* Return a previously saved definition of function FUN. */
5320
5321static constexpr_fundef *
5322retrieve_constexpr_fundef (tree fun)
5323{
5324 constexpr_fundef fundef = { NULL, NULL };
5325 if (constexpr_fundef_table == NULL)
5326 return NULL;
5327
5328 fundef.decl = fun;
5329 return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
5330}
5331
5332/* Return true if type expression T is a valid parameter type, or
5333 a valid return type, of a constexpr function. */
5334
5335static bool
5336valid_type_in_constexpr_fundecl_p (tree t)
5337{
5338 return (literal_type_p (t)
5339 /* FIXME we allow ref to non-literal; should change standard to
5340 match, or change back if not. */
5341 || TREE_CODE (t) == REFERENCE_TYPE);
5342}
5343
5344/* Check whether the parameter and return types of FUN are valid for a
5345 constexpr function, and complain if COMPLAIN. */
5346
5347static bool
5348is_valid_constexpr_fn (tree fun, bool complain)
5349{
5350 tree parm = FUNCTION_FIRST_USER_PARM (fun);
5351 bool ret = true;
5352 for (; parm != NULL; parm = TREE_CHAIN (parm))
5353 if (!valid_type_in_constexpr_fundecl_p (TREE_TYPE (parm)))
5354 {
5355 ret = false;
5356 if (complain)
5357 error ("invalid type for parameter %q#D of constexpr function",
5358 parm);
5359 }
5360
5361 if (!DECL_CONSTRUCTOR_P (fun))
5362 {
5363 tree rettype = TREE_TYPE (TREE_TYPE (fun));
5364 if (!valid_type_in_constexpr_fundecl_p (rettype))
5365 {
5366 ret = false;
5367 if (complain)
5368 error ("invalid return type %qT of constexpr function %qD",
5369 rettype, fun);
5370 }
5371
5372 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5373 && COMPLETE_TYPE_P (DECL_CONTEXT (fun))
5374 && !valid_type_in_constexpr_fundecl_p (DECL_CONTEXT (fun)))
5375 {
5376 ret = false;
5377 if (complain)
5378 error ("enclosing class of %q#D is not a literal type", fun);
5379 }
5380 }
5381
5382 return ret;
5383}
5384
5385/* Return non-null if FUN certainly designates a valid constexpr function
5386 declaration. Otherwise return NULL. Issue appropriate diagnostics
5387 if necessary. Note that we only check the declaration, not the body
5388 of the function. */
5389
5390tree
5391validate_constexpr_fundecl (tree fun)
5392{
5393 constexpr_fundef entry;
5394 constexpr_fundef **slot;
5395
5396 if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
5397 return NULL;
5398 else if (DECL_CLONED_FUNCTION_P (fun))
5399 /* We already checked the original function. */
5400 return fun;
5401
5402 if (!is_valid_constexpr_fn (fun, !DECL_TEMPLATE_INSTANTIATION (fun)))
5403 {
5404 DECL_DECLARED_CONSTEXPR_P (fun) = false;
5405 return NULL;
5406 }
5407
5408 /* Create the constexpr function table if necessary. */
5409 if (constexpr_fundef_table == NULL)
5410 constexpr_fundef_table = htab_create_ggc (101,
5411 constexpr_fundef_hash,
5412 constexpr_fundef_equal,
5413 ggc_free);
5414 entry.decl = fun;
5415 entry.body = NULL;
5416 slot = (constexpr_fundef **)
5417 htab_find_slot (constexpr_fundef_table, &entry, INSERT);
5418 if (*slot == NULL)
5419 {
5420 *slot = ggc_alloc_constexpr_fundef ();
5421 **slot = entry;
5422 }
5423 return fun;
5424}
5425
5426/* Subroutine of build_constexpr_constructor_member_initializers.
5427 The expression tree T represents a data member initialization
5428 in a (constexpr) constructor definition. Build a pairing of
5429 the data member with its initializer, and prepend that pair
5430 to the existing initialization pair INITS. */
5431
5432static bool
5433build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec)
5434{
5435 tree member, init;
5436 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
5437 t = TREE_OPERAND (t, 0);
5438 if (TREE_CODE (t) == EXPR_STMT)
5439 t = TREE_OPERAND (t, 0);
5440 if (t == error_mark_node)
5441 return false;
5442 if (TREE_CODE (t) == CLEANUP_STMT)
5443 {
5444 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
5445 but we can in a constexpr constructor for a non-literal class. Just
5446 ignore it; either all the initialization will be constant, in which
5447 case the cleanup can't run, or it can't be constexpr.
5448 Still recurse into CLEANUP_BODY. */
5449 t = CLEANUP_BODY (t);
5450 if (TREE_CODE (t) == STATEMENT_LIST)
5451 {
5452 tree_stmt_iterator i;
5453 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5454 {
5455 if (! build_data_member_initialization (tsi_stmt (i), vec))
5456 return false;
5457 }
5458 return true;
5459 }
5460 return build_data_member_initialization (t, vec);
5461 }
5462 if (TREE_CODE (t) == CONVERT_EXPR)
5463 t = TREE_OPERAND (t, 0);
5464 if (TREE_CODE (t) == INIT_EXPR
5465 || TREE_CODE (t) == MODIFY_EXPR)
5466 {
5467 member = TREE_OPERAND (t, 0);
5468 init = unshare_expr (TREE_OPERAND (t, 1));
5469 }
5470 else
5471 {
5472 gcc_assert (TREE_CODE (t) == CALL_EXPR);
5473 member = CALL_EXPR_ARG (t, 0);
5474 /* We don't use build_cplus_new here because it complains about
5475 abstract bases. Leaving the call unwrapped means that it has the
5476 wrong type, but cxx_eval_constant_expression doesn't care. */
5477 init = unshare_expr (t);
5478 }
5479 if (TREE_CODE (member) == INDIRECT_REF)
5480 member = TREE_OPERAND (member, 0);
5481 if (TREE_CODE (member) == NOP_EXPR)
5482 {
5483 tree op = member;
5484 STRIP_NOPS (op);
5485 if (TREE_CODE (op) == ADDR_EXPR)
5486 {
5487 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5488 (TREE_TYPE (TREE_TYPE (op)),
5489 TREE_TYPE (TREE_TYPE (member))));
5490 /* Initializing a cv-qualified member; we need to look through
5491 the const_cast. */
5492 member = op;
5493 }
5494 else
5495 {
5496 /* We don't put out anything for an empty base. */
5497 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
5498 /* But if the initializer isn't constexpr, leave it in so we
5499 complain later. */
5500 if (potential_constant_expression (init, tf_none))
5501 return true;
5502 }
5503 }
5504 if (TREE_CODE (member) == ADDR_EXPR)
5505 member = TREE_OPERAND (member, 0);
5506 if (TREE_CODE (member) == COMPONENT_REF)
5507 member = TREE_OPERAND (member, 1);
5508 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
5509 return true;
5510}
5511
5512/* Make sure that there are no statements after LAST in the constructor
5513 body represented by LIST. */
5514
5515bool
5516check_constexpr_ctor_body (tree last, tree list)
5517{
5518 bool ok = true;
5519 if (TREE_CODE (list) == STATEMENT_LIST)
5520 {
5521 tree_stmt_iterator i = tsi_last (list);
5522 for (; !tsi_end_p (i); tsi_prev (&i))
5523 {
5524 tree t = tsi_stmt (i);
5525 if (t == last)
5526 break;
5527 if (TREE_CODE (t) == BIND_EXPR)
5528 {
5529 if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
5530 return false;
5531 else
5532 continue;
5533 }
5534 /* We currently allow typedefs and static_assert.
5535 FIXME allow them in the standard, too. */
5536 if (TREE_CODE (t) != STATIC_ASSERT)
5537 {
5538 ok = false;
5539 break;
5540 }
5541 }
5542 }
5543 else if (list != last
5544 && TREE_CODE (list) != STATIC_ASSERT)
5545 ok = false;
5546 if (!ok)
5547 {
5548 error ("constexpr constructor does not have empty body");
5549 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
5550 }
5551 return ok;
5552}
5553
5554/* Build compile-time evalable representations of member-initializer list
5555 for a constexpr constructor. */
5556
5557static tree
5558build_constexpr_constructor_member_initializers (tree type, tree body)
5559{
5560 VEC(constructor_elt,gc) *vec = NULL;
5561 bool ok = true;
5562 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
5563 || TREE_CODE (body) == EH_SPEC_BLOCK)
5564 body = TREE_OPERAND (body, 0);
5565 if (TREE_CODE (body) == STATEMENT_LIST)
5566 body = STATEMENT_LIST_HEAD (body)->stmt;
5567 body = BIND_EXPR_BODY (body);
5568 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5569 ok = build_data_member_initialization (body, &vec);
5570 else if (TREE_CODE (body) == STATEMENT_LIST)
5571 {
5572 tree_stmt_iterator i;
5573 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5574 {
5575 ok = build_data_member_initialization (tsi_stmt (i), &vec);
5576 if (!ok)
5577 break;
5578 }
5579 }
5580 else
5581 gcc_assert (errorcount > 0);
5582 if (ok)
5583 return build_constructor (type, vec);
5584 else
5585 return error_mark_node;
5586}
5587
5588/* We are processing the definition of the constexpr function FUN.
5589 Check that its BODY fulfills the propriate requirements and
5590 enter it in the constexpr function definition table.
5591 For constructor BODY is actually the TREE_LIST of the
5592 member-initializer list. */
5593
5594tree
5595register_constexpr_fundef (tree fun, tree body)
5596{
5597 constexpr_fundef *fundef = retrieve_constexpr_fundef (fun);
5598 gcc_assert (fundef != NULL && fundef->body == NULL);
5599
5600 if (DECL_CONSTRUCTOR_P (fun))
5601 body = build_constexpr_constructor_member_initializers
5602 (DECL_CONTEXT (fun), body);
5603 else
5604 {
5605 if (TREE_CODE (body) == BIND_EXPR)
5606 body = BIND_EXPR_BODY (body);
5607 if (TREE_CODE (body) == EH_SPEC_BLOCK)
5608 body = EH_SPEC_STMTS (body);
5609 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
5610 body = TREE_OPERAND (body, 0);
5611 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5612 body = TREE_OPERAND (body, 0);
5613 if (TREE_CODE (body) != RETURN_EXPR)
5614 {
5615 error ("body of constexpr function %qD not a return-statement", fun);
5616 DECL_DECLARED_CONSTEXPR_P (fun) = false;
5617 return NULL;
5618 }
5619 body = unshare_expr (TREE_OPERAND (body, 0));
5620 }
5621
5622 if (!potential_constant_expression (body, (DECL_TEMPLATE_INSTANTIATION (fun)
5623 ? tf_none : tf_error)))
5624 {
5625 DECL_DECLARED_CONSTEXPR_P (fun) = false;
5626 return NULL;
5627 }
5628 fundef->body = body;
5629 return fun;
5630}
5631
5632/* Objects of this type represent calls to constexpr functions
5633 along with the bindings of parameters to their arguments, for
5634 the purpose of compile time evaluation. */
5635
5636typedef struct GTY(()) constexpr_call {
5637 /* Description of the constexpr function definition. */
5638 constexpr_fundef *fundef;
5639 /* Parameter bindings enironment. A TREE_LIST where each TREE_PURPOSE
5640 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
5641 Note: This arrangement is made to accomodate the use of
5642 iterative_hash_template_arg (see pt.c). If you change this
5643 representation, also change the hash calculation in
5644 cxx_eval_call_expression. */
5645 tree bindings;
5646 /* Result of the call.
5647 NULL means the call is being evaluated.
5648 error_mark_node means that the evaluation was erroneous;
5649 otherwise, the actuall value of the call. */
5650 tree result;
5651 /* The hash of this call; we remember it here to avoid having to
5652 recalculate it when expanding the hash table. */
5653 hashval_t hash;
5654} constexpr_call;
5655
5656/* A table of all constexpr calls that have been evaluated by the
5657 compiler in this translation unit. */
5658
5659static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
5660
5661static tree cxx_eval_constant_expression (const constexpr_call *, tree,
5662 bool, bool, bool *);
5663
5664/* Compute a hash value for a constexpr call representation. */
5665
5666static hashval_t
5667constexpr_call_hash (const void *p)
5668{
5669 const constexpr_call *info = (const constexpr_call *) p;
5670 return info->hash;
5671}
5672
5673/* Return 1 if the objects pointed to by P and Q represent calls
5674 to the same constexpr function with the same arguments.
5675 Otherwise, return 0. */
5676
5677static int
5678constexpr_call_equal (const void *p, const void *q)
5679{
5680 const constexpr_call *lhs = (const constexpr_call *) p;
5681 const constexpr_call *rhs = (const constexpr_call *) q;
5682 tree lhs_bindings;
5683 tree rhs_bindings;
5684 if (lhs == rhs)
5685 return 1;
5686 if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
5687 return 0;
5688 lhs_bindings = lhs->bindings;
5689 rhs_bindings = rhs->bindings;
5690 while (lhs_bindings != NULL && rhs_bindings != NULL)
5691 {
5692 tree lhs_arg = TREE_VALUE (lhs_bindings);
5693 tree rhs_arg = TREE_VALUE (rhs_bindings);
5694 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
5695 if (!cp_tree_equal (lhs_arg, rhs_arg))
5696 return 0;
5697 lhs_bindings = TREE_CHAIN (lhs_bindings);
5698 rhs_bindings = TREE_CHAIN (rhs_bindings);
5699 }
5700 return lhs_bindings == rhs_bindings;
5701}
5702
5703/* Initialize the constexpr call table, if needed. */
5704
5705static void
5706maybe_initialize_constexpr_call_table (void)
5707{
5708 if (constexpr_call_table == NULL)
5709 constexpr_call_table = htab_create_ggc (101,
5710 constexpr_call_hash,
5711 constexpr_call_equal,
5712 ggc_free);
5713}
5714
5715/* Return true if T designates the implied `this' parameter. */
5716
5717static inline bool
5718is_this_parameter (tree t)
5719{
5720 return t == current_class_ptr;
5721}
5722
5723/* We have an expression tree T that represents a call, either CALL_EXPR
5724 or AGGR_INIT_EXPR. If the call is lexically to a named function,
5725 retrun the _DECL for that function. */
5726
5727static tree
5728get_function_named_in_call (tree t)
5729{
5730 tree fun = NULL;
5731 switch (TREE_CODE (t))
5732 {
5733 case CALL_EXPR:
5734 fun = CALL_EXPR_FN (t);
5735 break;
5736
5737 case AGGR_INIT_EXPR:
5738 fun = AGGR_INIT_EXPR_FN (t);
5739 break;
5740
5741 default:
5742 gcc_unreachable();
5743 break;
5744 }
5745 if (TREE_CODE (fun) == ADDR_EXPR
5746 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
5747 fun = TREE_OPERAND (fun, 0);
5748 return fun;
5749}
5750
5751/* We have an expression tree T that represents a call, either CALL_EXPR
5752 or AGGR_INIT_EXPR. Return the Nth argument. */
5753
5754static inline tree
5755get_nth_callarg (tree t, int n)
5756{
5757 switch (TREE_CODE (t))
5758 {
5759 case CALL_EXPR:
5760 return CALL_EXPR_ARG (t, n);
5761
5762 case AGGR_INIT_EXPR:
5763 return AGGR_INIT_EXPR_ARG (t, n);
5764
5765 default:
5766 gcc_unreachable ();
5767 return NULL;
5768 }
5769}
5770
5771/* Look up the binding of the function parameter T in a constexpr
5772 function call context CALL. */
5773
5774static tree
5775lookup_parameter_binding (const constexpr_call *call, tree t)
5776{
5777 tree b = purpose_member (t, call->bindings);
5778 return TREE_VALUE (b);
5779}
5780
5781/* Attempt to evaluate T which represents a call to a builtin function.
5782 We assume here that all builtin functions evaluate to scalar types
5783 represented by _CST nodes. */
5784
5785static tree
5786cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
5787 bool allow_non_constant, bool addr,
5788 bool *non_constant_p)
5789{
5790 const int nargs = call_expr_nargs (t);
5791 tree *args = (tree *) alloca (nargs * sizeof (tree));
5792 tree new_call;
5793 int i;
5794 for (i = 0; i < nargs; ++i)
5795 {
5796 args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
5797 allow_non_constant, addr,
5798 non_constant_p);
5799 if (allow_non_constant && *non_constant_p)
5800 return t;
5801 }
5802 if (*non_constant_p)
5803 return t;
5804 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
5805 CALL_EXPR_FN (t), nargs, args);
5806 return fold (new_call);
5807}
5808
5809/* TEMP is the constant value of a temporary object of type TYPE. Adjust
5810 the type of the value to match. */
5811
5812static tree
5813adjust_temp_type (tree type, tree temp)
5814{
5815 if (TREE_TYPE (temp) == type)
5816 return temp;
5817 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
5818 if (TREE_CODE (temp) == CONSTRUCTOR)
5819 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
5820 gcc_assert (SCALAR_TYPE_P (type));
5821 return cp_fold_convert (type, temp);
5822}
5823
5824/* Subroutine of cxx_eval_call_expression.
5825 We are processing a call expression (either CALL_EXPR or
5826 AGGR_INIT_EXPR) in the call context of OLD_CALL. Evaluate
5827 all arguments and bind their values to correspondings
5828 parameters, making up the NEW_CALL context. */
5829
5830static void
5831cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
5832 constexpr_call *new_call,
5833 bool allow_non_constant,
5834 bool *non_constant_p)
5835{
5836 const int nargs = call_expr_nargs (t);
5837 tree fun = new_call->fundef->decl;
5838 tree parms = DECL_ARGUMENTS (fun);
5839 int i;
5840 for (i = 0; i < nargs; ++i)
5841 {
5842 tree x, arg;
5843 tree type = parms ? TREE_TYPE (parms) : void_type_node;
5844 /* For member function, the first argument is a pointer to the implied
5845 object. And for an object contruction, don't bind `this' before
5846 it is fully constructed. */
5847 if (i == 0 && DECL_CONSTRUCTOR_P (fun))
5848 goto next;
5849 x = get_nth_callarg (t, i);
5850 arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
5851 TREE_CODE (type) == REFERENCE_TYPE,
5852 non_constant_p);
5853 /* Don't VERIFY_CONSTANT here. */
5854 if (*non_constant_p && allow_non_constant)
5855 return;
5856 /* Just discard ellipsis args after checking their constantitude. */
5857 if (!parms)
5858 continue;
5859
5860 /* Make sure the binding has the same type as the parm. */
5861 if (TREE_CODE (type) != REFERENCE_TYPE)
5862 arg = adjust_temp_type (type, arg);
5863 new_call->bindings = tree_cons (parms, arg, new_call->bindings);
5864 next:
5865 parms = TREE_CHAIN (parms);
5866 }
5867}
5868
5869/* Variables and functions to manage constexpr call expansion context.
5870 These do not need to be marked for PCH or GC. */
5871
5872static VEC(tree,heap) *call_stack = NULL;
5873static int call_stack_tick;
5874static int last_cx_error_tick;
5875
5876static void
5877push_cx_call_context (tree call)
5878{
5879 ++call_stack_tick;
5880 if (!EXPR_HAS_LOCATION (call))
5881 SET_EXPR_LOCATION (call, input_location);
5882 VEC_safe_push (tree, heap, call_stack, call);
5883}
5884
5885static void
5886pop_cx_call_context (void)
5887{
5888 ++call_stack_tick;
5889 VEC_pop (tree, call_stack);
5890}
5891
5892VEC(tree,heap) *
5893cx_error_context (void)
5894{
5895 VEC(tree,heap) *r = NULL;
5896 if (call_stack_tick != last_cx_error_tick
5897 && !VEC_empty (tree, call_stack))
5898 r = call_stack;
5899 last_cx_error_tick = call_stack_tick;
5900 return r;
5901}
5902
5903/* Subroutine of cxx_eval_constant_expression.
5904 Evaluate the call expression tree T in the context of OLD_CALL expression
5905 evaluation. */
5906
5907static tree
5908cxx_eval_call_expression (const constexpr_call *old_call, tree t,
5909 bool allow_non_constant, bool addr,
5910 bool *non_constant_p)
5911{
5912 location_t loc = EXPR_LOC_OR_HERE (t);
5913 tree fun = get_function_named_in_call (t);
5914 tree result;
5915 constexpr_call new_call = { NULL, NULL, NULL, 0 };
5916 constexpr_call **slot;
5917 if (TREE_CODE (fun) != FUNCTION_DECL)
5918 {
5919 /* Might be a constexpr function pointer. */
5920 fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
5921 /*addr*/false, non_constant_p);
5922 if (TREE_CODE (fun) == ADDR_EXPR)
5923 fun = TREE_OPERAND (fun, 0);
5924 }
5925 if (TREE_CODE (fun) != FUNCTION_DECL)
5926 {
5927 if (!allow_non_constant)
5928 error_at (loc, "expression %qE does not designate a constexpr "
5929 "function", fun);
5930 *non_constant_p = true;
5931 return t;
5932 }
5933 if (DECL_CLONED_FUNCTION_P (fun))
5934 fun = DECL_CLONED_FUNCTION (fun);
5935 if (is_builtin_fn (fun))
5936 return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
5937 addr, non_constant_p);
5938 if (!DECL_DECLARED_CONSTEXPR_P (fun))
5939 {
5940 if (!allow_non_constant)
5941 {
5942 error_at (loc, "%qD is not a constexpr function", fun);
5943 if (DECL_TEMPLATE_INSTANTIATION (fun)
5944 && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
5945 (DECL_TI_TEMPLATE (fun))))
5946 is_valid_constexpr_fn (fun, true);
5947 }
5948 *non_constant_p = true;
5949 return t;
5950 }
5951
5952 /* If in direct recursive call, optimize definition search. */
5953 if (old_call != NULL && old_call->fundef->decl == fun)
5954 new_call.fundef = old_call->fundef;
5955 else
5956 {
5957 new_call.fundef = retrieve_constexpr_fundef (fun);
5958 if (new_call.fundef == NULL || new_call.fundef->body == NULL)
5959 {
5960 if (!allow_non_constant)
5961 error_at (loc, "%qD used before its definition", fun);
5962 *non_constant_p = true;
5963 return t;
5964 }
5965 }
5966 cxx_bind_parameters_in_call (old_call, t, &new_call,
5967 allow_non_constant, non_constant_p);
5968 if (*non_constant_p)
5969 return t;
5970
5971 push_cx_call_context (t);
5972
5973 new_call.hash
5974 = iterative_hash_template_arg (new_call.bindings,
5975 constexpr_fundef_hash (new_call.fundef));
5976
5977 /* If we have seen this call before, we are done. */
5978 maybe_initialize_constexpr_call_table ();
5979 slot = (constexpr_call **)
5980 htab_find_slot (constexpr_call_table, &new_call, INSERT);
5981 if (*slot != NULL)
5982 {
5983 /* Calls which are in progress have their result set to NULL
5984 so that we can detect circular dependencies. */
5985 if ((*slot)->result == NULL)
5986 {
5987 if (!allow_non_constant)
5988 error ("call has circular dependency");
5989 (*slot)->result = result = error_mark_node;
5990 }
5991 else
5992 {
5993 result = (*slot)->result;
5994 if (result == error_mark_node && !allow_non_constant)
5995 /* Re-evaluate to get the error. */
5996 cxx_eval_constant_expression (&new_call, new_call.fundef->body,
5997 allow_non_constant, addr,
5998 non_constant_p);
5999 }
6000 }
6001 else
6002 {
6003 /* We need to keep a pointer to the entry, not just the slot, as the
6004 slot can move in the call to cxx_eval_builtin_function_call. */
6005 constexpr_call *entry = ggc_alloc_constexpr_call ();
6006 *entry = new_call;
6007 *slot = entry;
6008 result
6009 = cxx_eval_constant_expression (&new_call, new_call.fundef->body,
6010 allow_non_constant, addr,
6011 non_constant_p);
6012 if (*non_constant_p)
6013 entry->result = result = error_mark_node;
6014 else
6015 {
6016 /* If this was a call to initialize an object, set the type of
6017 the CONSTRUCTOR to the type of that object. */
6018 if (DECL_CONSTRUCTOR_P (fun))
6019 {
6020 tree ob_arg = get_nth_callarg (t, 0);
6021 STRIP_NOPS (ob_arg);
6022 gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
6023 && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
6024 result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
6025 result);
6026 }
6027 entry->result = result;
6028 }
6029 }
6030
6031 pop_cx_call_context ();
6032 return unshare_expr (result);
6033}
6034
6035/* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
6036
6037bool
6038reduced_constant_expression_p (tree t)
6039{
6040 if (TREE_OVERFLOW_P (t))
6041 /* Integer overflow makes this not a constant expression. */
6042 return false;
6043 /* FIXME are we calling this too much? */
6044 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6045}
6046
6047/* Some expressions may have constant operands but are not constant
6048 themselves, such as 1/0. Call this function (or rather, the macro
6049 following it) to check for that condition.
6050
6051 We only call this in places that require an arithmetic constant, not in
6052 places where we might have a non-constant expression that can be a
6053 component of a constant expression, such as the address of a constexpr
6054 variable that might be dereferenced later. */
6055
6056static bool
6057verify_constant (tree t, bool allow_non_constant, bool *non_constant_p)
6058{
6059 if (!*non_constant_p && !reduced_constant_expression_p (t))
6060 {
6061 if (!allow_non_constant)
6062 {
6063 /* If T was already folded to a _CST with TREE_OVERFLOW set,
6064 printing the folded constant isn't helpful. */
6065 if (TREE_OVERFLOW_P (t))
6066 {
6067 permerror (input_location, "overflow in constant expression");
6068 /* If we're being permissive (and are in an enforcing
6069 context), consider this constant. */
6070 if (flag_permissive)
6071 return false;
6072 }
6073 else
6074 error ("%q+E is not a constant expression", t);
6075 }
6076 *non_constant_p = true;
6077 }
6078 return *non_constant_p;
6079}
6080#define VERIFY_CONSTANT(X) \
6081do { \
6082 if (verify_constant ((X), allow_non_constant, non_constant_p)) \
6083 return t; \
6084 } while (0)
6085
6086/* Subroutine of cxx_eval_constant_expression.
6087 Attempt to reduce the unary expression tree T to a compile time value.
6088 If successful, return the value. Otherwise issue a diagnostic
6089 and return error_mark_node. */
6090
6091static tree
6092cxx_eval_unary_expression (const constexpr_call *call, tree t,
6093 bool allow_non_constant, bool addr,
6094 bool *non_constant_p)
6095{
6096 tree r;
6097 tree orig_arg = TREE_OPERAND (t, 0);
6098 tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6099 addr, non_constant_p);
6100 VERIFY_CONSTANT (arg);
6101 if (arg == orig_arg)
6102 return t;
6103 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6104 VERIFY_CONSTANT (r);
6105 return r;
6106}
6107
6108/* Subroutine of cxx_eval_constant_expression.
6109 Like cxx_eval_unary_expression, except for binary expressions. */
6110
6111static tree
6112cxx_eval_binary_expression (const constexpr_call *call, tree t,
6113 bool allow_non_constant, bool addr,
6114 bool *non_constant_p)
6115{
6116 tree r;
6117 tree orig_lhs = TREE_OPERAND (t, 0);
6118 tree orig_rhs = TREE_OPERAND (t, 1);
6119 tree lhs, rhs;
6120 lhs = cxx_eval_constant_expression (call, orig_lhs,
6121 allow_non_constant, addr,
6122 non_constant_p);
6123 VERIFY_CONSTANT (lhs);
6124 rhs = cxx_eval_constant_expression (call, orig_rhs,
6125 allow_non_constant, addr,
6126 non_constant_p);
6127 VERIFY_CONSTANT (rhs);
6128 if (lhs == orig_lhs && rhs == orig_rhs)
6129 return t;
6130 r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6131 VERIFY_CONSTANT (r);
6132 return r;
6133}
6134
6135/* Subroutine of cxx_eval_constant_expression.
6136 Attempt to evaluate condition expressions. Dead branches are not
6137 looked into. */
6138
6139static tree
6140cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6141 bool allow_non_constant, bool addr,
6142 bool *non_constant_p)
6143{
6144 tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6145 allow_non_constant, addr,
6146 non_constant_p);
6147 VERIFY_CONSTANT (val);
6148 if (val == boolean_true_node)
6149 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6150 allow_non_constant, addr,
6151 non_constant_p);
6152 gcc_assert (val == boolean_false_node);
6153 /* Don't VERIFY_CONSTANT here. */
6154 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6155 allow_non_constant, addr,
6156 non_constant_p);
6157}
6158
6159/* Subroutine of cxx_eval_constant_expression.
6160 Attempt to reduce a reference to an array slot. */
6161
6162static tree
6163cxx_eval_array_reference (const constexpr_call *call, tree t,
6164 bool allow_non_constant, bool addr,
6165 bool *non_constant_p)
6166{
6167 tree oldary = TREE_OPERAND (t, 0);
6168 tree ary = cxx_eval_constant_expression (call, oldary,
6169 allow_non_constant, addr,
6170 non_constant_p);
6171 tree index, oldidx;
6172 HOST_WIDE_INT i;
6173 unsigned len;
6174 if (*non_constant_p)
6175 return t;
6176 oldidx = TREE_OPERAND (t, 1);
6177 index = cxx_eval_constant_expression (call, oldidx,
6178 allow_non_constant, false,
6179 non_constant_p);
6180 VERIFY_CONSTANT (index);
6181 if (addr && ary == oldary && index == oldidx)
6182 return t;
6183 else if (addr)
6184 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6185 len = (TREE_CODE (ary) == CONSTRUCTOR
6186 ? CONSTRUCTOR_NELTS (ary)
6187 : (unsigned)TREE_STRING_LENGTH (ary));
6188 if (compare_tree_int (index, len) >= 0)
6189 {
6190 if (!allow_non_constant)
6191 error ("array subscript out of bound");
6192 *non_constant_p = true;
6193 return t;
6194 }
6195 i = tree_low_cst (index, 0);
6196 if (TREE_CODE (ary) == CONSTRUCTOR)
6197 return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
6198 else
6199 return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6200 TREE_STRING_POINTER (ary)[i]);
6201 /* Don't VERIFY_CONSTANT here. */
6202}
6203
6204/* Subroutine of cxx_eval_constant_expression.
6205 Attempt to reduce a field access of a value of class type. */
6206
6207static tree
6208cxx_eval_component_reference (const constexpr_call *call, tree t,
6209 bool allow_non_constant, bool addr,
6210 bool *non_constant_p)
6211{
6212 unsigned HOST_WIDE_INT i;
6213 tree field;
6214 tree value;
6215 tree part = TREE_OPERAND (t, 1);
6216 tree orig_whole = TREE_OPERAND (t, 0);
6217 tree whole = cxx_eval_constant_expression (call, orig_whole,
6218 allow_non_constant, addr,
6219 non_constant_p);
6220 if (whole == orig_whole)
6221 return t;
6222 if (addr)
6223 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6224 whole, part, NULL_TREE);
6225 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6226 CONSTRUCTOR. */
6227 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6228 {
6229 if (!allow_non_constant)
6230 error ("%qE is not a constant expression", orig_whole);
6231 *non_constant_p = true;
6232 }
6233 if (*non_constant_p)
6234 return t;
6235 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6236 {
6237 if (field == part)
6238 return value;
6239 }
6240 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE)
6241 {
6242 /* FIXME Mike Miller wants this to be OK. */
6243 if (!allow_non_constant)
6244 error ("accessing %qD member instead of initialized %qD member in "
6245 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6246 *non_constant_p = true;
6247 return t;
6248 }
6249 gcc_unreachable();
6250 return error_mark_node;
6251}
6252
6253/* Subroutine of cxx_eval_constant_expression.
6254 Attempt to reduce a field access of a value of class type that is
6255 expressed as a BIT_FIELD_REF. */
6256
6257static tree
6258cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
6259 bool allow_non_constant, bool addr,
6260 bool *non_constant_p)
6261{
6262 tree orig_whole = TREE_OPERAND (t, 0);
6263 tree whole = cxx_eval_constant_expression (call, orig_whole,
6264 allow_non_constant, addr,
6265 non_constant_p);
6266 tree start, field, value;
6267 unsigned HOST_WIDE_INT i;
6268
6269 if (whole == orig_whole)
6270 return t;
6271 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6272 CONSTRUCTOR. */
6273 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6274 {
6275 if (!allow_non_constant)
6276 error ("%qE is not a constant expression", orig_whole);
6277 *non_constant_p = true;
6278 }
6279 if (*non_constant_p)
6280 return t;
6281
6282 start = TREE_OPERAND (t, 2);
6283 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6284 {
6285 if (bit_position (field) == start)
6286 return value;
6287 }
6288 gcc_unreachable();
6289 return error_mark_node;
6290}
6291
6292/* Subroutine of cxx_eval_constant_expression.
6293 Evaluate a short-circuited logical expression T in the context
6294 of a given constexpr CALL. BAILOUT_VALUE is the value for
6295 early return. CONTINUE_VALUE is used here purely for
6296 sanity check purposes. */
6297
6298static tree
6299cxx_eval_logical_expression (const constexpr_call *call, tree t,
6300 tree bailout_value, tree continue_value,
6301 bool allow_non_constant, bool addr,
6302 bool *non_constant_p)
6303{
6304 tree r;
6305 tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6306 allow_non_constant, addr,
6307 non_constant_p);
6308 VERIFY_CONSTANT (lhs);
6309 if (lhs == bailout_value)
6310 return lhs;
6311 gcc_assert (lhs == continue_value);
6312 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6313 allow_non_constant, addr, non_constant_p);
6314 VERIFY_CONSTANT (r);
6315 return r;
6316}
6317
6318/* Subroutine of cxx_eval_constant_expression.
6319 The expression tree T denotes a C-style array or a C-style
6320 aggregate. Reduce it to a constant expression. */
6321
6322static tree
6323cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
6324 bool allow_non_constant, bool addr,
6325 bool *non_constant_p)
6326{
6327 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
6328 VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc,
6329 VEC_length (constructor_elt, v));
6330 constructor_elt *ce;
6331 HOST_WIDE_INT i;
6332 bool changed = false;
6333 tree type = TREE_TYPE (t);
6334 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
6335 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
6336 {
6337 tree elt = cxx_eval_constant_expression (call, ce->value,
6338 allow_non_constant, addr,
6339 non_constant_p);
6340 /* Don't VERIFY_CONSTANT here. */
6341 if (allow_non_constant && *non_constant_p)
6342 goto fail;
6343 if (elt != ce->value)
6344 changed = true;
6345 if (TREE_CODE (type) != ARRAY_TYPE
6346 && !(same_type_ignoring_top_level_qualifiers_p
6347 (DECL_CONTEXT (ce->index), type)))
6348 {
6349 /* Push our vtable pointer down into the base where it belongs. */
6350 tree vptr_base = DECL_CONTEXT (ce->index);
6351 tree base_ctor;
6352 gcc_assert (ce->index == TYPE_VFIELD (type));
6353 for (base_ctor = VEC_index (constructor_elt, n, 0)->value; ;
6354 base_ctor = CONSTRUCTOR_ELT (base_ctor, 0)->value)
6355 if (TREE_TYPE (base_ctor) == vptr_base)
6356 {
6357 constructor_elt *p = CONSTRUCTOR_ELT (base_ctor, 0);
6358 gcc_assert (p->index == ce->index);
6359 p->value = elt;
6360 break;
6361 }
6362 }
6363 else
6364 CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
6365 }
6366 if (*non_constant_p || !changed)
6367 {
6368 fail:
6369 VEC_free (constructor_elt, gc, n);
6370 return t;
6371 }
6372 t = build_constructor (TREE_TYPE (t), n);
6373 TREE_CONSTANT (t) = true;
6374 return t;
6375}
6376
6377/* Subroutine of cxx_eval_constant_expression.
6378 The expression tree T is a VEC_INIT_EXPR which denotes the desired
6379 initialization of a non-static data member of array type. Reduce it to a
6380 CONSTRUCTOR.
6381
6382 Note that apart from value-initialization (when VALUE_INIT is true),
6383 this is only intended to support value-initialization and the
6384 initializations done by defaulted constructors for classes with
6385 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
6386 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
6387 for the copy/move constructor. */
6388
6389static tree
6390cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
6391 bool value_init, bool allow_non_constant, bool addr,
6392 bool *non_constant_p)
6393{
6394 tree elttype = TREE_TYPE (atype);
6395 int max = tree_low_cst (array_type_nelts (atype), 0);
6396 VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc, max + 1);
6397 int i;
6398
6399 /* For the default constructor, build up a call to the default
6400 constructor of the element type. We only need to handle class types
6401 here, as for a constructor to be constexpr, all members must be
6402 initialized, which for a defaulted default constructor means they must
6403 be of a class type with a constexpr default constructor. */
6404 if (value_init)
6405 gcc_assert (!init);
6406 else if (!init)
6407 {
6408 VEC(tree,gc) *argvec = make_tree_vector ();
6409 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6410 &argvec, elttype, LOOKUP_NORMAL,
6411 tf_warning_or_error);
6412 release_tree_vector (argvec);
6413 init = cxx_eval_constant_expression (call, init, allow_non_constant,
6414 addr, non_constant_p);
6415 }
6416
6417 if (*non_constant_p && !allow_non_constant)
6418 goto fail;
6419
6420 for (i = 0; i <= max; ++i)
6421 {
6422 tree idx = build_int_cst (size_type_node, i);
6423 tree eltinit;
6424 if (TREE_CODE (elttype) == ARRAY_TYPE)
6425 {
6426 /* A multidimensional array; recurse. */
6427 if (value_init)
6428 eltinit = NULL_TREE;
6429 else
6430 eltinit = cp_build_array_ref (input_location, init, idx,
6431 tf_warning_or_error);
6432 eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
6433 allow_non_constant, addr,
6434 non_constant_p);
6435 }
6436 else if (value_init)
6437 {
6438 eltinit = build_value_init (elttype, tf_warning_or_error);
6439 eltinit = cxx_eval_constant_expression
6440 (call, eltinit, allow_non_constant, addr, non_constant_p);
6441 }
6442 else if (TREE_CODE (init) == CONSTRUCTOR)
6443 {
6444 /* Initializing an element using the call to the default
6445 constructor we just built above. */
6446 eltinit = unshare_expr (init);
6447 }
6448 else
6449 {
6450 /* Copying an element. */
6451 VEC(tree,gc) *argvec;
6452 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6453 (atype, TREE_TYPE (init)));
6454 eltinit = cp_build_array_ref (input_location, init, idx,
6455 tf_warning_or_error);
6456 if (!real_lvalue_p (init))
6457 eltinit = move (eltinit);
6458 argvec = make_tree_vector ();
6459 VEC_quick_push (tree, argvec, eltinit);
6460 eltinit = (build_special_member_call
6461 (NULL_TREE, complete_ctor_identifier, &argvec,
6462 elttype, LOOKUP_NORMAL, tf_warning_or_error));
6463 release_tree_vector (argvec);
6464 eltinit = cxx_eval_constant_expression
6465 (call, eltinit, allow_non_constant, addr, non_constant_p);
6466 }
6467 if (*non_constant_p && !allow_non_constant)
6468 goto fail;
6469 CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
6470 }
6471
6472 if (!*non_constant_p)
6473 {
6474 init = build_constructor (TREE_TYPE (atype), n);
6475 TREE_CONSTANT (init) = true;
6476 return init;
6477 }
6478
6479 fail:
6480 VEC_free (constructor_elt, gc, n);
6481 return init;
6482}
6483
6484static tree
6485cxx_eval_vec_init (const constexpr_call *call, tree t,
6486 bool allow_non_constant, bool addr,
6487 bool *non_constant_p)
6488{
6489 tree atype = TREE_TYPE (t);
6490 tree init = VEC_INIT_EXPR_INIT (t);
6491 tree r = cxx_eval_vec_init_1 (call, atype, init,
6492 VEC_INIT_EXPR_VALUE_INIT (t),
6493 allow_non_constant, addr, non_constant_p);
6494 if (*non_constant_p)
6495 return t;
6496 else
6497 return r;
6498}
6499
6500/* A less strict version of fold_indirect_ref_1, which requires cv-quals to
6501 match. We want to be less strict for simple *& folding; if we have a
6502 non-const temporary that we access through a const pointer, that should
6503 work. We handle this here rather than change fold_indirect_ref_1
6504 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
6505 don't really make sense outside of constant expression evaluation. Also
6506 we want to allow folding to COMPONENT_REF, which could cause trouble
6507 with TBAA in fold_indirect_ref_1. */
6508
6509static tree
6510cxx_eval_indirect_ref (const constexpr_call *call, tree t,
6511 bool allow_non_constant, bool addr,
6512 bool *non_constant_p)
6513{
6514 tree orig_op0 = TREE_OPERAND (t, 0);
6515 tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
6516 /*addr*/false, non_constant_p);
6517 tree type, sub, subtype, r;
6518 bool empty_base;
6519
6520 /* Don't VERIFY_CONSTANT here. */
6521 if (*non_constant_p)
6522 return t;
6523
6524 type = TREE_TYPE (t);
6525 sub = op0;
6526 r = NULL_TREE;
6527 empty_base = false;
6528
6529 STRIP_NOPS (sub);
6530 subtype = TREE_TYPE (sub);
6531 gcc_assert (POINTER_TYPE_P (subtype));
6532
6533 if (TREE_CODE (sub) == ADDR_EXPR)
6534 {
6535 tree op = TREE_OPERAND (sub, 0);
6536 tree optype = TREE_TYPE (op);
6537
6538 if (same_type_ignoring_top_level_qualifiers_p (optype, type))
6539 r = op;
6540 /* Also handle conversion to an empty base class, which
6541 is represented with a NOP_EXPR. */
6542 else if (!addr && is_empty_class (type)
6543 && CLASS_TYPE_P (optype)
6544 && DERIVED_FROM_P (type, optype))
6545 {
6546 r = op;
6547 empty_base = true;
6548 }
6549 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
6550 else if (RECORD_OR_UNION_TYPE_P (optype))
6551 {
6552 tree field = TYPE_FIELDS (optype);
6553 for (; field; field = DECL_CHAIN (field))
6554 if (TREE_CODE (field) == FIELD_DECL
6555 && integer_zerop (byte_position (field))
6556 && (same_type_ignoring_top_level_qualifiers_p
6557 (TREE_TYPE (field), type)))
6558 {
6559 r = fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
6560 break;
6561 }
6562 }
6563 }
6564 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
6565 && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
6566 {
6567 tree op00 = TREE_OPERAND (sub, 0);
6568 tree op01 = TREE_OPERAND (sub, 1);
6569
6570 STRIP_NOPS (op00);
6571 if (TREE_CODE (op00) == ADDR_EXPR)
6572 {
6573 tree op00type;
6574 op00 = TREE_OPERAND (op00, 0);
6575 op00type = TREE_TYPE (op00);
6576
6577 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
6578 if (RECORD_OR_UNION_TYPE_P (op00type))
6579 {
6580 tree field = TYPE_FIELDS (op00type);
6581 for (; field; field = DECL_CHAIN (field))
6582 if (TREE_CODE (field) == FIELD_DECL
6583 && tree_int_cst_equal (byte_position (field), op01)
6584 && (same_type_ignoring_top_level_qualifiers_p
6585 (TREE_TYPE (field), type)))
6586 {
6587 r = fold_build3 (COMPONENT_REF, type, op00,
6588 field, NULL_TREE);
6589 break;
6590 }
6591 }
6592 }
6593 }
6594
6595 /* Let build_fold_indirect_ref handle the cases it does fine with. */
6596 if (r == NULL_TREE)
6597 r = build_fold_indirect_ref (op0);
6598 if (TREE_CODE (r) != INDIRECT_REF)
6599 r = cxx_eval_constant_expression (call, r, allow_non_constant,
6600 addr, non_constant_p);
6601 else if (TREE_CODE (sub) == ADDR_EXPR
6602 || TREE_CODE (sub) == POINTER_PLUS_EXPR)
6603 {
6604 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
6605 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
6606 /* FIXME Mike Miller wants this to be OK. */
6607 if (!allow_non_constant)
6608 error ("accessing value of %qE through a %qT glvalue in a "
6609 "constant expression", build_fold_indirect_ref (sub),
6610 TREE_TYPE (t));
6611 *non_constant_p = true;
6612 return t;
6613 }
6614
6615 /* If we're pulling out the value of an empty base, make sure
6616 that the whole object is constant and then return an empty
6617 CONSTRUCTOR. */
6618 if (empty_base)
6619 {
6620 VERIFY_CONSTANT (r);
6621 r = build_constructor (TREE_TYPE (t), NULL);
6622 TREE_CONSTANT (r) = true;
6623 }
6624
6625 if (TREE_CODE (r) == INDIRECT_REF && TREE_OPERAND (r, 0) == orig_op0)
6626 return t;
6627 return r;
6628}
6629
6630/* Attempt to reduce the expression T to a constant value.
6631 On failure, issue diagnostic and return error_mark_node. */
6632/* FIXME unify with c_fully_fold */
6633
6634static tree
6635cxx_eval_constant_expression (const constexpr_call *call, tree t,
6636 bool allow_non_constant, bool addr,
6637 bool *non_constant_p)
6638{
6639 tree r = t;
6640
6641 if (t == error_mark_node)
6642 {
6643 *non_constant_p = true;
6644 return t;
6645 }
6646 if (CONSTANT_CLASS_P (t))
6647 {
6648 if (TREE_CODE (t) == PTRMEM_CST)
6649 t = cplus_expand_constant (t);
6650 return t;
6651 }
6652 if (TREE_CODE (t) != NOP_EXPR
6653 && reduced_constant_expression_p (t))
6654 return fold (t);
6655
6656 switch (TREE_CODE (t))
6657 {
6658 case VAR_DECL:
6659 if (addr)
6660 return t;
6661 /* else fall through. */
6662 case CONST_DECL:
6663 r = integral_constant_value (t);
6664 if (TREE_CODE (r) == TARGET_EXPR
6665 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
6666 r = TARGET_EXPR_INITIAL (r);
6667 if (DECL_P (r))
6668 {
6669 if (!allow_non_constant)
6670 {
6671 tree type = TREE_TYPE (r);
6672 error ("the value of %qD is not usable in a constant "
6673 "expression", r);
6674 if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6675 {
6676 if (!CP_TYPE_CONST_P (type))
6677 inform (DECL_SOURCE_LOCATION (r),
6678 "%q#D is not const", r);
6679 else if (CP_TYPE_VOLATILE_P (type))
6680 inform (DECL_SOURCE_LOCATION (r),
6681 "%q#D is volatile", r);
6682 else if (!DECL_INITIAL (r))
6683 inform (DECL_SOURCE_LOCATION (r),
6684 "%qD was not initialized with a constant "
6685 "expression", r);
6686 else
6687 gcc_unreachable ();
6688 }
6689 else
6690 {
6691 if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
6692 inform (DECL_SOURCE_LOCATION (r),
6693 "%qD was not declared %<constexpr%>", r);
6694 else
6695 inform (DECL_SOURCE_LOCATION (r),
6696 "%qD does not have integral or enumeration type",
6697 r);
6698 }
6699 }
6700 *non_constant_p = true;
6701 }
6702 break;
6703
6704 case FUNCTION_DECL:
6705 case LABEL_DECL:
6706 return t;
6707
6708 case PARM_DECL:
6709 if (call && DECL_CONTEXT (t) == call->fundef->decl)
6710 r = lookup_parameter_binding (call, t);
6711 else if (addr)
6712 /* Defer in case this is only used for its type. */;
6713 else
6714 {
6715 if (!allow_non_constant)
6716 error ("%qE is not a constant expression", t);
6717 *non_constant_p = true;
6718 }
6719 break;
6720
6721 case CALL_EXPR:
6722 case AGGR_INIT_EXPR:
6723 r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
6724 non_constant_p);
6725 break;
6726
6727 case TARGET_EXPR:
6728 case INIT_EXPR:
6729 /* Pass false for 'addr' because these codes indicate
6730 initialization of a temporary. */
6731 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6732 allow_non_constant, false,
6733 non_constant_p);
6734 if (!*non_constant_p)
6735 /* Adjust the type of the result to the type of the temporary. */
6736 r = adjust_temp_type (TREE_TYPE (t), r);
6737 break;
6738
6739 case SCOPE_REF:
6740 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6741 allow_non_constant, addr,
6742 non_constant_p);
6743 break;
6744
6745 case RETURN_EXPR:
6746 case NON_LVALUE_EXPR:
6747 case TRY_CATCH_EXPR:
6748 case CLEANUP_POINT_EXPR:
6749 case MUST_NOT_THROW_EXPR:
6750 case SAVE_EXPR:
6751 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6752 allow_non_constant, addr,
6753 non_constant_p);
6754 break;
6755
6756 /* These differ from cxx_eval_unary_expression in that this doesn't
6757 check for a constant operand or result; an address can be
6758 constant without its operand being, and vice versa. */
6759 case INDIRECT_REF:
6760 r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
6761 non_constant_p);
6762 break;
6763
6764 case ADDR_EXPR:
6765 {
6766 tree oldop = TREE_OPERAND (t, 0);
6767 tree op = cxx_eval_constant_expression (call, oldop,
6768 allow_non_constant,
6769 /*addr*/true,
6770 non_constant_p);
6771 /* Don't VERIFY_CONSTANT here. */
6772 if (*non_constant_p)
6773 return t;
6774 /* This function does more aggressive folding than fold itself. */
6775 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
6776 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
6777 return t;
6778 break;
6779 }
6780
6781 case REALPART_EXPR:
6782 case IMAGPART_EXPR:
6783 case CONJ_EXPR:
6784 case FIX_TRUNC_EXPR:
6785 case FLOAT_EXPR:
6786 case NEGATE_EXPR:
6787 case ABS_EXPR:
6788 case BIT_NOT_EXPR:
6789 case TRUTH_NOT_EXPR:
6790 case FIXED_CONVERT_EXPR:
6791 r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
6792 non_constant_p);
6793 break;
6794
6795 case COMPOUND_EXPR:
6796 {
6797 /* check_return_expr sometimes wraps a TARGET_EXPR in a
6798 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
6799 introduced by build_call_a. */
6800 tree op0 = TREE_OPERAND (t, 0);
6801 tree op1 = TREE_OPERAND (t, 1);
6802 STRIP_NOPS (op1);
6803 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
6804 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
6805 r = cxx_eval_constant_expression (call, op0, allow_non_constant,
6806 addr, non_constant_p);
6807 else
6808 goto binary;
6809 }
6810 break;
6811
6812 case POINTER_PLUS_EXPR:
6813 case PLUS_EXPR:
6814 case MINUS_EXPR:
6815 case MULT_EXPR:
6816 case TRUNC_DIV_EXPR:
6817 case CEIL_DIV_EXPR:
6818 case FLOOR_DIV_EXPR:
6819 case ROUND_DIV_EXPR:
6820 case TRUNC_MOD_EXPR:
6821 case CEIL_MOD_EXPR:
6822 case ROUND_MOD_EXPR:
6823 case RDIV_EXPR:
6824 case EXACT_DIV_EXPR:
6825 case MIN_EXPR:
6826 case MAX_EXPR:
6827 case LSHIFT_EXPR:
6828 case RSHIFT_EXPR:
6829 case LROTATE_EXPR:
6830 case RROTATE_EXPR:
6831 case BIT_IOR_EXPR:
6832 case BIT_XOR_EXPR:
6833 case BIT_AND_EXPR:
6834 case TRUTH_XOR_EXPR:
6835 case LT_EXPR:
6836 case LE_EXPR:
6837 case GT_EXPR:
6838 case GE_EXPR:
6839 case EQ_EXPR:
6840 case NE_EXPR:
6841 case UNORDERED_EXPR:
6842 case ORDERED_EXPR:
6843 case UNLT_EXPR:
6844 case UNLE_EXPR:
6845 case UNGT_EXPR:
6846 case UNGE_EXPR:
6847 case UNEQ_EXPR:
6848 case RANGE_EXPR:
6849 case COMPLEX_EXPR:
6850 binary:
6851 r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
6852 non_constant_p);
6853 break;
6854
6855 /* fold can introduce non-IF versions of these; still treat them as
6856 short-circuiting. */
6857 case TRUTH_AND_EXPR:
6858 case TRUTH_ANDIF_EXPR:
6859 r = cxx_eval_logical_expression (call, t, boolean_false_node,
6860 boolean_true_node,
6861 allow_non_constant, addr,
6862 non_constant_p);
6863 break;
6864
6865 case TRUTH_OR_EXPR:
6866 case TRUTH_ORIF_EXPR:
6867 r = cxx_eval_logical_expression (call, t, boolean_true_node,
6868 boolean_false_node,
6869 allow_non_constant, addr,
6870 non_constant_p);
6871 break;
6872
6873 case ARRAY_REF:
6874 r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
6875 non_constant_p);
6876 break;
6877
6878 case COMPONENT_REF:
6879 r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
6880 non_constant_p);
6881 break;
6882
6883 case BIT_FIELD_REF:
6884 r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
6885 non_constant_p);
6886 break;
6887
6888 case COND_EXPR:
6889 case VEC_COND_EXPR:
6890 r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
6891 non_constant_p);
6892 break;
6893
6894 case CONSTRUCTOR:
6895 r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
6896 non_constant_p);
6897 break;
6898
6899 case VEC_INIT_EXPR:
6900 /* We can get this in a defaulted constructor for a class with a
6901 non-static data member of array type. Either the initializer will
6902 be NULL, meaning default-initialization, or it will be an lvalue
6903 or xvalue of the same type, meaning direct-initialization from the
6904 corresponding member. */
6905 r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
6906 non_constant_p);
6907 break;
6908
6909 case CONVERT_EXPR:
6910 case VIEW_CONVERT_EXPR:
6911 case NOP_EXPR:
6912 {
6913 tree oldop = TREE_OPERAND (t, 0);
6914 tree op = oldop;
6915 tree to = TREE_TYPE (t);
6916 tree source = TREE_TYPE (op);
6917 if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (to)
6918 && !(TREE_CODE (op) == COMPONENT_REF
6919 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (op, 0)))))
6920 {
6921 if (!allow_non_constant)
6922 error ("conversion of expression %qE of pointer type "
6923 "cannot yield a constant expression", op);
6924 *non_constant_p = true;
6925 return t;
6926 }
6927 op = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6928 allow_non_constant, addr,
6929 non_constant_p);
6930 if (*non_constant_p)
6931 return t;
6932 if (op == oldop)
6933 /* We didn't fold at the top so we could check for ptr-int
6934 conversion. */
6935 return fold (t);
6936 r = fold_build1 (TREE_CODE (t), to, op);
6937 }
6938 break;
6939
6940 case EMPTY_CLASS_EXPR:
6941 /* This is good enough for a function argument that might not get
6942 used, and they can't do anything with it, so just return it. */
6943 return t;
6944
6945 case LAMBDA_EXPR:
6946 case DYNAMIC_CAST_EXPR:
6947 case PSEUDO_DTOR_EXPR:
6948 case PREINCREMENT_EXPR:
6949 case POSTINCREMENT_EXPR:
6950 case PREDECREMENT_EXPR:
6951 case POSTDECREMENT_EXPR:
6952 case NEW_EXPR:
6953 case VEC_NEW_EXPR:
6954 case DELETE_EXPR:
6955 case VEC_DELETE_EXPR:
6956 case THROW_EXPR:
6957 case MODIFY_EXPR:
6958 case MODOP_EXPR:
6959 /* GCC internal stuff. */
6960 case VA_ARG_EXPR:
6961 case OBJ_TYPE_REF:
6962 case WITH_CLEANUP_EXPR:
6963 case STATEMENT_LIST:
6964 case BIND_EXPR:
6965 case NON_DEPENDENT_EXPR:
6966 case BASELINK:
6967 case EXPR_STMT:
6968 if (!allow_non_constant)
6969 error_at (EXPR_LOC_OR_HERE (t),
6970 "expression %qE is not a constant-expression", t);
6971 *non_constant_p = true;
6972 break;
6973
6974 default:
6975 internal_error ("unexpected expression %qE of kind %s", t,
6976 tree_code_name[TREE_CODE (t)]);
6977 *non_constant_p = true;
6978 break;
6979 }
6980
6981 if (r == error_mark_node)
6982 *non_constant_p = true;
6983
6984 if (*non_constant_p)
6985 return t;
6986 else
6987 return r;
6988}
6989
6990static tree
6991cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
6992{
6993 bool non_constant_p = false;
6994 tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
6995 false, &non_constant_p);
6996
6997 verify_constant (r, allow_non_constant, &non_constant_p);
6998
6999 if (non_constant_p && !allow_non_constant)
7000 return error_mark_node;
7001 else if (non_constant_p && TREE_CONSTANT (t))
7002 {
7003 /* This isn't actually constant, so unset TREE_CONSTANT. */
7004 if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
7005 r = copy_node (t);
7006 else
7007 r = build_nop (TREE_TYPE (t), t);
7008 TREE_CONSTANT (r) = false;
7009 return r;
7010 }
7011 else if (non_constant_p || r == t)
7012 return t;
7013 else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
7014 {
7015 if (TREE_CODE (t) == TARGET_EXPR
7016 && TARGET_EXPR_INITIAL (t) == r)
7017 return t;
7018 else
7019 {
7020 r = get_target_expr (r);
7021 TREE_CONSTANT (r) = true;
7022 return r;
7023 }
7024 }
7025 else
7026 return r;
7027}
7028
7029/* Returns true if T is a valid subexpression of a constant expression,
7030 even if it isn't itself a constant expression. */
7031
7032bool
7033is_sub_constant_expr (tree t)
7034{
7035 bool non_constant_p = false;
7036 cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
7037 return !non_constant_p;
7038}
7039
7040/* If T represents a constant expression returns its reduced value.
7041 Otherwise return error_mark_node. If T is dependent, then
7042 return NULL. */
7043
7044tree
7045cxx_constant_value (tree t)
7046{
7047 return cxx_eval_outermost_constant_expr (t, false);
7048}
7049
7050/* If T is a constant expression, returns its reduced value.
7051 Otherwise, if T does not have TREE_CONSTANT set, returns T.
7052 Otherwise, returns a version of T without TREE_CONSTANT. */
7053
7054tree
7055maybe_constant_value (tree t)
7056{
7057 tree r;
7058
7059 if (type_dependent_expression_p (t)
7060 /* FIXME shouldn't check value-dependence first; see comment before
7061 value_dependent_expression_p. */
7062 || value_dependent_expression_p (t))
7063 return t;
7064
7065 r = cxx_eval_outermost_constant_expr (t, true);
7066#ifdef ENABLE_CHECKING
7067 /* cp_tree_equal looks through NOPs, so allow them. */
7068 gcc_assert (r == t
7069 || CONVERT_EXPR_P (t)
7070 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
7071 || !cp_tree_equal (r, t));
7072#endif
7073 return r;
7074}
7075
7076/* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
7077 than wrapped in a TARGET_EXPR. */
7078
7079tree
7080maybe_constant_init (tree t)
7081{
7082 t = maybe_constant_value (t);
7083 if (TREE_CODE (t) == TARGET_EXPR)
7084 {
7085 tree init = TARGET_EXPR_INITIAL (t);
7086 if (TREE_CODE (init) == CONSTRUCTOR
7087 && TREE_CONSTANT (init))
7088 t = init;
7089 }
7090 return t;
7091}
7092
7093/* Return true if the object referred to by REF has automatic or thread
7094 local storage. */
7095
7096enum { ck_ok, ck_bad, ck_unknown };
7097static int
7098check_automatic_or_tls (tree ref)
7099{
7100 enum machine_mode mode;
7101 HOST_WIDE_INT bitsize, bitpos;
7102 tree offset;
7103 int volatilep = 0, unsignedp = 0;
7104 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
7105 &mode, &unsignedp, &volatilep, false);
7106 duration_kind dk;
7107
7108 /* If there isn't a decl in the middle, we don't know the linkage here,
7109 and this isn't a constant expression anyway. */
7110 if (!DECL_P (decl))
7111 return ck_unknown;
7112 dk = decl_storage_duration (decl);
7113 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
7114}
7115
7116/* Return true if the DECL designates a builtin function that is
7117 morally constexpr, in the sense that its parameter types and
7118 return type are literal types and the compiler is allowed to
7119 fold its invocations. */
7120
7121static bool
7122morally_constexpr_builtin_function_p (tree decl)
7123{
7124 tree funtype = TREE_TYPE (decl);
7125 tree t;
7126
7127 if (!is_builtin_fn (decl))
7128 return false;
7129 if (!literal_type_p (TREE_TYPE (funtype)))
7130 return false;
7131 for (t = TYPE_ARG_TYPES (funtype); t != NULL ; t = TREE_CHAIN (t))
7132 {
7133 if (t == void_list_node)
7134 return true;
7135 if (!literal_type_p (TREE_VALUE (t)))
7136 return false;
7137 }
7138 /* We assume no varargs builtins are suitable. */
7139 return t != NULL;
7140}
7141
7142/* Return true if T denotes a constant expression, or potential constant
7143 expression if POTENTIAL is true.
7144 Issue diagnostic as appropriate under control of flags. Variables
7145 with static storage duration initialized by constant expressions
7146 are guaranteed to be statically initialized.
7147
7148 C++0x [expr.const]
7149
7150 6 An expression is a potential constant expression if it is
7151 a constant expression where all occurences of function
7152 parameters are replaced by arbitrary constant expressions
7153 of the appropriate type.
7154
7155 2 A conditional expression is a constant expression unless it
7156 involves one of the following as a potentially evaluated
7157 subexpression (3.2), but subexpressions of logical AND (5.14),
7158 logical OR (5.15), and conditional (5.16) operations that are
7159 not evaluated are not considered. */
7160
7161bool
7162potential_constant_expression (tree t, tsubst_flags_t flags)
7163{
7164 int i;
7165 tree tmp;
7166 if (t == error_mark_node)
7167 return false;
7168 if (TREE_THIS_VOLATILE (t))
7169 {
7170 if (flags & tf_error)
7171 error ("expression %qE has side-effects", t);
7172 return false;
7173 }
7174 if (CONSTANT_CLASS_P (t))
7175 return true;
7176
7177 switch (TREE_CODE (t))
7178 {
7179 case FUNCTION_DECL:
7180 case LABEL_DECL:
7181 case CONST_DECL:
7182 return true;
7183
7184 case PARM_DECL:
7185 /* -- this (5.1) unless it appears as the postfix-expression in a
7186 class member access expression, including the result of the
7187 implicit transformation in the body of the non-static
7188 member function (9.3.1); */
7189 if (is_this_parameter (t))
7190 {
7191 if (flags & tf_error)
7192 error ("%qE is not a potential constant expression", t);
7193 return false;
7194 }
7195 return true;
7196
7197 case AGGR_INIT_EXPR:
7198 case CALL_EXPR:
7199 /* -- an invocation of a function other than a constexpr function
7200 or a constexpr constructor. */
7201 {
7202 tree fun = get_function_named_in_call (t);
7203 const int nargs = call_expr_nargs (t);
7204 if (TREE_CODE (fun) != FUNCTION_DECL)
7205 {
7206 if (potential_constant_expression (fun, flags))
7207 /* Might end up being a constant function pointer. */
7208 return true;
7209 if (flags & tf_error)
7210 error ("%qE is not a function name", fun);
7211 return false;
7212 }
7213 /* Skip initial arguments to base constructors. */
7214 if (DECL_BASE_CONSTRUCTOR_P (fun))
7215 i = num_artificial_parms_for (fun);
7216 else
7217 i = 0;
7218 fun = DECL_ORIGIN (fun);
7219 if (builtin_valid_in_constant_expr_p (fun))
7220 return true;
7221 if (!DECL_DECLARED_CONSTEXPR_P (fun)
7222 && !morally_constexpr_builtin_function_p (fun))
7223 {
7224 if (flags & tf_error)
7225 error ("%qD is not %<constexpr%>", fun);
7226 return false;
7227 }
7228 for (; i < nargs; ++i)
7229 {
7230 tree x = get_nth_callarg (t, i);
7231 /* A call to a non-static member function takes the
7232 address of the object as the first argument.
7233 But in a constant expression the address will be folded
7234 away, so look through it now. */
7235 if (i == 0 && DECL_NONSTATIC_MEMBER_P (fun)
7236 && !DECL_CONSTRUCTOR_P (fun))
7237 {
7238 if (TREE_CODE (x) == ADDR_EXPR)
7239 x = TREE_OPERAND (x, 0);
7240 if (is_this_parameter (x))
7241 /* OK. */;
7242 else if (!potential_constant_expression (x, flags))
7243 {
7244 if (flags & tf_error)
7245 error ("object argument is not a potential constant "
7246 "expression");
7247 return false;
7248 }
7249 }
7250 else if (!potential_constant_expression (x, flags))
7251 {
7252 if (flags & tf_error)
7253 error ("argument in position %qP is not a "
7254 "potential constant expression", i);
7255 return false;
7256 }
7257 }
7258 return true;
7259 }
7260
7261 case NON_LVALUE_EXPR:
7262 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
7263 -- an lvalue of integral type that refers to a non-volatile
7264 const variable or static data member initialized with
7265 constant expressions, or
7266
7267 -- an lvalue of literal type that refers to non-volatile
7268 object defined with constexpr, or that refers to a
7269 sub-object of such an object; */
7270 return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7271
7272 case VAR_DECL:
7273 if (!decl_constant_var_p (t))
7274 {
7275 if (flags & tf_error)
7276 error ("variable %qD is not declared constexpr", t);
7277 return false;
7278 }
7279 return true;
7280
7281 case NOP_EXPR:
7282 case CONVERT_EXPR:
7283 case VIEW_CONVERT_EXPR:
7284 /* -- an array-to-pointer conversion that is applied to an lvalue
7285 that designates an object with thread or automatic storage
7286 duration; FIXME not implemented as it breaks constexpr arrays;
7287 need to fix the standard
7288 -- a type conversion from a pointer or pointer-to-member type
7289 to a literal type. */
7290 {
7291 tree from = TREE_OPERAND (t, 0);
7292 tree source = TREE_TYPE (from);
7293 tree target = TREE_TYPE (t);
7294 if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (target)
7295 && !(TREE_CODE (from) == COMPONENT_REF
7296 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (from, 0)))))
7297 {
7298 if (flags & tf_error)
7299 error ("conversion of expression %qE of pointer type "
7300 "cannot yield a constant expression", from);
7301 return false;
7302 }
7303 return potential_constant_expression (from, flags);
7304 }
7305
7306 case ADDR_EXPR:
7307 /* -- a unary operator & that is applied to an lvalue that
7308 designates an object with thread or automatic storage
7309 duration; */
7310 t = TREE_OPERAND (t, 0);
7311 i = check_automatic_or_tls (t);
7312 if (i == ck_ok)
7313 return true;
7314 if (i == ck_bad)
7315 {
7316 if (flags & tf_error)
7317 error ("address-of an object %qE with thread local or "
7318 "automatic storage is not a constant expression", t);
7319 return false;
7320 }
7321 return potential_constant_expression (t, flags);
7322
7323 case COMPONENT_REF:
7324 case BIT_FIELD_REF:
7325 /* -- a class member access unless its postfix-expression is
7326 of literal type or of pointer to literal type. */
7327 /* This test would be redundant, as it follows from the
7328 postfix-expression being a potential constant expression. */
7329 return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7330
7331 case INDIRECT_REF:
7332 {
7333 tree x = TREE_OPERAND (t, 0);
7334 STRIP_NOPS (x);
7335 if (is_this_parameter (x))
7336 return true;
7337 return potential_constant_expression (x, flags);
7338 }
7339
7340 case LAMBDA_EXPR:
7341 case DYNAMIC_CAST_EXPR:
7342 case PSEUDO_DTOR_EXPR:
7343 case PREINCREMENT_EXPR:
7344 case POSTINCREMENT_EXPR:
7345 case PREDECREMENT_EXPR:
7346 case POSTDECREMENT_EXPR:
7347 case NEW_EXPR:
7348 case VEC_NEW_EXPR:
7349 case DELETE_EXPR:
7350 case VEC_DELETE_EXPR:
7351 case THROW_EXPR:
7352 case MODIFY_EXPR:
7353 case MODOP_EXPR:
7354 /* GCC internal stuff. */
7355 case VA_ARG_EXPR:
7356 case OBJ_TYPE_REF:
7357 case WITH_CLEANUP_EXPR:
7358 case CLEANUP_POINT_EXPR:
7359 case MUST_NOT_THROW_EXPR:
7360 case TRY_CATCH_EXPR:
7361 case STATEMENT_LIST:
7362 case BIND_EXPR:
7363 if (flags & tf_error)
7364 error ("expression %qE is not a constant-expression", t);
7365 return false;
7366
7367 case TYPEID_EXPR:
7368 /* -- a typeid expression whose operand is of polymorphic
7369 class type; */
7370 {
7371 tree e = TREE_OPERAND (t, 0);
7372 if (!TYPE_P (e) && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
7373 {
7374 if (flags & tf_error)
7375 error ("typeid-expression is not a constant expression "
7376 "because %qE is of polymorphic type", e);
7377 return false;
7378 }
7379 return true;
7380 }
7381
7382 case MINUS_EXPR:
7383 /* -- a subtraction where both operands are pointers. */
7384 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7385 && TYPE_PTR_P (TREE_OPERAND (t, 1)))
7386 {
7387 if (flags & tf_error)
7388 error ("difference of two pointer expressions is not "
7389 "a constant expression");
7390 return false;
7391 }
7392 goto binary;
7393
7394 case LT_EXPR:
7395 case LE_EXPR:
7396 case GT_EXPR:
7397 case GE_EXPR:
7398 case EQ_EXPR:
7399 case NE_EXPR:
7400 /* -- a relational or equality operator where at least
7401 one of the operands is a pointer. */
7402 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7403 || TYPE_PTR_P (TREE_OPERAND (t, 1)))
7404 {
7405 if (flags & tf_error)
7406 error ("pointer comparison expression is not a "
7407 "constant expression");
7408 return false;
7409 }
7410 goto binary;
7411
7412 case REALPART_EXPR:
7413 case IMAGPART_EXPR:
7414 case CONJ_EXPR:
7415 case SAVE_EXPR:
7416 case FIX_TRUNC_EXPR:
7417 case FLOAT_EXPR:
7418 case NEGATE_EXPR:
7419 case ABS_EXPR:
7420 case BIT_NOT_EXPR:
7421 case TRUTH_NOT_EXPR:
7422 case PAREN_EXPR:
7423 case FIXED_CONVERT_EXPR:
7424 /* For convenience. */
7425 case RETURN_EXPR:
7426 return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7427
7428 case INIT_EXPR:
7429 case TARGET_EXPR:
7430 return potential_constant_expression (TREE_OPERAND (t, 1), flags);
7431
7432 case CONSTRUCTOR:
7433 {
7434 VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
7435 constructor_elt *ce;
7436 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7437 if (!potential_constant_expression (ce->value, flags))
7438 return false;
7439 return true;
7440 }
7441
7442 case TREE_LIST:
7443 {
7444 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
7445 || DECL_P (TREE_PURPOSE (t)));
7446 if (!potential_constant_expression (TREE_VALUE (t), flags))
7447 return false;
7448 if (TREE_CHAIN (t) == NULL_TREE)
7449 return true;
7450 return potential_constant_expression (TREE_CHAIN (t), flags);
7451 }
7452
7453 case TRUNC_DIV_EXPR:
7454 case CEIL_DIV_EXPR:
7455 case FLOOR_DIV_EXPR:
7456 case ROUND_DIV_EXPR:
7457 case TRUNC_MOD_EXPR:
7458 case CEIL_MOD_EXPR:
7459 case ROUND_MOD_EXPR:
7460 if (integer_zerop (maybe_constant_value (TREE_OPERAND (t, 1))))
7461 return false;
7462 else
7463 goto binary;
7464
7465 case COMPOUND_EXPR:
7466 {
7467 /* check_return_expr sometimes wraps a TARGET_EXPR in a
7468 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
7469 introduced by build_call_a. */
7470 tree op0 = TREE_OPERAND (t, 0);
7471 tree op1 = TREE_OPERAND (t, 1);
7472 STRIP_NOPS (op1);
7473 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7474 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7475 return potential_constant_expression (op0, flags);
7476 else
7477 goto binary;
7478 }
7479
7480 /* If the first operand is the non-short-circuit constant, look at
7481 the second operand; otherwise we only care about the first one for
7482 potentiality. */
7483 case TRUTH_AND_EXPR:
7484 case TRUTH_ANDIF_EXPR:
7485 tmp = boolean_true_node;
7486 goto truth;
7487 case TRUTH_OR_EXPR:
7488 case TRUTH_ORIF_EXPR:
7489 tmp = boolean_false_node;
7490 truth:
7491 if (TREE_OPERAND (t, 0) == tmp)
7492 return potential_constant_expression (TREE_OPERAND (t, 1), flags);
7493 else
7494 return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7495
7496 case ARRAY_REF:
7497 case ARRAY_RANGE_REF:
7498 case PLUS_EXPR:
7499 case MULT_EXPR:
7500 case POINTER_PLUS_EXPR:
7501 case RDIV_EXPR:
7502 case EXACT_DIV_EXPR:
7503 case MIN_EXPR:
7504 case MAX_EXPR:
7505 case LSHIFT_EXPR:
7506 case RSHIFT_EXPR:
7507 case LROTATE_EXPR:
7508 case RROTATE_EXPR:
7509 case BIT_IOR_EXPR:
7510 case BIT_XOR_EXPR:
7511 case BIT_AND_EXPR:
7512 case UNLT_EXPR:
7513 case UNLE_EXPR:
7514 case UNGT_EXPR:
7515 case UNGE_EXPR:
7516 case UNEQ_EXPR:
7517 case RANGE_EXPR:
7518 case COMPLEX_EXPR:
7519 binary:
7520 for (i = 0; i < 2; ++i)
7521 if (!potential_constant_expression (TREE_OPERAND (t, i),
7522 flags))
7523 return false;
7524 return true;
7525
7526 case COND_EXPR:
7527 case VEC_COND_EXPR:
7528 /* If the condition is a known constant, we know which of the legs we
7529 care about; otherwise we only require that the condition and
7530 either of the legs be potentially constant. */
7531 tmp = TREE_OPERAND (t, 0);
7532 if (!potential_constant_expression (tmp, flags))
7533 return false;
7534 else if (tmp == boolean_true_node)
7535 return potential_constant_expression (TREE_OPERAND (t, 1), flags);
7536 else if (tmp == boolean_false_node)
7537 return potential_constant_expression (TREE_OPERAND (t, 2), flags);
7538 for (i = 1; i < 3; ++i)
7539 if (potential_constant_expression (TREE_OPERAND (t, i), tf_none))
7540 return true;
7541 if (flags & tf_error)
7542 error ("expression %qE is not a constant-expression", t);
7543 return false;
7544
7545 case VEC_INIT_EXPR:
7546 return VEC_INIT_EXPR_IS_CONSTEXPR (t);
7547
7548 default:
7549 sorry ("unexpected ast of kind %s", tree_code_name[TREE_CODE (t)]);
7550 gcc_unreachable();
7551 return false;
7552 }
7553}
7554
7555\f
7556/* Constructor for a lambda expression. */
7557
7558tree
7559build_lambda_expr (void)
7560{
7561 tree lambda = make_node (LAMBDA_EXPR);
7562 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
7563 LAMBDA_EXPR_CAPTURE_LIST (lambda) = NULL_TREE;
7564 LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
7565 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
7566 LAMBDA_EXPR_MUTABLE_P (lambda) = false;
7567 return lambda;
7568}
7569
7570/* Create the closure object for a LAMBDA_EXPR. */
7571
7572tree
7573build_lambda_object (tree lambda_expr)
7574{
7575 /* Build aggregate constructor call.
7576 - cp_parser_braced_list
7577 - cp_parser_functional_cast */
7578 VEC(constructor_elt,gc) *elts = NULL;
7579 tree node, expr, type;
7580 location_t saved_loc;
7581
7582 if (processing_template_decl)
7583 return lambda_expr;
7584
7585 /* Make sure any error messages refer to the lambda-introducer. */
7586 saved_loc = input_location;
7587 input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
7588
7589 for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
7590 node;
7591 node = TREE_CHAIN (node))
7592 {
7593 tree field = TREE_PURPOSE (node);
7594 tree val = TREE_VALUE (node);
7595
7596 if (DECL_P (val))
7597 mark_used (val);
7598
7599 /* Mere mortals can't copy arrays with aggregate initialization, so
7600 do some magic to make it work here. */
7601 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
7602 val = build_array_copy (val);
7603 else if (DECL_NORMAL_CAPTURE_P (field)
7604 && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
7605 {
7606 /* "the entities that are captured by copy are used to
7607 direct-initialize each corresponding non-static data
7608 member of the resulting closure object."
7609
7610 There's normally no way to express direct-initialization
7611 from an element of a CONSTRUCTOR, so we build up a special
7612 TARGET_EXPR to bypass the usual copy-initialization. */
7613 val = force_rvalue (val);
7614 if (TREE_CODE (val) == TARGET_EXPR)
7615 TARGET_EXPR_DIRECT_INIT_P (val) = true;
7616 }
7617
7618 CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
7619 }
7620
7621 expr = build_constructor (init_list_type_node, elts);
7622 CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
7623
7624 /* N2927: "[The closure] class type is not an aggregate."
7625 But we briefly treat it as an aggregate to make this simpler. */
7626 type = TREE_TYPE (lambda_expr);
7627 CLASSTYPE_NON_AGGREGATE (type) = 0;
7628 expr = finish_compound_literal (type, expr);
7629 CLASSTYPE_NON_AGGREGATE (type) = 1;
7630
7631 input_location = saved_loc;
7632 return expr;
7633}
7634
7635/* Return an initialized RECORD_TYPE for LAMBDA.
7636 LAMBDA must have its explicit captures already. */
7637
7638tree
7639begin_lambda_type (tree lambda)
7640{
7641 tree type;
7642
7643 {
7644 /* Unique name. This is just like an unnamed class, but we cannot use
7645 make_anon_name because of certain checks against TYPE_ANONYMOUS_P. */
7646 tree name;
7647 name = make_lambda_name ();
7648
7649 /* Create the new RECORD_TYPE for this lambda. */
7650 type = xref_tag (/*tag_code=*/record_type,
7651 name,
7652 /*scope=*/ts_within_enclosing_non_class,
7653 /*template_header_p=*/false);
7654 }
7655
7656 /* Designate it as a struct so that we can use aggregate initialization. */
7657 CLASSTYPE_DECLARED_CLASS (type) = false;
7658
7659 /* Clear base types. */
7660 xref_basetypes (type, /*bases=*/NULL_TREE);
7661
7662 /* Start the class. */
7663 type = begin_class_definition (type, /*attributes=*/NULL_TREE);
7664
7665 /* Cross-reference the expression and the type. */
7666 TREE_TYPE (lambda) = type;
7667 CLASSTYPE_LAMBDA_EXPR (type) = lambda;
7668
7669 return type;
7670}
7671
7672/* Returns the type to use for the return type of the operator() of a
7673 closure class. */
7674
7675tree
7676lambda_return_type (tree expr)
7677{
7678 tree type;
7679 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
7680 {
7681 warning (0, "cannot deduce lambda return type from a braced-init-list");
7682 return void_type_node;
7683 }
7684 if (type_dependent_expression_p (expr))
7685 {
7686 type = cxx_make_type (DECLTYPE_TYPE);
7687 DECLTYPE_TYPE_EXPR (type) = expr;
7688 DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
7689 SET_TYPE_STRUCTURAL_EQUALITY (type);
7690 }
7691 else
7692 type = type_decays_to (unlowered_expr_type (expr));
7693 return type;
7694}
7695
7696/* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
7697 closure type. */
7698
7699tree
7700lambda_function (tree lambda)
7701{
7702 tree type;
7703 if (TREE_CODE (lambda) == LAMBDA_EXPR)
7704 type = TREE_TYPE (lambda);
7705 else
7706 type = lambda;
7707 gcc_assert (LAMBDA_TYPE_P (type));
7708 /* Don't let debug_tree cause instantiation. */
7709 if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
7710 return NULL_TREE;
7711 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
7712 /*protect=*/0, /*want_type=*/false);
7713 if (lambda)
7714 lambda = BASELINK_FUNCTIONS (lambda);
7715 return lambda;
7716}
7717
7718/* Returns the type to use for the FIELD_DECL corresponding to the
7719 capture of EXPR.
7720 The caller should add REFERENCE_TYPE for capture by reference. */
7721
7722tree
7723lambda_capture_field_type (tree expr)
7724{
7725 tree type;
7726 if (type_dependent_expression_p (expr))
7727 {
7728 type = cxx_make_type (DECLTYPE_TYPE);
7729 DECLTYPE_TYPE_EXPR (type) = expr;
7730 DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
7731 SET_TYPE_STRUCTURAL_EQUALITY (type);
7732 }
7733 else
7734 type = non_reference (unlowered_expr_type (expr));
7735 return type;
7736}
7737
7738/* Recompute the return type for LAMBDA with body of the form:
7739 { return EXPR ; } */
7740
7741void
7742apply_lambda_return_type (tree lambda, tree return_type)
7743{
7744 tree fco = lambda_function (lambda);
7745 tree result;
7746
7747 LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
7748
7749 /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
7750 it would interfere with instantiating the closure type. */
7751 if (dependent_type_p (return_type))
7752 return;
7753 if (return_type == error_mark_node)
7754 return;
7755
7756 /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
7757 TREE_TYPE (METHOD_TYPE) == return-type */
7758 TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
7759
7760 result = DECL_RESULT (fco);
7761 if (result == NULL_TREE)
7762 return;
7763
7764 /* We already have a DECL_RESULT from start_preparsed_function.
7765 Now we need to redo the work it and allocate_struct_function
7766 did to reflect the new type. */
7767 result = build_decl (input_location, RESULT_DECL, NULL_TREE,
7768 TYPE_MAIN_VARIANT (return_type));
7769 DECL_ARTIFICIAL (result) = 1;
7770 DECL_IGNORED_P (result) = 1;
7771 cp_apply_type_quals_to_decl (cp_type_quals (return_type),
7772 result);
7773
7774 DECL_RESULT (fco) = result;
7775
7776 if (!processing_template_decl && aggregate_value_p (result, fco))
7777 {
7778#ifdef PCC_STATIC_STRUCT_RETURN
7779 cfun->returns_pcc_struct = 1;
7780#endif
7781 cfun->returns_struct = 1;
7782 }
7783
7784}
7785
7786/* DECL is a local variable or parameter from the surrounding scope of a
7787 lambda-expression. Returns the decltype for a use of the capture field
7788 for DECL even if it hasn't been captured yet. */
7789
7790static tree
7791capture_decltype (tree decl)
7792{
7793 tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
7794 /* FIXME do lookup instead of list walk? */
7795 tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
7796 tree type;
7797
7798 if (cap)
7799 type = TREE_TYPE (TREE_PURPOSE (cap));
7800 else
7801 switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
7802 {
7803 case CPLD_NONE:
7804 error ("%qD is not captured", decl);
7805 return error_mark_node;
7806
7807 case CPLD_COPY:
7808 type = TREE_TYPE (decl);
7809 if (TREE_CODE (type) == REFERENCE_TYPE
7810 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
7811 type = TREE_TYPE (type);
7812 break;
7813
7814 case CPLD_REFERENCE:
7815 type = TREE_TYPE (decl);
7816 if (TREE_CODE (type) != REFERENCE_TYPE)
7817 type = build_reference_type (TREE_TYPE (decl));
7818 break;
7819
7820 default:
7821 gcc_unreachable ();
7822 }
7823
7824 if (TREE_CODE (type) != REFERENCE_TYPE)
7825 {
7826 if (!LAMBDA_EXPR_MUTABLE_P (lam))
7827 type = cp_build_qualified_type (type, (cp_type_quals (type)
7828 |TYPE_QUAL_CONST));
7829 type = build_reference_type (type);
7830 }
7831 return type;
7832}
7833
7834/* From an ID and INITIALIZER, create a capture (by reference if
7835 BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
7836 and return it. */
7837
7838tree
7839add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
7840 bool explicit_init_p)
7841{
7842 tree type;
7843 tree member;
7844
7845 type = lambda_capture_field_type (initializer);
7846 if (by_reference_p)
7847 {
7848 type = build_reference_type (type);
7849 if (!real_lvalue_p (initializer))
7850 error ("cannot capture %qE by reference", initializer);
7851 }
7852
7853 /* Make member variable. */
7854 member = build_lang_decl (FIELD_DECL, id, type);
7855 if (!explicit_init_p)
7856 /* Normal captures are invisible to name lookup but uses are replaced
7857 with references to the capture field; we implement this by only
7858 really making them invisible in unevaluated context; see
7859 qualify_lookup. For now, let's make explicitly initialized captures
7860 always visible. */
7861 DECL_NORMAL_CAPTURE_P (member) = true;
7862
7863 /* Add it to the appropriate closure class if we've started it. */
7864 if (current_class_type && current_class_type == TREE_TYPE (lambda))
7865 finish_member_declaration (member);
7866
7867 LAMBDA_EXPR_CAPTURE_LIST (lambda)
7868 = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
7869
7870 if (id == get_identifier ("__this"))
7871 {
7872 if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
7873 error ("already captured %<this%> in lambda expression");
7874 LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
7875 }
7876
7877 return member;
7878}
7879
7880/* Register all the capture members on the list CAPTURES, which is the
7881 LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer. */
7882
7883void register_capture_members (tree captures)
7884{
7885 if (captures)
7886 {
7887 register_capture_members (TREE_CHAIN (captures));
7888 finish_member_declaration (TREE_PURPOSE (captures));
7889 }
7890}
7891
7892/* Given a FIELD_DECL decl belonging to a closure type, return a
7893 COMPONENT_REF of it relative to the 'this' parameter of the op() for
7894 that type. */
7895
7896static tree
7897thisify_lambda_field (tree decl)
7898{
7899 tree context = lambda_function (DECL_CONTEXT (decl));
7900 tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
7901 RO_NULL,
7902 tf_warning_or_error);
7903 return finish_non_static_data_member (decl, object,
7904 /*qualifying_scope*/NULL_TREE);
7905}
7906
7907/* Similar to add_capture, except this works on a stack of nested lambdas.
7908 BY_REFERENCE_P in this case is derived from the default capture mode.
7909 Returns the capture for the lambda at the bottom of the stack. */
7910
7911tree
7912add_default_capture (tree lambda_stack, tree id, tree initializer)
7913{
7914 bool this_capture_p = (id == get_identifier ("__this"));
7915
7916 tree member = NULL_TREE;
7917
7918 tree saved_class_type = current_class_type;
7919
7920 tree node;
7921
7922 for (node = lambda_stack;
7923 node;
7924 node = TREE_CHAIN (node))
7925 {
7926 tree lambda = TREE_VALUE (node);
7927
7928 current_class_type = TREE_TYPE (lambda);
7929 member = add_capture (lambda,
7930 id,
7931 initializer,
7932 /*by_reference_p=*/
7933 (!this_capture_p
7934 && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
7935 == CPLD_REFERENCE)),
7936 /*explicit_init_p=*/false);
7937 initializer = thisify_lambda_field (member);
7938 }
7939
7940 current_class_type = saved_class_type;
7941
7942 return member;
7943}
7944
7945/* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
7946 INDIRECT_REF, possibly adding it through default capturing. */
7947
7948tree
7949lambda_expr_this_capture (tree lambda)
7950{
7951 tree result;
7952
7953 tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
7954
7955 /* Try to default capture 'this' if we can. */
7956 if (!this_capture
7957 && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
7958 {
7959 tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
7960 tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
7961 tree init = NULL_TREE;
7962
7963 /* If we are in a lambda function, we can move out until we hit:
7964 1. a non-lambda function,
7965 2. a lambda function capturing 'this', or
7966 3. a non-default capturing lambda function. */
7967 while (LAMBDA_FUNCTION_P (containing_function))
7968 {
7969 tree lambda
7970 = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
7971
7972 if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
7973 {
7974 /* An outer lambda has already captured 'this'. */
7975 tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
7976 init = thisify_lambda_field (cap);
7977 break;
7978 }
7979
7980 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
7981 /* An outer lambda won't let us capture 'this'. */
7982 break;
7983
7984 lambda_stack = tree_cons (NULL_TREE,
7985 lambda,
7986 lambda_stack);
7987
7988 containing_function = decl_function_context (containing_function);
7989 }
7990
7991 if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
7992 && !LAMBDA_FUNCTION_P (containing_function))
7993 /* First parameter is 'this'. */
7994 init = DECL_ARGUMENTS (containing_function);
7995
7996 if (init)
7997 this_capture = add_default_capture (lambda_stack,
7998 /*id=*/get_identifier ("__this"),
7999 init);
8000 }
8001
8002 if (!this_capture)
8003 {
8004 error ("%<this%> was not captured for this lambda function");
8005 result = error_mark_node;
8006 }
8007 else
8008 {
8009 /* To make sure that current_class_ref is for the lambda. */
8010 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
8011
8012 result = finish_non_static_data_member (this_capture,
8013 NULL_TREE,
8014 /*qualifying_scope=*/NULL_TREE);
8015
8016 /* If 'this' is captured, each use of 'this' is transformed into an
8017 access to the corresponding unnamed data member of the closure
8018 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
8019 ensures that the transformed expression is an rvalue. ] */
8020 result = rvalue (result);
8021 }
8022
8023 return result;
8024}
8025
8026/* Returns the method basetype of the innermost non-lambda function, or
8027 NULL_TREE if none. */
8028
8029tree
8030nonlambda_method_basetype (void)
8031{
8032 tree fn, type;
8033 if (!current_class_ref)
8034 return NULL_TREE;
8035
8036 type = current_class_type;
8037 if (!LAMBDA_TYPE_P (type))
8038 return type;
8039
8040 /* Find the nearest enclosing non-lambda function. */
8041 fn = TYPE_NAME (type);
8042 do
8043 fn = decl_function_context (fn);
8044 while (fn && LAMBDA_FUNCTION_P (fn));
8045
8046 if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8047 return NULL_TREE;
8048
8049 return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
8050}
8051
8052/* If the closure TYPE has a static op(), also add a conversion to function
8053 pointer. */
8054
8055void
8056maybe_add_lambda_conv_op (tree type)
8057{
8058 bool nested = (current_function_decl != NULL_TREE);
8059 tree callop = lambda_function (type);
8060 tree rettype, name, fntype, fn, body, compound_stmt;
8061 tree thistype, stattype, statfn, convfn, call, arg;
8062 VEC (tree, gc) *argvec;
8063
8064 if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
8065 return;
8066
8067 stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
8068 FUNCTION_ARG_CHAIN (callop));
8069
8070 /* First build up the conversion op. */
8071
8072 rettype = build_pointer_type (stattype);
8073 name = mangle_conv_op_name_for_type (rettype);
8074 thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
8075 fntype = build_method_type_directly (thistype, rettype, void_list_node);
8076 fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
8077 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
8078
8079 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
8080 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
8081 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
8082
8083 SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
8084 grokclassfn (type, fn, NO_SPECIAL);
8085 set_linkage_according_to_type (type, fn);
8086 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8087 DECL_IN_AGGR_P (fn) = 1;
8088 DECL_ARTIFICIAL (fn) = 1;
8089 DECL_NOT_REALLY_EXTERN (fn) = 1;
8090 DECL_DECLARED_INLINE_P (fn) = 1;
8091 DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
8092 if (nested)
8093 DECL_INTERFACE_KNOWN (fn) = 1;
8094
8095 add_method (type, fn, NULL_TREE);
8096
8097 /* Generic thunk code fails for varargs; we'll complain in mark_used if
8098 the conversion op is used. */
8099 if (varargs_function_p (callop))
8100 {
8101 DECL_DELETED_FN (fn) = 1;
8102 return;
8103 }
8104
8105 /* Now build up the thunk to be returned. */
8106
8107 name = get_identifier ("_FUN");
8108 fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
8109 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
8110 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
8111 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
8112 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
8113 grokclassfn (type, fn, NO_SPECIAL);
8114 set_linkage_according_to_type (type, fn);
8115 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8116 DECL_IN_AGGR_P (fn) = 1;
8117 DECL_ARTIFICIAL (fn) = 1;
8118 DECL_NOT_REALLY_EXTERN (fn) = 1;
8119 DECL_DECLARED_INLINE_P (fn) = 1;
8120 DECL_STATIC_FUNCTION_P (fn) = 1;
8121 DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
8122 for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
8123 DECL_CONTEXT (arg) = fn;
8124 if (nested)
8125 DECL_INTERFACE_KNOWN (fn) = 1;
8126
8127 add_method (type, fn, NULL_TREE);
8128
8129 if (nested)
8130 push_function_context ();
8131
8132 /* Generate the body of the thunk. */
8133
8134 start_preparsed_function (statfn, NULL_TREE,
8135 SF_PRE_PARSED | SF_INCLASS_INLINE);
8136 if (DECL_ONE_ONLY (statfn))
8137 {
8138 /* Put the thunk in the same comdat group as the call op. */
8139 struct cgraph_node *callop_node, *thunk_node;
8140 DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
8141 callop_node = cgraph_node (callop);
8142 thunk_node = cgraph_node (statfn);
8143 gcc_assert (callop_node->same_comdat_group == NULL);
8144 gcc_assert (thunk_node->same_comdat_group == NULL);
8145 callop_node->same_comdat_group = thunk_node;
8146 thunk_node->same_comdat_group = callop_node;
8147 }
8148 body = begin_function_body ();
8149 compound_stmt = begin_compound_stmt (0);
8150
8151 arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
8152 null_pointer_node);
8153 argvec = make_tree_vector ();
8154 VEC_quick_push (tree, argvec, arg);
8155 for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
8156 VEC_safe_push (tree, gc, argvec, arg);
8157 call = build_call_a (callop, VEC_length (tree, argvec),
8158 VEC_address (tree, argvec));
8159 CALL_FROM_THUNK_P (call) = 1;
8160 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
8161 call = build_cplus_new (TREE_TYPE (call), call);
8162 call = convert_from_reference (call);
8163 finish_return_stmt (call);
8164
8165 finish_compound_stmt (compound_stmt);
8166 finish_function_body (body);
8167
8168 expand_or_defer_fn (finish_function (2));
8169
8170 /* Generate the body of the conversion op. */
8171
8172 start_preparsed_function (convfn, NULL_TREE,
8173 SF_PRE_PARSED | SF_INCLASS_INLINE);
8174 body = begin_function_body ();
8175 compound_stmt = begin_compound_stmt (0);
8176
8177 finish_return_stmt (decay_conversion (statfn));
8178
8179 finish_compound_stmt (compound_stmt);
8180 finish_function_body (body);
8181
8182 expand_or_defer_fn (finish_function (2));
8183
8184 if (nested)
8185 pop_function_context ();
8186}
8187#include "gt-cp-semantics.h"