OSDN Git Service

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