OSDN Git Service

PR c++/54341
[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     return t;
7458   return r;
7459 }
7460
7461 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
7462    Shared between potential_constant_expression and
7463    cxx_eval_constant_expression.  */
7464
7465 static void
7466 non_const_var_error (tree r)
7467 {
7468   tree type = TREE_TYPE (r);
7469   error ("the value of %qD is not usable in a constant "
7470          "expression", r);
7471   /* Avoid error cascade.  */
7472   if (DECL_INITIAL (r) == error_mark_node)
7473     return;
7474   if (DECL_DECLARED_CONSTEXPR_P (r))
7475     inform (DECL_SOURCE_LOCATION (r),
7476             "%qD used in its own initializer", r);
7477   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7478     {
7479       if (!CP_TYPE_CONST_P (type))
7480         inform (DECL_SOURCE_LOCATION (r),
7481                 "%q#D is not const", r);
7482       else if (CP_TYPE_VOLATILE_P (type))
7483         inform (DECL_SOURCE_LOCATION (r),
7484                 "%q#D is volatile", r);
7485       else if (!DECL_INITIAL (r)
7486                || !TREE_CONSTANT (DECL_INITIAL (r)))
7487         inform (DECL_SOURCE_LOCATION (r),
7488                 "%qD was not initialized with a constant "
7489                 "expression", r);
7490       else
7491         gcc_unreachable ();
7492     }
7493   else
7494     {
7495       if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
7496         inform (DECL_SOURCE_LOCATION (r),
7497                 "%qD was not declared %<constexpr%>", r);
7498       else
7499         inform (DECL_SOURCE_LOCATION (r),
7500                 "%qD does not have integral or enumeration type",
7501                 r);
7502     }
7503 }
7504
7505 /* Attempt to reduce the expression T to a constant value.
7506    On failure, issue diagnostic and return error_mark_node.  */
7507 /* FIXME unify with c_fully_fold */
7508
7509 static tree
7510 cxx_eval_constant_expression (const constexpr_call *call, tree t,
7511                               bool allow_non_constant, bool addr,
7512                               bool *non_constant_p)
7513 {
7514   tree r = t;
7515
7516   if (t == error_mark_node)
7517     {
7518       *non_constant_p = true;
7519       return t;
7520     }
7521   if (CONSTANT_CLASS_P (t))
7522     {
7523       if (TREE_CODE (t) == PTRMEM_CST)
7524         t = cplus_expand_constant (t);
7525       return t;
7526     }
7527   if (TREE_CODE (t) != NOP_EXPR
7528       && reduced_constant_expression_p (t))
7529     return fold (t);
7530
7531   switch (TREE_CODE (t))
7532     {
7533     case VAR_DECL:
7534       if (addr)
7535         return t;
7536       /* else fall through. */
7537     case CONST_DECL:
7538       r = integral_constant_value (t);
7539       if (TREE_CODE (r) == TARGET_EXPR
7540           && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
7541         r = TARGET_EXPR_INITIAL (r);
7542       if (DECL_P (r))
7543         {
7544           if (!allow_non_constant)
7545             non_const_var_error (r);
7546           *non_constant_p = true;
7547         }
7548       break;
7549
7550     case FUNCTION_DECL:
7551     case TEMPLATE_DECL:
7552     case LABEL_DECL:
7553       return t;
7554
7555     case PARM_DECL:
7556       if (call && DECL_CONTEXT (t) == call->fundef->decl)
7557         {
7558           if (DECL_ARTIFICIAL (t) && DECL_CONSTRUCTOR_P (DECL_CONTEXT (t)))
7559             {
7560               if (!allow_non_constant)
7561                 sorry ("use of the value of the object being constructed "
7562                        "in a constant expression");
7563               *non_constant_p = true;
7564             }
7565           else
7566             r = lookup_parameter_binding (call, t);
7567         }
7568       else if (addr)
7569         /* Defer in case this is only used for its type.  */;
7570       else
7571         {
7572           if (!allow_non_constant)
7573             error ("%qE is not a constant expression", t);
7574           *non_constant_p = true;
7575         }
7576       break;
7577
7578     case CALL_EXPR:
7579     case AGGR_INIT_EXPR:
7580       r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
7581                                     non_constant_p);
7582       break;
7583
7584     case TARGET_EXPR:
7585       if (!literal_type_p (TREE_TYPE (t)))
7586         {
7587           if (!allow_non_constant)
7588             {
7589               error ("temporary of non-literal type %qT in a "
7590                      "constant expression", TREE_TYPE (t));
7591               explain_non_literal_class (TREE_TYPE (t));
7592             }
7593           *non_constant_p = true;
7594           break;
7595         }
7596       /* else fall through.  */
7597     case INIT_EXPR:
7598       /* Pass false for 'addr' because these codes indicate
7599          initialization of a temporary.  */
7600       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7601                                         allow_non_constant, false,
7602                                         non_constant_p);
7603       if (!*non_constant_p)
7604         /* Adjust the type of the result to the type of the temporary.  */
7605         r = adjust_temp_type (TREE_TYPE (t), r);
7606       break;
7607
7608     case SCOPE_REF:
7609       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7610                                         allow_non_constant, addr,
7611                                         non_constant_p);
7612       break;
7613
7614     case RETURN_EXPR:
7615     case NON_LVALUE_EXPR:
7616     case TRY_CATCH_EXPR:
7617     case CLEANUP_POINT_EXPR:
7618     case MUST_NOT_THROW_EXPR:
7619     case SAVE_EXPR:
7620       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7621                                         allow_non_constant, addr,
7622                                         non_constant_p);
7623       break;
7624
7625       /* These differ from cxx_eval_unary_expression in that this doesn't
7626          check for a constant operand or result; an address can be
7627          constant without its operand being, and vice versa.  */
7628     case INDIRECT_REF:
7629       r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
7630                                  non_constant_p);
7631       break;
7632
7633     case ADDR_EXPR:
7634       {
7635         tree oldop = TREE_OPERAND (t, 0);
7636         tree op = cxx_eval_constant_expression (call, oldop,
7637                                                 allow_non_constant,
7638                                                 /*addr*/true,
7639                                                 non_constant_p);
7640         /* Don't VERIFY_CONSTANT here.  */
7641         if (*non_constant_p)
7642           return t;
7643         /* This function does more aggressive folding than fold itself.  */
7644         r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
7645         if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
7646           return t;
7647         break;
7648       }
7649
7650     case REALPART_EXPR:
7651     case IMAGPART_EXPR:
7652     case CONJ_EXPR:
7653     case FIX_TRUNC_EXPR:
7654     case FLOAT_EXPR:
7655     case NEGATE_EXPR:
7656     case ABS_EXPR:
7657     case BIT_NOT_EXPR:
7658     case TRUTH_NOT_EXPR:
7659     case FIXED_CONVERT_EXPR:
7660       r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
7661                                      non_constant_p);
7662       break;
7663
7664     case COMPOUND_EXPR:
7665       {
7666         /* check_return_expr sometimes wraps a TARGET_EXPR in a
7667            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
7668            introduced by build_call_a.  */
7669         tree op0 = TREE_OPERAND (t, 0);
7670         tree op1 = TREE_OPERAND (t, 1);
7671         STRIP_NOPS (op1);
7672         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7673             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7674           r = cxx_eval_constant_expression (call, op0, allow_non_constant,
7675                                             addr, non_constant_p);
7676         else
7677           {
7678             /* Check that the LHS is constant and then discard it.  */
7679             cxx_eval_constant_expression (call, op0, allow_non_constant,
7680                                           false, non_constant_p);
7681             r = cxx_eval_constant_expression (call, op1, allow_non_constant,
7682                                               addr, non_constant_p);
7683           }
7684       }
7685       break;
7686
7687     case POINTER_PLUS_EXPR:
7688     case PLUS_EXPR:
7689     case MINUS_EXPR:
7690     case MULT_EXPR:
7691     case TRUNC_DIV_EXPR:
7692     case CEIL_DIV_EXPR:
7693     case FLOOR_DIV_EXPR:
7694     case ROUND_DIV_EXPR:
7695     case TRUNC_MOD_EXPR:
7696     case CEIL_MOD_EXPR:
7697     case ROUND_MOD_EXPR:
7698     case RDIV_EXPR:
7699     case EXACT_DIV_EXPR:
7700     case MIN_EXPR:
7701     case MAX_EXPR:
7702     case LSHIFT_EXPR:
7703     case RSHIFT_EXPR:
7704     case LROTATE_EXPR:
7705     case RROTATE_EXPR:
7706     case BIT_IOR_EXPR:
7707     case BIT_XOR_EXPR:
7708     case BIT_AND_EXPR:
7709     case TRUTH_XOR_EXPR:
7710     case LT_EXPR:
7711     case LE_EXPR:
7712     case GT_EXPR:
7713     case GE_EXPR:
7714     case EQ_EXPR:
7715     case NE_EXPR:
7716     case UNORDERED_EXPR:
7717     case ORDERED_EXPR:
7718     case UNLT_EXPR:
7719     case UNLE_EXPR:
7720     case UNGT_EXPR:
7721     case UNGE_EXPR:
7722     case UNEQ_EXPR:
7723     case RANGE_EXPR:
7724     case COMPLEX_EXPR:
7725       r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
7726                                       non_constant_p);
7727       break;
7728
7729       /* fold can introduce non-IF versions of these; still treat them as
7730          short-circuiting.  */
7731     case TRUTH_AND_EXPR:
7732     case TRUTH_ANDIF_EXPR:
7733       r = cxx_eval_logical_expression (call, t, boolean_false_node,
7734                                        boolean_true_node,
7735                                        allow_non_constant, addr,
7736                                        non_constant_p);
7737       break;
7738
7739     case TRUTH_OR_EXPR:
7740     case TRUTH_ORIF_EXPR:
7741       r = cxx_eval_logical_expression (call, t, boolean_true_node,
7742                                        boolean_false_node,
7743                                        allow_non_constant, addr,
7744                                        non_constant_p);
7745       break;
7746
7747     case ARRAY_REF:
7748       r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
7749                                     non_constant_p);
7750       break;
7751
7752     case COMPONENT_REF:
7753       r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
7754                                         non_constant_p);
7755       break;
7756
7757     case BIT_FIELD_REF:
7758       r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
7759                                   non_constant_p);
7760       break;
7761
7762     case COND_EXPR:
7763     case VEC_COND_EXPR:
7764       r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
7765                                            non_constant_p);
7766       break;
7767
7768     case CONSTRUCTOR:
7769       r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
7770                                    non_constant_p);
7771       break;
7772
7773     case VEC_INIT_EXPR:
7774       /* We can get this in a defaulted constructor for a class with a
7775          non-static data member of array type.  Either the initializer will
7776          be NULL, meaning default-initialization, or it will be an lvalue
7777          or xvalue of the same type, meaning direct-initialization from the
7778          corresponding member.  */
7779       r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
7780                              non_constant_p);
7781       break;
7782
7783     case CONVERT_EXPR:
7784     case VIEW_CONVERT_EXPR:
7785     case NOP_EXPR:
7786       {
7787         tree oldop = TREE_OPERAND (t, 0);
7788         tree op = oldop;
7789         tree to = TREE_TYPE (t);
7790         op = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7791                                            allow_non_constant, addr,
7792                                            non_constant_p);
7793         if (*non_constant_p)
7794           return t;
7795         if (op == oldop)
7796           /* We didn't fold at the top so we could check for ptr-int
7797              conversion.  */
7798           return fold (t);
7799         r = fold_build1 (TREE_CODE (t), to, op);
7800         /* Conversion of an out-of-range value has implementation-defined
7801            behavior; the language considers it different from arithmetic
7802            overflow, which is undefined.  */
7803         if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
7804           TREE_OVERFLOW (r) = false;
7805       }
7806       break;
7807
7808     case EMPTY_CLASS_EXPR:
7809       /* This is good enough for a function argument that might not get
7810          used, and they can't do anything with it, so just return it.  */
7811       return t;
7812
7813     case LAMBDA_EXPR:
7814     case PREINCREMENT_EXPR:
7815     case POSTINCREMENT_EXPR:
7816     case PREDECREMENT_EXPR:
7817     case POSTDECREMENT_EXPR:
7818     case NEW_EXPR:
7819     case VEC_NEW_EXPR:
7820     case DELETE_EXPR:
7821     case VEC_DELETE_EXPR:
7822     case THROW_EXPR:
7823     case MODIFY_EXPR:
7824     case MODOP_EXPR:
7825       /* GCC internal stuff.  */
7826     case VA_ARG_EXPR:
7827     case OBJ_TYPE_REF:
7828     case WITH_CLEANUP_EXPR:
7829     case STATEMENT_LIST:
7830     case BIND_EXPR:
7831     case NON_DEPENDENT_EXPR:
7832     case BASELINK:
7833     case EXPR_STMT:
7834     case OFFSET_REF:
7835       if (!allow_non_constant)
7836         error_at (EXPR_LOC_OR_HERE (t),
7837                   "expression %qE is not a constant-expression", t);
7838       *non_constant_p = true;
7839       break;
7840
7841     default:
7842       internal_error ("unexpected expression %qE of kind %s", t,
7843                       tree_code_name[TREE_CODE (t)]);
7844       *non_constant_p = true;
7845       break;
7846     }
7847
7848   if (r == error_mark_node)
7849     *non_constant_p = true;
7850
7851   if (*non_constant_p)
7852     return t;
7853   else
7854     return r;
7855 }
7856
7857 static tree
7858 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
7859 {
7860   bool non_constant_p = false;
7861   tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
7862                                          false, &non_constant_p);
7863
7864   verify_constant (r, allow_non_constant, &non_constant_p);
7865
7866   if (TREE_CODE (t) != CONSTRUCTOR
7867       && cp_has_mutable_p (TREE_TYPE (t)))
7868     {
7869       /* We allow a mutable type if the original expression was a
7870          CONSTRUCTOR so that we can do aggregate initialization of
7871          constexpr variables.  */
7872       if (!allow_non_constant)
7873         error ("%qT cannot be the type of a complete constant expression "
7874                "because it has mutable sub-objects", TREE_TYPE (t));
7875       non_constant_p = true;
7876     }
7877
7878   /* Technically we should check this for all subexpressions, but that
7879      runs into problems with our internal representation of pointer
7880      subtraction and the 5.19 rules are still in flux.  */
7881   if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
7882       && ARITHMETIC_TYPE_P (TREE_TYPE (r))
7883       && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
7884     {
7885       if (!allow_non_constant)
7886         error ("conversion from pointer type %qT "
7887                "to arithmetic type %qT in a constant-expression",
7888                TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
7889       non_constant_p = true;
7890     }
7891
7892   if (non_constant_p && !allow_non_constant)
7893     return error_mark_node;
7894   else if (non_constant_p && TREE_CONSTANT (t))
7895     {
7896       /* This isn't actually constant, so unset TREE_CONSTANT.  */
7897       if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
7898         r = copy_node (t);
7899       else
7900         r = build_nop (TREE_TYPE (t), t);
7901       TREE_CONSTANT (r) = false;
7902       return r;
7903     }
7904   else if (non_constant_p || r == t)
7905     return t;
7906   else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
7907     {
7908       if (TREE_CODE (t) == TARGET_EXPR
7909           && TARGET_EXPR_INITIAL (t) == r)
7910         return t;
7911       else
7912         {
7913           r = get_target_expr (r);
7914           TREE_CONSTANT (r) = true;
7915           return r;
7916         }
7917     }
7918   else
7919     return r;
7920 }
7921
7922 /* Returns true if T is a valid subexpression of a constant expression,
7923    even if it isn't itself a constant expression.  */
7924
7925 bool
7926 is_sub_constant_expr (tree t)
7927 {
7928   bool non_constant_p = false;
7929   cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
7930   return !non_constant_p;
7931 }
7932
7933 /* If T represents a constant expression returns its reduced value.
7934    Otherwise return error_mark_node.  If T is dependent, then
7935    return NULL.  */
7936
7937 tree
7938 cxx_constant_value (tree t)
7939 {
7940   return cxx_eval_outermost_constant_expr (t, false);
7941 }
7942
7943 /* If T is a constant expression, returns its reduced value.
7944    Otherwise, if T does not have TREE_CONSTANT set, returns T.
7945    Otherwise, returns a version of T without TREE_CONSTANT.  */
7946
7947 tree
7948 maybe_constant_value (tree t)
7949 {
7950   tree r;
7951
7952   if (type_dependent_expression_p (t)
7953       || type_unknown_p (t)
7954       || BRACE_ENCLOSED_INITIALIZER_P (t)
7955       || !potential_constant_expression (t)
7956       || value_dependent_expression_p (t))
7957     {
7958       if (TREE_OVERFLOW_P (t))
7959         {
7960           t = build_nop (TREE_TYPE (t), t);
7961           TREE_CONSTANT (t) = false;
7962         }
7963       return t;
7964     }
7965
7966   r = cxx_eval_outermost_constant_expr (t, true);
7967 #ifdef ENABLE_CHECKING
7968   /* cp_tree_equal looks through NOPs, so allow them.  */
7969   gcc_assert (r == t
7970               || CONVERT_EXPR_P (t)
7971               || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
7972               || !cp_tree_equal (r, t));
7973 #endif
7974   return r;
7975 }
7976
7977 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
7978    than wrapped in a TARGET_EXPR.  */
7979
7980 tree
7981 maybe_constant_init (tree t)
7982 {
7983   t = maybe_constant_value (t);
7984   if (TREE_CODE (t) == TARGET_EXPR)
7985     {
7986       tree init = TARGET_EXPR_INITIAL (t);
7987       if (TREE_CODE (init) == CONSTRUCTOR
7988           && TREE_CONSTANT (init))
7989         t = init;
7990     }
7991   return t;
7992 }
7993
7994 #if 0
7995 /* FIXME see ADDR_EXPR section in potential_constant_expression_1.  */
7996 /* Return true if the object referred to by REF has automatic or thread
7997    local storage.  */
7998
7999 enum { ck_ok, ck_bad, ck_unknown };
8000 static int
8001 check_automatic_or_tls (tree ref)
8002 {
8003   enum machine_mode mode;
8004   HOST_WIDE_INT bitsize, bitpos;
8005   tree offset;
8006   int volatilep = 0, unsignedp = 0;
8007   tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
8008                                    &mode, &unsignedp, &volatilep, false);
8009   duration_kind dk;
8010
8011   /* If there isn't a decl in the middle, we don't know the linkage here,
8012      and this isn't a constant expression anyway.  */
8013   if (!DECL_P (decl))
8014     return ck_unknown;
8015   dk = decl_storage_duration (decl);
8016   return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
8017 }
8018 #endif
8019
8020 /* Return true if T denotes a potentially constant expression.  Issue
8021    diagnostic as appropriate under control of FLAGS.  If WANT_RVAL is true,
8022    an lvalue-rvalue conversion is implied.
8023
8024    C++0x [expr.const] used to say
8025
8026    6 An expression is a potential constant expression if it is
8027      a constant expression where all occurences of function
8028      parameters are replaced by arbitrary constant expressions
8029      of the appropriate type.
8030
8031    2  A conditional expression is a constant expression unless it
8032       involves one of the following as a potentially evaluated
8033       subexpression (3.2), but subexpressions of logical AND (5.14),
8034       logical OR (5.15), and conditional (5.16) operations that are
8035       not evaluated are not considered.   */
8036
8037 static bool
8038 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
8039 {
8040   enum { any = false, rval = true };
8041   int i;
8042   tree tmp;
8043
8044   /* C++98 has different rules for the form of a constant expression that
8045      are enforced in the parser, so we can assume that anything that gets
8046      this far is suitable.  */
8047   if (cxx_dialect < cxx0x)
8048     return true;
8049
8050   if (t == error_mark_node)
8051     return false;
8052   if (t == NULL_TREE)
8053     return true;
8054   if (TREE_THIS_VOLATILE (t))
8055     {
8056       if (flags & tf_error)
8057         error ("expression %qE has side-effects", t);
8058       return false;
8059     }
8060   if (CONSTANT_CLASS_P (t))
8061     {
8062       if (TREE_OVERFLOW (t))
8063         {
8064           if (flags & tf_error)
8065             {
8066               permerror (EXPR_LOC_OR_HERE (t),
8067                          "overflow in constant expression");
8068               if (flag_permissive)
8069                 return true;
8070             }
8071           return false;
8072         }
8073       return true;
8074     }
8075
8076   switch (TREE_CODE (t))
8077     {
8078     case FUNCTION_DECL:
8079     case BASELINK:
8080     case TEMPLATE_DECL:
8081     case OVERLOAD:
8082     case TEMPLATE_ID_EXPR:
8083     case LABEL_DECL:
8084     case CONST_DECL:
8085     case SIZEOF_EXPR:
8086     case ALIGNOF_EXPR:
8087     case OFFSETOF_EXPR:
8088     case NOEXCEPT_EXPR:
8089     case TEMPLATE_PARM_INDEX:
8090     case TRAIT_EXPR:
8091     case IDENTIFIER_NODE:
8092     case USERDEF_LITERAL:
8093       /* We can see a FIELD_DECL in a pointer-to-member expression.  */
8094     case FIELD_DECL:
8095     case PARM_DECL:
8096     case USING_DECL:
8097       return true;
8098
8099     case AGGR_INIT_EXPR:
8100     case CALL_EXPR:
8101       /* -- an invocation of a function other than a constexpr function
8102             or a constexpr constructor.  */
8103       {
8104         tree fun = get_function_named_in_call (t);
8105         const int nargs = call_expr_nargs (t);
8106         i = 0;
8107
8108         if (is_overloaded_fn (fun))
8109           {
8110             if (TREE_CODE (fun) == FUNCTION_DECL)
8111               {
8112                 if (builtin_valid_in_constant_expr_p (fun))
8113                   return true;
8114                 if (!DECL_DECLARED_CONSTEXPR_P (fun)
8115                     /* Allow any built-in function; if the expansion
8116                        isn't constant, we'll deal with that then.  */
8117                     && !is_builtin_fn (fun))
8118                   {
8119                     if (flags & tf_error)
8120                       {
8121                         error_at (EXPR_LOC_OR_HERE (t),
8122                                   "call to non-constexpr function %qD", fun);
8123                         explain_invalid_constexpr_fn (fun);
8124                       }
8125                     return false;
8126                   }
8127                 /* A call to a non-static member function takes the address
8128                    of the object as the first argument.  But in a constant
8129                    expression the address will be folded away, so look
8130                    through it now.  */
8131                 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
8132                     && !DECL_CONSTRUCTOR_P (fun))
8133                   {
8134                     tree x = get_nth_callarg (t, 0);
8135                     if (is_this_parameter (x))
8136                       {
8137                         if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8138                           {
8139                             if (flags & tf_error)
8140                               sorry ("calling a member function of the "
8141                                      "object being constructed in a constant "
8142                                      "expression");
8143                             return false;
8144                           }
8145                         /* Otherwise OK.  */;
8146                       }
8147                     else if (!potential_constant_expression_1 (x, rval, flags))
8148                       return false;
8149                     i = 1;
8150                   }
8151               }
8152             else
8153               fun = get_first_fn (fun);
8154             /* Skip initial arguments to base constructors.  */
8155             if (DECL_BASE_CONSTRUCTOR_P (fun))
8156               i = num_artificial_parms_for (fun);
8157             fun = DECL_ORIGIN (fun);
8158           }
8159         else
8160           {
8161             if (potential_constant_expression_1 (fun, rval, flags))
8162               /* Might end up being a constant function pointer.  */;
8163             else
8164               return false;
8165           }
8166         for (; i < nargs; ++i)
8167           {
8168             tree x = get_nth_callarg (t, i);
8169             if (!potential_constant_expression_1 (x, rval, flags))
8170               return false;
8171           }
8172         return true;
8173       }
8174
8175     case NON_LVALUE_EXPR:
8176       /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
8177             -- an lvalue of integral type that refers to a non-volatile
8178                const variable or static data member initialized with
8179                constant expressions, or
8180
8181             -- an lvalue of literal type that refers to non-volatile
8182                object defined with constexpr, or that refers to a
8183                sub-object of such an object;  */
8184       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8185
8186     case VAR_DECL:
8187       if (want_rval && !decl_constant_var_p (t)
8188           && !dependent_type_p (TREE_TYPE (t)))
8189         {
8190           if (flags & tf_error)
8191             non_const_var_error (t);
8192           return false;
8193         }
8194       return true;
8195
8196     case NOP_EXPR:
8197     case CONVERT_EXPR:
8198     case VIEW_CONVERT_EXPR:
8199       /* -- a reinterpret_cast.  FIXME not implemented, and this rule
8200          may change to something more specific to type-punning (DR 1312).  */
8201       {
8202         tree from = TREE_OPERAND (t, 0);
8203         return (potential_constant_expression_1
8204                 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
8205       }
8206
8207     case ADDR_EXPR:
8208       /* -- a unary operator & that is applied to an lvalue that
8209             designates an object with thread or automatic storage
8210             duration;  */
8211       t = TREE_OPERAND (t, 0);
8212 #if 0
8213       /* FIXME adjust when issue 1197 is fully resolved.  For now don't do
8214          any checking here, as we might dereference the pointer later.  If
8215          we remove this code, also remove check_automatic_or_tls.  */
8216       i = check_automatic_or_tls (t);
8217       if (i == ck_ok)
8218         return true;
8219       if (i == ck_bad)
8220         {
8221           if (flags & tf_error)
8222             error ("address-of an object %qE with thread local or "
8223                    "automatic storage is not a constant expression", t);
8224           return false;
8225         }
8226 #endif
8227       return potential_constant_expression_1 (t, any, flags);
8228
8229     case COMPONENT_REF:
8230     case BIT_FIELD_REF:
8231     case ARROW_EXPR:
8232     case OFFSET_REF:
8233       /* -- a class member access unless its postfix-expression is
8234             of literal type or of pointer to literal type.  */
8235       /* This test would be redundant, as it follows from the
8236          postfix-expression being a potential constant expression.  */
8237       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8238                                               want_rval, flags);
8239
8240     case EXPR_PACK_EXPANSION:
8241       return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
8242                                               want_rval, flags);
8243
8244     case INDIRECT_REF:
8245       {
8246         tree x = TREE_OPERAND (t, 0);
8247         STRIP_NOPS (x);
8248         if (is_this_parameter (x))
8249           {
8250             if (want_rval && DECL_CONTEXT (x)
8251                 && DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8252               {
8253                 if (flags & tf_error)
8254                   sorry ("use of the value of the object being constructed "
8255                          "in a constant expression");
8256                 return false;
8257               }
8258             return true;
8259           }
8260         return potential_constant_expression_1 (x, rval, flags);
8261       }
8262
8263     case LAMBDA_EXPR:
8264     case DYNAMIC_CAST_EXPR:
8265     case PSEUDO_DTOR_EXPR:
8266     case PREINCREMENT_EXPR:
8267     case POSTINCREMENT_EXPR:
8268     case PREDECREMENT_EXPR:
8269     case POSTDECREMENT_EXPR:
8270     case NEW_EXPR:
8271     case VEC_NEW_EXPR:
8272     case DELETE_EXPR:
8273     case VEC_DELETE_EXPR:
8274     case THROW_EXPR:
8275     case MODIFY_EXPR:
8276     case MODOP_EXPR:
8277       /* GCC internal stuff.  */
8278     case VA_ARG_EXPR:
8279     case OBJ_TYPE_REF:
8280     case WITH_CLEANUP_EXPR:
8281     case CLEANUP_POINT_EXPR:
8282     case MUST_NOT_THROW_EXPR:
8283     case TRY_CATCH_EXPR:
8284     case STATEMENT_LIST:
8285       /* Don't bother trying to define a subset of statement-expressions to
8286          be constant-expressions, at least for now.  */
8287     case STMT_EXPR:
8288     case EXPR_STMT:
8289     case BIND_EXPR:
8290     case TRANSACTION_EXPR:
8291     case IF_STMT:
8292     case DO_STMT:
8293     case FOR_STMT:
8294     case WHILE_STMT:
8295       if (flags & tf_error)
8296         error ("expression %qE is not a constant-expression", t);
8297       return false;
8298
8299     case TYPEID_EXPR:
8300       /* -- a typeid expression whose operand is of polymorphic
8301             class type;  */
8302       {
8303         tree e = TREE_OPERAND (t, 0);
8304         if (!TYPE_P (e) && !type_dependent_expression_p (e)
8305             && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
8306           {
8307             if (flags & tf_error)
8308               error ("typeid-expression is not a constant expression "
8309                      "because %qE is of polymorphic type", e);
8310             return false;
8311           }
8312         return true;
8313       }
8314
8315     case MINUS_EXPR:
8316       /* -- a subtraction where both operands are pointers.   */
8317       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8318           && TYPE_PTR_P (TREE_OPERAND (t, 1)))
8319         {
8320           if (flags & tf_error)
8321             error ("difference of two pointer expressions is not "
8322                    "a constant expression");
8323           return false;
8324         }
8325       want_rval = true;
8326       goto binary;
8327
8328     case LT_EXPR:
8329     case LE_EXPR:
8330     case GT_EXPR:
8331     case GE_EXPR:
8332     case EQ_EXPR:
8333     case NE_EXPR:
8334       /* -- a relational or equality operator where at least
8335             one of the operands is a pointer.  */
8336       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8337           || TYPE_PTR_P (TREE_OPERAND (t, 1)))
8338         {
8339           if (flags & tf_error)
8340             error ("pointer comparison expression is not a "
8341                    "constant expression");
8342           return false;
8343         }
8344       want_rval = true;
8345       goto binary;
8346
8347     case BIT_NOT_EXPR:
8348       /* A destructor.  */
8349       if (TYPE_P (TREE_OPERAND (t, 0)))
8350         return true;
8351       /* else fall through.  */
8352
8353     case REALPART_EXPR:
8354     case IMAGPART_EXPR:
8355     case CONJ_EXPR:
8356     case SAVE_EXPR:
8357     case FIX_TRUNC_EXPR:
8358     case FLOAT_EXPR:
8359     case NEGATE_EXPR:
8360     case ABS_EXPR:
8361     case TRUTH_NOT_EXPR:
8362     case FIXED_CONVERT_EXPR:
8363     case UNARY_PLUS_EXPR:
8364       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
8365                                               flags);
8366
8367     case CAST_EXPR:
8368     case CONST_CAST_EXPR:
8369     case STATIC_CAST_EXPR:
8370     case REINTERPRET_CAST_EXPR:
8371     case IMPLICIT_CONV_EXPR:
8372       return (potential_constant_expression_1
8373               (TREE_OPERAND (t, 0),
8374                TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
8375
8376     case PAREN_EXPR:
8377     case NON_DEPENDENT_EXPR:
8378       /* For convenience.  */
8379     case RETURN_EXPR:
8380       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8381                                               want_rval, flags);
8382
8383     case SCOPE_REF:
8384       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8385                                               want_rval, flags);
8386
8387     case TARGET_EXPR:
8388       if (!literal_type_p (TREE_TYPE (t)))
8389         {
8390           if (flags & tf_error)
8391             {
8392               error ("temporary of non-literal type %qT in a "
8393                      "constant expression", TREE_TYPE (t));
8394               explain_non_literal_class (TREE_TYPE (t));
8395             }
8396           return false;
8397         }
8398     case INIT_EXPR:
8399       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8400                                               rval, flags);
8401
8402     case CONSTRUCTOR:
8403       {
8404         VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
8405         constructor_elt *ce;
8406         for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
8407           if (!potential_constant_expression_1 (ce->value, want_rval, flags))
8408             return false;
8409         return true;
8410       }
8411
8412     case TREE_LIST:
8413       {
8414         gcc_assert (TREE_PURPOSE (t) == NULL_TREE
8415                     || DECL_P (TREE_PURPOSE (t)));
8416         if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
8417                                               flags))
8418           return false;
8419         if (TREE_CHAIN (t) == NULL_TREE)
8420           return true;
8421         return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
8422                                                 flags);
8423       }
8424
8425     case TRUNC_DIV_EXPR:
8426     case CEIL_DIV_EXPR:
8427     case FLOOR_DIV_EXPR:
8428     case ROUND_DIV_EXPR:
8429     case TRUNC_MOD_EXPR:
8430     case CEIL_MOD_EXPR:
8431     case ROUND_MOD_EXPR:
8432       {
8433         tree denom = TREE_OPERAND (t, 1);
8434         /* We can't call maybe_constant_value on an expression
8435            that hasn't been through fold_non_dependent_expr yet.  */
8436         if (!processing_template_decl)
8437           denom = maybe_constant_value (denom);
8438         if (integer_zerop (denom))
8439           {
8440             if (flags & tf_error)
8441               error ("division by zero is not a constant-expression");
8442             return false;
8443           }
8444         else
8445           {
8446             want_rval = true;
8447             goto binary;
8448           }
8449       }
8450
8451     case COMPOUND_EXPR:
8452       {
8453         /* check_return_expr sometimes wraps a TARGET_EXPR in a
8454            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
8455            introduced by build_call_a.  */
8456         tree op0 = TREE_OPERAND (t, 0);
8457         tree op1 = TREE_OPERAND (t, 1);
8458         STRIP_NOPS (op1);
8459         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
8460             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
8461           return potential_constant_expression_1 (op0, want_rval, flags);
8462         else
8463           goto binary;
8464       }
8465
8466       /* If the first operand is the non-short-circuit constant, look at
8467          the second operand; otherwise we only care about the first one for
8468          potentiality.  */
8469     case TRUTH_AND_EXPR:
8470     case TRUTH_ANDIF_EXPR:
8471       tmp = boolean_true_node;
8472       goto truth;
8473     case TRUTH_OR_EXPR:
8474     case TRUTH_ORIF_EXPR:
8475       tmp = boolean_false_node;
8476     truth:
8477       if (TREE_OPERAND (t, 0) == tmp)
8478         return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
8479       else
8480         return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8481
8482     case PLUS_EXPR:
8483     case MULT_EXPR:
8484     case POINTER_PLUS_EXPR:
8485     case RDIV_EXPR:
8486     case EXACT_DIV_EXPR:
8487     case MIN_EXPR:
8488     case MAX_EXPR:
8489     case LSHIFT_EXPR:
8490     case RSHIFT_EXPR:
8491     case LROTATE_EXPR:
8492     case RROTATE_EXPR:
8493     case BIT_IOR_EXPR:
8494     case BIT_XOR_EXPR:
8495     case BIT_AND_EXPR:
8496     case TRUTH_XOR_EXPR:
8497     case UNORDERED_EXPR:
8498     case ORDERED_EXPR:
8499     case UNLT_EXPR:
8500     case UNLE_EXPR:
8501     case UNGT_EXPR:
8502     case UNGE_EXPR:
8503     case UNEQ_EXPR:
8504     case LTGT_EXPR:
8505     case RANGE_EXPR:
8506     case COMPLEX_EXPR:
8507       want_rval = true;
8508       /* Fall through.  */
8509     case ARRAY_REF:
8510     case ARRAY_RANGE_REF:
8511     case MEMBER_REF:
8512     case DOTSTAR_EXPR:
8513     binary:
8514       for (i = 0; i < 2; ++i)
8515         if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8516                                               want_rval, flags))
8517           return false;
8518       return true;
8519
8520     case FMA_EXPR:
8521      for (i = 0; i < 3; ++i)
8522       if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8523                                             true, flags))
8524         return false;
8525      return true;
8526
8527     case COND_EXPR:
8528     case VEC_COND_EXPR:
8529       /* If the condition is a known constant, we know which of the legs we
8530          care about; otherwise we only require that the condition and
8531          either of the legs be potentially constant.  */
8532       tmp = TREE_OPERAND (t, 0);
8533       if (!potential_constant_expression_1 (tmp, rval, flags))
8534         return false;
8535       else if (integer_zerop (tmp))
8536         return potential_constant_expression_1 (TREE_OPERAND (t, 2),
8537                                                 want_rval, flags);
8538       else if (TREE_CODE (tmp) == INTEGER_CST)
8539         return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8540                                                 want_rval, flags);
8541       for (i = 1; i < 3; ++i)
8542         if (potential_constant_expression_1 (TREE_OPERAND (t, i),
8543                                              want_rval, tf_none))
8544           return true;
8545       if (flags & tf_error)
8546         error ("expression %qE is not a constant-expression", t);
8547       return false;
8548
8549     case VEC_INIT_EXPR:
8550       if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
8551         return true;
8552       if (flags & tf_error)
8553         {
8554           error ("non-constant array initialization");
8555           diagnose_non_constexpr_vec_init (t);
8556         }
8557       return false;
8558
8559     default:
8560       sorry ("unexpected AST of kind %s", tree_code_name[TREE_CODE (t)]);
8561       gcc_unreachable();
8562       return false;
8563     }
8564 }
8565
8566 /* The main entry point to the above.  */
8567
8568 bool
8569 potential_constant_expression (tree t)
8570 {
8571   return potential_constant_expression_1 (t, false, tf_none);
8572 }
8573
8574 /* As above, but require a constant rvalue.  */
8575
8576 bool
8577 potential_rvalue_constant_expression (tree t)
8578 {
8579   return potential_constant_expression_1 (t, true, tf_none);
8580 }
8581
8582 /* Like above, but complain about non-constant expressions.  */
8583
8584 bool
8585 require_potential_constant_expression (tree t)
8586 {
8587   return potential_constant_expression_1 (t, false, tf_warning_or_error);
8588 }
8589
8590 /* Cross product of the above.  */
8591
8592 bool
8593 require_potential_rvalue_constant_expression (tree t)
8594 {
8595   return potential_constant_expression_1 (t, true, tf_warning_or_error);
8596 }
8597 \f
8598 /* Constructor for a lambda expression.  */
8599
8600 tree
8601 build_lambda_expr (void)
8602 {
8603   tree lambda = make_node (LAMBDA_EXPR);
8604   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
8605   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
8606   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
8607   LAMBDA_EXPR_PENDING_PROXIES      (lambda) = NULL;
8608   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
8609   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
8610   return lambda;
8611 }
8612
8613 /* Create the closure object for a LAMBDA_EXPR.  */
8614
8615 tree
8616 build_lambda_object (tree lambda_expr)
8617 {
8618   /* Build aggregate constructor call.
8619      - cp_parser_braced_list
8620      - cp_parser_functional_cast  */
8621   VEC(constructor_elt,gc) *elts = NULL;
8622   tree node, expr, type;
8623   location_t saved_loc;
8624
8625   if (processing_template_decl)
8626     return lambda_expr;
8627
8628   /* Make sure any error messages refer to the lambda-introducer.  */
8629   saved_loc = input_location;
8630   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
8631
8632   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8633        node;
8634        node = TREE_CHAIN (node))
8635     {
8636       tree field = TREE_PURPOSE (node);
8637       tree val = TREE_VALUE (node);
8638
8639       if (field == error_mark_node)
8640         {
8641           expr = error_mark_node;
8642           goto out;
8643         }
8644
8645       if (DECL_P (val))
8646         mark_used (val);
8647
8648       /* Mere mortals can't copy arrays with aggregate initialization, so
8649          do some magic to make it work here.  */
8650       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
8651         val = build_array_copy (val);
8652       else if (DECL_NORMAL_CAPTURE_P (field)
8653                && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
8654         {
8655           /* "the entities that are captured by copy are used to
8656              direct-initialize each corresponding non-static data
8657              member of the resulting closure object."
8658
8659              There's normally no way to express direct-initialization
8660              from an element of a CONSTRUCTOR, so we build up a special
8661              TARGET_EXPR to bypass the usual copy-initialization.  */
8662           val = force_rvalue (val, tf_warning_or_error);
8663           if (TREE_CODE (val) == TARGET_EXPR)
8664             TARGET_EXPR_DIRECT_INIT_P (val) = true;
8665         }
8666
8667       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
8668     }
8669
8670   expr = build_constructor (init_list_type_node, elts);
8671   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
8672
8673   /* N2927: "[The closure] class type is not an aggregate."
8674      But we briefly treat it as an aggregate to make this simpler.  */
8675   type = LAMBDA_EXPR_CLOSURE (lambda_expr);
8676   CLASSTYPE_NON_AGGREGATE (type) = 0;
8677   expr = finish_compound_literal (type, expr, tf_warning_or_error);
8678   CLASSTYPE_NON_AGGREGATE (type) = 1;
8679
8680  out:
8681   input_location = saved_loc;
8682   return expr;
8683 }
8684
8685 /* Return an initialized RECORD_TYPE for LAMBDA.
8686    LAMBDA must have its explicit captures already.  */
8687
8688 tree
8689 begin_lambda_type (tree lambda)
8690 {
8691   tree type;
8692
8693   {
8694     /* Unique name.  This is just like an unnamed class, but we cannot use
8695        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
8696     tree name;
8697     name = make_lambda_name ();
8698
8699     /* Create the new RECORD_TYPE for this lambda.  */
8700     type = xref_tag (/*tag_code=*/record_type,
8701                      name,
8702                      /*scope=*/ts_within_enclosing_non_class,
8703                      /*template_header_p=*/false);
8704   }
8705
8706   /* Designate it as a struct so that we can use aggregate initialization.  */
8707   CLASSTYPE_DECLARED_CLASS (type) = false;
8708
8709   /* Clear base types.  */
8710   xref_basetypes (type, /*bases=*/NULL_TREE);
8711
8712   /* Start the class.  */
8713   type = begin_class_definition (type);
8714   if (type == error_mark_node)
8715     return error_mark_node;
8716
8717   /* Cross-reference the expression and the type.  */
8718   LAMBDA_EXPR_CLOSURE (lambda) = type;
8719   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
8720
8721   return type;
8722 }
8723
8724 /* Returns the type to use for the return type of the operator() of a
8725    closure class.  */
8726
8727 tree
8728 lambda_return_type (tree expr)
8729 {
8730   tree type;
8731   if (type_unknown_p (expr)
8732       || BRACE_ENCLOSED_INITIALIZER_P (expr))
8733     {
8734       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
8735       return void_type_node;
8736     }
8737   if (type_dependent_expression_p (expr))
8738     type = dependent_lambda_return_type_node;
8739   else
8740     type = cv_unqualified (type_decays_to (unlowered_expr_type (expr)));
8741   return type;
8742 }
8743
8744 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
8745    closure type.  */
8746
8747 tree
8748 lambda_function (tree lambda)
8749 {
8750   tree type;
8751   if (TREE_CODE (lambda) == LAMBDA_EXPR)
8752     type = LAMBDA_EXPR_CLOSURE (lambda);
8753   else
8754     type = lambda;
8755   gcc_assert (LAMBDA_TYPE_P (type));
8756   /* Don't let debug_tree cause instantiation.  */
8757   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
8758       && !COMPLETE_OR_OPEN_TYPE_P (type))
8759     return NULL_TREE;
8760   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
8761                           /*protect=*/0, /*want_type=*/false,
8762                           tf_warning_or_error);
8763   if (lambda)
8764     lambda = BASELINK_FUNCTIONS (lambda);
8765   return lambda;
8766 }
8767
8768 /* Returns the type to use for the FIELD_DECL corresponding to the
8769    capture of EXPR.
8770    The caller should add REFERENCE_TYPE for capture by reference.  */
8771
8772 tree
8773 lambda_capture_field_type (tree expr)
8774 {
8775   tree type;
8776   if (type_dependent_expression_p (expr))
8777     {
8778       type = cxx_make_type (DECLTYPE_TYPE);
8779       DECLTYPE_TYPE_EXPR (type) = expr;
8780       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
8781       SET_TYPE_STRUCTURAL_EQUALITY (type);
8782     }
8783   else
8784     type = non_reference (unlowered_expr_type (expr));
8785   return type;
8786 }
8787
8788 /* Recompute the return type for LAMBDA with body of the form:
8789      { return EXPR ; }  */
8790
8791 void
8792 apply_lambda_return_type (tree lambda, tree return_type)
8793 {
8794   tree fco = lambda_function (lambda);
8795   tree result;
8796
8797   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
8798
8799   if (return_type == error_mark_node)
8800     return;
8801   if (TREE_TYPE (TREE_TYPE (fco)) == return_type)
8802     return;
8803
8804   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
8805      TREE_TYPE (METHOD_TYPE)   == return-type  */
8806   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
8807
8808   result = DECL_RESULT (fco);
8809   if (result == NULL_TREE)
8810     return;
8811
8812   /* We already have a DECL_RESULT from start_preparsed_function.
8813      Now we need to redo the work it and allocate_struct_function
8814      did to reflect the new type.  */
8815   gcc_assert (current_function_decl == fco);
8816   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
8817                        TYPE_MAIN_VARIANT (return_type));
8818   DECL_ARTIFICIAL (result) = 1;
8819   DECL_IGNORED_P (result) = 1;
8820   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
8821                                result);
8822
8823   DECL_RESULT (fco) = result;
8824
8825   if (!processing_template_decl && aggregate_value_p (result, fco))
8826     {
8827 #ifdef PCC_STATIC_STRUCT_RETURN
8828       cfun->returns_pcc_struct = 1;
8829 #endif
8830       cfun->returns_struct = 1;
8831     }
8832
8833 }
8834
8835 /* DECL is a local variable or parameter from the surrounding scope of a
8836    lambda-expression.  Returns the decltype for a use of the capture field
8837    for DECL even if it hasn't been captured yet.  */
8838
8839 static tree
8840 capture_decltype (tree decl)
8841 {
8842   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8843   /* FIXME do lookup instead of list walk? */
8844   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
8845   tree type;
8846
8847   if (cap)
8848     type = TREE_TYPE (TREE_PURPOSE (cap));
8849   else
8850     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
8851       {
8852       case CPLD_NONE:
8853         error ("%qD is not captured", decl);
8854         return error_mark_node;
8855
8856       case CPLD_COPY:
8857         type = TREE_TYPE (decl);
8858         if (TREE_CODE (type) == REFERENCE_TYPE
8859             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
8860           type = TREE_TYPE (type);
8861         break;
8862
8863       case CPLD_REFERENCE:
8864         type = TREE_TYPE (decl);
8865         if (TREE_CODE (type) != REFERENCE_TYPE)
8866           type = build_reference_type (TREE_TYPE (decl));
8867         break;
8868
8869       default:
8870         gcc_unreachable ();
8871       }
8872
8873   if (TREE_CODE (type) != REFERENCE_TYPE)
8874     {
8875       if (!LAMBDA_EXPR_MUTABLE_P (lam))
8876         type = cp_build_qualified_type (type, (cp_type_quals (type)
8877                                                |TYPE_QUAL_CONST));
8878       type = build_reference_type (type);
8879     }
8880   return type;
8881 }
8882
8883 /* Returns true iff DECL is a lambda capture proxy variable created by
8884    build_capture_proxy.  */
8885
8886 bool
8887 is_capture_proxy (tree decl)
8888 {
8889   return (TREE_CODE (decl) == VAR_DECL
8890           && DECL_HAS_VALUE_EXPR_P (decl)
8891           && !DECL_ANON_UNION_VAR_P (decl)
8892           && LAMBDA_FUNCTION_P (DECL_CONTEXT (decl)));
8893 }
8894
8895 /* Returns true iff DECL is a capture proxy for a normal capture
8896    (i.e. without explicit initializer).  */
8897
8898 bool
8899 is_normal_capture_proxy (tree decl)
8900 {
8901   tree val;
8902
8903   if (!is_capture_proxy (decl))
8904     /* It's not a capture proxy.  */
8905     return false;
8906
8907   /* It is a capture proxy, is it a normal capture?  */
8908   val = DECL_VALUE_EXPR (decl);
8909   gcc_assert (TREE_CODE (val) == COMPONENT_REF);
8910   val = TREE_OPERAND (val, 1);
8911   return DECL_NORMAL_CAPTURE_P (val);
8912 }
8913
8914 /* VAR is a capture proxy created by build_capture_proxy; add it to the
8915    current function, which is the operator() for the appropriate lambda.  */
8916
8917 void
8918 insert_capture_proxy (tree var)
8919 {
8920   cp_binding_level *b;
8921   int skip;
8922   tree stmt_list;
8923
8924   /* Put the capture proxy in the extra body block so that it won't clash
8925      with a later local variable.  */
8926   b = current_binding_level;
8927   for (skip = 0; ; ++skip)
8928     {
8929       cp_binding_level *n = b->level_chain;
8930       if (n->kind == sk_function_parms)
8931         break;
8932       b = n;
8933     }
8934   pushdecl_with_scope (var, b, false);
8935
8936   /* And put a DECL_EXPR in the STATEMENT_LIST for the same block.  */
8937   var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
8938   stmt_list = VEC_index (tree, stmt_list_stack,
8939                          VEC_length (tree, stmt_list_stack) - 1 - skip);
8940   gcc_assert (stmt_list);
8941   append_to_statement_list_force (var, &stmt_list);
8942 }
8943
8944 /* We've just finished processing a lambda; if the containing scope is also
8945    a lambda, insert any capture proxies that were created while processing
8946    the nested lambda.  */
8947
8948 void
8949 insert_pending_capture_proxies (void)
8950 {
8951   tree lam;
8952   VEC(tree,gc) *proxies;
8953   unsigned i;
8954
8955   if (!current_function_decl || !LAMBDA_FUNCTION_P (current_function_decl))
8956     return;
8957
8958   lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8959   proxies = LAMBDA_EXPR_PENDING_PROXIES (lam);
8960   for (i = 0; i < VEC_length (tree, proxies); ++i)
8961     {
8962       tree var = VEC_index (tree, proxies, i);
8963       insert_capture_proxy (var);
8964     }
8965   release_tree_vector (LAMBDA_EXPR_PENDING_PROXIES (lam));
8966   LAMBDA_EXPR_PENDING_PROXIES (lam) = NULL;
8967 }
8968
8969 /* Given REF, a COMPONENT_REF designating a field in the lambda closure,
8970    return the type we want the proxy to have: the type of the field itself,
8971    with added const-qualification if the lambda isn't mutable and the
8972    capture is by value.  */
8973
8974 tree
8975 lambda_proxy_type (tree ref)
8976 {
8977   tree type;
8978   if (REFERENCE_REF_P (ref))
8979     ref = TREE_OPERAND (ref, 0);
8980   type = TREE_TYPE (ref);
8981   if (!dependent_type_p (type))
8982     return type;
8983   type = cxx_make_type (DECLTYPE_TYPE);
8984   DECLTYPE_TYPE_EXPR (type) = ref;
8985   DECLTYPE_FOR_LAMBDA_PROXY (type) = true;
8986   SET_TYPE_STRUCTURAL_EQUALITY (type);
8987   return type;
8988 }
8989
8990 /* MEMBER is a capture field in a lambda closure class.  Now that we're
8991    inside the operator(), build a placeholder var for future lookups and
8992    debugging.  */
8993
8994 tree
8995 build_capture_proxy (tree member)
8996 {
8997   tree var, object, fn, closure, name, lam, type;
8998
8999   closure = DECL_CONTEXT (member);
9000   fn = lambda_function (closure);
9001   lam = CLASSTYPE_LAMBDA_EXPR (closure);
9002
9003   /* The proxy variable forwards to the capture field.  */
9004   object = build_fold_indirect_ref (DECL_ARGUMENTS (fn));
9005   object = finish_non_static_data_member (member, object, NULL_TREE);
9006   if (REFERENCE_REF_P (object))
9007     object = TREE_OPERAND (object, 0);
9008
9009   /* Remove the __ inserted by add_capture.  */
9010   name = get_identifier (IDENTIFIER_POINTER (DECL_NAME (member)) + 2);
9011
9012   type = lambda_proxy_type (object);
9013   var = build_decl (input_location, VAR_DECL, name, type);
9014   SET_DECL_VALUE_EXPR (var, object);
9015   DECL_HAS_VALUE_EXPR_P (var) = 1;
9016   DECL_ARTIFICIAL (var) = 1;
9017   TREE_USED (var) = 1;
9018   DECL_CONTEXT (var) = fn;
9019
9020   if (name == this_identifier)
9021     {
9022       gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (lam) == member);
9023       LAMBDA_EXPR_THIS_CAPTURE (lam) = var;
9024     }
9025
9026   if (fn == current_function_decl)
9027     insert_capture_proxy (var);
9028   else
9029     VEC_safe_push (tree, gc, LAMBDA_EXPR_PENDING_PROXIES (lam), var);
9030
9031   return var;
9032 }
9033
9034 /* From an ID and INITIALIZER, create a capture (by reference if
9035    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
9036    and return it.  */
9037
9038 tree
9039 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
9040              bool explicit_init_p)
9041 {
9042   char *buf;
9043   tree type, member, name;
9044
9045   type = lambda_capture_field_type (initializer);
9046   if (by_reference_p)
9047     {
9048       type = build_reference_type (type);
9049       if (!real_lvalue_p (initializer))
9050         error ("cannot capture %qE by reference", initializer);
9051     }
9052   else
9053     /* Capture by copy requires a complete type.  */
9054     type = complete_type (type);
9055
9056   /* Add __ to the beginning of the field name so that user code
9057      won't find the field with name lookup.  We can't just leave the name
9058      unset because template instantiation uses the name to find
9059      instantiated fields.  */
9060   buf = (char *) alloca (IDENTIFIER_LENGTH (id) + 3);
9061   buf[1] = buf[0] = '_';
9062   memcpy (buf + 2, IDENTIFIER_POINTER (id),
9063           IDENTIFIER_LENGTH (id) + 1);
9064   name = get_identifier (buf);
9065
9066   /* If TREE_TYPE isn't set, we're still in the introducer, so check
9067      for duplicates.  */
9068   if (!LAMBDA_EXPR_CLOSURE (lambda))
9069     {
9070       if (IDENTIFIER_MARKED (name))
9071         {
9072           pedwarn (input_location, 0,
9073                    "already captured %qD in lambda expression", id);
9074           return NULL_TREE;
9075         }
9076       IDENTIFIER_MARKED (name) = true;
9077     }
9078
9079   /* Make member variable.  */
9080   member = build_lang_decl (FIELD_DECL, name, type);
9081
9082   if (!explicit_init_p)
9083     /* Normal captures are invisible to name lookup but uses are replaced
9084        with references to the capture field; we implement this by only
9085        really making them invisible in unevaluated context; see
9086        qualify_lookup.  For now, let's make explicitly initialized captures
9087        always visible.  */
9088     DECL_NORMAL_CAPTURE_P (member) = true;
9089
9090   if (id == this_identifier)
9091     LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
9092
9093   /* Add it to the appropriate closure class if we've started it.  */
9094   if (current_class_type
9095       && current_class_type == LAMBDA_EXPR_CLOSURE (lambda))
9096     finish_member_declaration (member);
9097
9098   LAMBDA_EXPR_CAPTURE_LIST (lambda)
9099     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
9100
9101   if (LAMBDA_EXPR_CLOSURE (lambda))
9102     return build_capture_proxy (member);
9103   /* For explicit captures we haven't started the function yet, so we wait
9104      and build the proxy from cp_parser_lambda_body.  */
9105   return NULL_TREE;
9106 }
9107
9108 /* Register all the capture members on the list CAPTURES, which is the
9109    LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
9110
9111 void
9112 register_capture_members (tree captures)
9113 {
9114   if (captures == NULL_TREE)
9115     return;
9116
9117   register_capture_members (TREE_CHAIN (captures));
9118   /* We set this in add_capture to avoid duplicates.  */
9119   IDENTIFIER_MARKED (DECL_NAME (TREE_PURPOSE (captures))) = false;
9120   finish_member_declaration (TREE_PURPOSE (captures));
9121 }
9122
9123 /* Similar to add_capture, except this works on a stack of nested lambdas.
9124    BY_REFERENCE_P in this case is derived from the default capture mode.
9125    Returns the capture for the lambda at the bottom of the stack.  */
9126
9127 tree
9128 add_default_capture (tree lambda_stack, tree id, tree initializer)
9129 {
9130   bool this_capture_p = (id == this_identifier);
9131
9132   tree var = NULL_TREE;
9133
9134   tree saved_class_type = current_class_type;
9135
9136   tree node;
9137
9138   for (node = lambda_stack;
9139        node;
9140        node = TREE_CHAIN (node))
9141     {
9142       tree lambda = TREE_VALUE (node);
9143
9144       current_class_type = LAMBDA_EXPR_CLOSURE (lambda);
9145       var = add_capture (lambda,
9146                             id,
9147                             initializer,
9148                             /*by_reference_p=*/
9149                             (!this_capture_p
9150                              && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
9151                                  == CPLD_REFERENCE)),
9152                             /*explicit_init_p=*/false);
9153       initializer = convert_from_reference (var);
9154     }
9155
9156   current_class_type = saved_class_type;
9157
9158   return var;
9159 }
9160
9161 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
9162    INDIRECT_REF, possibly adding it through default capturing.  */
9163
9164 tree
9165 lambda_expr_this_capture (tree lambda)
9166 {
9167   tree result;
9168
9169   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9170
9171   /* Try to default capture 'this' if we can.  */
9172   if (!this_capture
9173       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
9174     {
9175       tree containing_function = TYPE_CONTEXT (LAMBDA_EXPR_CLOSURE (lambda));
9176       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
9177       tree init = NULL_TREE;
9178
9179       /* If we are in a lambda function, we can move out until we hit:
9180            1. a non-lambda function,
9181            2. a lambda function capturing 'this', or
9182            3. a non-default capturing lambda function.  */
9183       while (LAMBDA_FUNCTION_P (containing_function))
9184         {
9185           tree lambda
9186             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
9187
9188           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
9189             {
9190               /* An outer lambda has already captured 'this'.  */
9191               init = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9192               break;
9193             }
9194
9195           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
9196             /* An outer lambda won't let us capture 'this'.  */
9197             break;
9198
9199           lambda_stack = tree_cons (NULL_TREE,
9200                                     lambda,
9201                                     lambda_stack);
9202
9203           containing_function = decl_function_context (containing_function);
9204         }
9205
9206       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
9207           && !LAMBDA_FUNCTION_P (containing_function))
9208         /* First parameter is 'this'.  */
9209         init = DECL_ARGUMENTS (containing_function);
9210
9211       if (init)
9212         this_capture = add_default_capture (lambda_stack,
9213                                             /*id=*/this_identifier,
9214                                             init);
9215     }
9216
9217   if (!this_capture)
9218     {
9219       error ("%<this%> was not captured for this lambda function");
9220       result = error_mark_node;
9221     }
9222   else
9223     {
9224       /* To make sure that current_class_ref is for the lambda.  */
9225       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref))
9226                   == LAMBDA_EXPR_CLOSURE (lambda));
9227
9228       result = this_capture;
9229
9230       /* If 'this' is captured, each use of 'this' is transformed into an
9231          access to the corresponding unnamed data member of the closure
9232          type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
9233          ensures that the transformed expression is an rvalue. ] */
9234       result = rvalue (result);
9235     }
9236
9237   return result;
9238 }
9239
9240 /* Returns the method basetype of the innermost non-lambda function, or
9241    NULL_TREE if none.  */
9242
9243 tree
9244 nonlambda_method_basetype (void)
9245 {
9246   tree fn, type;
9247   if (!current_class_ref)
9248     return NULL_TREE;
9249
9250   type = current_class_type;
9251   if (!LAMBDA_TYPE_P (type))
9252     return type;
9253
9254   /* Find the nearest enclosing non-lambda function.  */
9255   fn = TYPE_NAME (type);
9256   do
9257     fn = decl_function_context (fn);
9258   while (fn && LAMBDA_FUNCTION_P (fn));
9259
9260   if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9261     return NULL_TREE;
9262
9263   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
9264 }
9265
9266 /* If the closure TYPE has a static op(), also add a conversion to function
9267    pointer.  */
9268
9269 void
9270 maybe_add_lambda_conv_op (tree type)
9271 {
9272   bool nested = (current_function_decl != NULL_TREE);
9273   tree callop = lambda_function (type);
9274   tree rettype, name, fntype, fn, body, compound_stmt;
9275   tree thistype, stattype, statfn, convfn, call, arg;
9276   VEC (tree, gc) *argvec;
9277
9278   if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
9279     return;
9280
9281   if (processing_template_decl)
9282     return;
9283
9284   stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
9285                                   FUNCTION_ARG_CHAIN (callop));
9286
9287   /* First build up the conversion op.  */
9288
9289   rettype = build_pointer_type (stattype);
9290   name = mangle_conv_op_name_for_type (rettype);
9291   thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
9292   fntype = build_method_type_directly (thistype, rettype, void_list_node);
9293   fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
9294   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9295
9296   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9297       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9298     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9299
9300   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
9301   grokclassfn (type, fn, NO_SPECIAL);
9302   set_linkage_according_to_type (type, fn);
9303   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9304   DECL_IN_AGGR_P (fn) = 1;
9305   DECL_ARTIFICIAL (fn) = 1;
9306   DECL_NOT_REALLY_EXTERN (fn) = 1;
9307   DECL_DECLARED_INLINE_P (fn) = 1;
9308   DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
9309
9310   add_method (type, fn, NULL_TREE);
9311
9312   /* Generic thunk code fails for varargs; we'll complain in mark_used if
9313      the conversion op is used.  */
9314   if (varargs_function_p (callop))
9315     {
9316       DECL_DELETED_FN (fn) = 1;
9317       return;
9318     }
9319
9320   /* Now build up the thunk to be returned.  */
9321
9322   name = get_identifier ("_FUN");
9323   fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
9324   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9325   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9326       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9327     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9328   grokclassfn (type, fn, NO_SPECIAL);
9329   set_linkage_according_to_type (type, fn);
9330   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9331   DECL_IN_AGGR_P (fn) = 1;
9332   DECL_ARTIFICIAL (fn) = 1;
9333   DECL_NOT_REALLY_EXTERN (fn) = 1;
9334   DECL_DECLARED_INLINE_P (fn) = 1;
9335   DECL_STATIC_FUNCTION_P (fn) = 1;
9336   DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
9337   for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
9338     DECL_CONTEXT (arg) = fn;
9339
9340   add_method (type, fn, NULL_TREE);
9341
9342   if (nested)
9343     push_function_context ();
9344   else
9345     /* Still increment function_depth so that we don't GC in the
9346        middle of an expression.  */
9347     ++function_depth;
9348
9349   /* Generate the body of the thunk.  */
9350
9351   start_preparsed_function (statfn, NULL_TREE,
9352                             SF_PRE_PARSED | SF_INCLASS_INLINE);
9353   if (DECL_ONE_ONLY (statfn))
9354     {
9355       /* Put the thunk in the same comdat group as the call op.  */
9356       cgraph_add_to_same_comdat_group (cgraph_get_create_node (statfn),
9357                                        cgraph_get_create_node (callop));
9358     }
9359   body = begin_function_body ();
9360   compound_stmt = begin_compound_stmt (0);
9361
9362   arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
9363                 null_pointer_node);
9364   argvec = make_tree_vector ();
9365   VEC_quick_push (tree, argvec, arg);
9366   for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
9367     {
9368       mark_exp_read (arg);
9369       VEC_safe_push (tree, gc, argvec, arg);
9370     }
9371   call = build_call_a (callop, VEC_length (tree, argvec),
9372                        VEC_address (tree, argvec));
9373   CALL_FROM_THUNK_P (call) = 1;
9374   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
9375     call = build_cplus_new (TREE_TYPE (call), call, tf_warning_or_error);
9376   call = convert_from_reference (call);
9377   finish_return_stmt (call);
9378
9379   finish_compound_stmt (compound_stmt);
9380   finish_function_body (body);
9381
9382   expand_or_defer_fn (finish_function (2));
9383
9384   /* Generate the body of the conversion op.  */
9385
9386   start_preparsed_function (convfn, NULL_TREE,
9387                             SF_PRE_PARSED | SF_INCLASS_INLINE);
9388   body = begin_function_body ();
9389   compound_stmt = begin_compound_stmt (0);
9390
9391   finish_return_stmt (decay_conversion (statfn));
9392
9393   finish_compound_stmt (compound_stmt);
9394   finish_function_body (body);
9395
9396   expand_or_defer_fn (finish_function (2));
9397
9398   if (nested)
9399     pop_function_context ();
9400   else
9401     --function_depth;
9402 }
9403
9404 /* Returns true iff VAL is a lambda-related declaration which should
9405    be ignored by unqualified lookup.  */
9406
9407 bool
9408 is_lambda_ignored_entity (tree val)
9409 {
9410   /* In unevaluated context, look past normal capture proxies.  */
9411   if (cp_unevaluated_operand && is_normal_capture_proxy (val))
9412     return true;
9413
9414   /* Always ignore lambda fields, their names are only for debugging.  */
9415   if (TREE_CODE (val) == FIELD_DECL
9416       && CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (val)))
9417     return true;
9418
9419   /* None of the lookups that use qualify_lookup want the op() from the
9420      lambda; they want the one from the enclosing class.  */
9421   if (TREE_CODE (val) == FUNCTION_DECL && LAMBDA_FUNCTION_P (val))
9422     return true;
9423
9424   return false;
9425 }
9426
9427 #include "gt-cp-semantics.h"