OSDN Git Service

Revert delta 190174
[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 /* Build compile-time evalable representations of member-initializer list
5880    for a constexpr constructor.  */
5881
5882 static tree
5883 build_constexpr_constructor_member_initializers (tree type, tree body)
5884 {
5885   VEC(constructor_elt,gc) *vec = NULL;
5886   bool ok = true;
5887   if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
5888       || TREE_CODE (body) == EH_SPEC_BLOCK)
5889     body = TREE_OPERAND (body, 0);
5890   if (TREE_CODE (body) == STATEMENT_LIST)
5891     body = STATEMENT_LIST_HEAD (body)->stmt;
5892   body = BIND_EXPR_BODY (body);
5893   if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5894     {
5895       body = TREE_OPERAND (body, 0);
5896       if (TREE_CODE (body) == EXPR_STMT)
5897         body = TREE_OPERAND (body, 0);
5898       if (TREE_CODE (body) == INIT_EXPR
5899           && (same_type_ignoring_top_level_qualifiers_p
5900               (TREE_TYPE (TREE_OPERAND (body, 0)),
5901                current_class_type)))
5902         {
5903           /* Trivial copy.  */
5904           return TREE_OPERAND (body, 1);
5905         }
5906       ok = build_data_member_initialization (body, &vec);
5907     }
5908   else if (TREE_CODE (body) == STATEMENT_LIST)
5909     {
5910       tree_stmt_iterator i;
5911       for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5912         {
5913           ok = build_data_member_initialization (tsi_stmt (i), &vec);
5914           if (!ok)
5915             break;
5916         }
5917     }
5918   else if (EXPR_P (body))
5919     ok = build_data_member_initialization (body, &vec);
5920   else
5921     gcc_assert (errorcount > 0);
5922   if (ok)
5923     {
5924       if (VEC_length (constructor_elt, vec) > 0)
5925         {
5926           /* In a delegating constructor, return the target.  */
5927           constructor_elt *ce = VEC_index (constructor_elt, vec, 0);
5928           if (ce->index == current_class_ptr)
5929             {
5930               body = ce->value;
5931               VEC_free (constructor_elt, gc, vec);
5932               return body;
5933             }
5934         }
5935       return build_constructor (type, vec);
5936     }
5937   else
5938     return error_mark_node;
5939 }
5940
5941 /* Subroutine of register_constexpr_fundef.  BODY is the body of a function
5942    declared to be constexpr, or a sub-statement thereof.  Returns the
5943    return value if suitable, error_mark_node for a statement not allowed in
5944    a constexpr function, or NULL_TREE if no return value was found.  */
5945
5946 static tree
5947 constexpr_fn_retval (tree body)
5948 {
5949   switch (TREE_CODE (body))
5950     {
5951     case STATEMENT_LIST:
5952       {
5953         tree_stmt_iterator i;
5954         tree expr = NULL_TREE;
5955         for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5956           {
5957             tree s = constexpr_fn_retval (tsi_stmt (i));
5958             if (s == error_mark_node)
5959               return error_mark_node;
5960             else if (s == NULL_TREE)
5961               /* Keep iterating.  */;
5962             else if (expr)
5963               /* Multiple return statements.  */
5964               return error_mark_node;
5965             else
5966               expr = s;
5967           }
5968         return expr;
5969       }
5970
5971     case RETURN_EXPR:
5972       return unshare_expr (TREE_OPERAND (body, 0));
5973
5974     case DECL_EXPR:
5975       if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL)
5976         return NULL_TREE;
5977       return error_mark_node;
5978
5979     case CLEANUP_POINT_EXPR:
5980       return constexpr_fn_retval (TREE_OPERAND (body, 0));
5981
5982     case USING_STMT:
5983       return NULL_TREE;
5984
5985     default:
5986       return error_mark_node;
5987     }
5988 }
5989
5990 /* Subroutine of register_constexpr_fundef.  BODY is the DECL_SAVED_TREE of
5991    FUN; do the necessary transformations to turn it into a single expression
5992    that we can store in the hash table.  */
5993
5994 static tree
5995 massage_constexpr_body (tree fun, tree body)
5996 {
5997   if (DECL_CONSTRUCTOR_P (fun))
5998     body = build_constexpr_constructor_member_initializers
5999       (DECL_CONTEXT (fun), body);
6000   else
6001     {
6002       if (TREE_CODE (body) == EH_SPEC_BLOCK)
6003         body = EH_SPEC_STMTS (body);
6004       if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
6005         body = TREE_OPERAND (body, 0);
6006       if (TREE_CODE (body) == BIND_EXPR)
6007         body = BIND_EXPR_BODY (body);
6008       body = constexpr_fn_retval (body);
6009     }
6010   return body;
6011 }
6012
6013 /* FUN is a constexpr constructor with massaged body BODY.  Return true
6014    if some bases/fields are uninitialized, and complain if COMPLAIN.  */
6015
6016 static bool
6017 cx_check_missing_mem_inits (tree fun, tree body, bool complain)
6018 {
6019   bool bad;
6020   tree field;
6021   unsigned i, nelts;
6022   tree ctype;
6023
6024   if (TREE_CODE (body) != CONSTRUCTOR)
6025     return false;
6026
6027   nelts = CONSTRUCTOR_NELTS (body);
6028   ctype = DECL_CONTEXT (fun);
6029   field = TYPE_FIELDS (ctype);
6030
6031   if (TREE_CODE (ctype) == UNION_TYPE)
6032     {
6033       if (nelts == 0 && next_initializable_field (field))
6034         {
6035           if (complain)
6036             error ("%<constexpr%> constructor for union %qT must "
6037                    "initialize exactly one non-static data member", ctype);
6038           return true;
6039         }
6040       return false;
6041     }
6042
6043   bad = false;
6044   for (i = 0; i <= nelts; ++i)
6045     {
6046       tree index;
6047       if (i == nelts)
6048         index = NULL_TREE;
6049       else
6050         {
6051           index = CONSTRUCTOR_ELT (body, i)->index;
6052           /* Skip base and vtable inits.  */
6053           if (TREE_CODE (index) != FIELD_DECL)
6054             continue;
6055         }
6056       for (; field != index; field = DECL_CHAIN (field))
6057         {
6058           tree ftype;
6059           if (TREE_CODE (field) != FIELD_DECL
6060               || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field)))
6061             continue;
6062           ftype = strip_array_types (TREE_TYPE (field));
6063           if (type_has_constexpr_default_constructor (ftype))
6064             {
6065               /* It's OK to skip a member with a trivial constexpr ctor.
6066                  A constexpr ctor that isn't trivial should have been
6067                  added in by now.  */
6068               gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
6069                                    || errorcount != 0);
6070               continue;
6071             }
6072           if (!complain)
6073             return true;
6074           error ("uninitialized member %qD in %<constexpr%> constructor",
6075                  field);
6076           bad = true;
6077         }
6078       if (field == NULL_TREE)
6079         break;
6080       field = DECL_CHAIN (field);
6081     }
6082
6083   return bad;
6084 }
6085
6086 /* We are processing the definition of the constexpr function FUN.
6087    Check that its BODY fulfills the propriate requirements and
6088    enter it in the constexpr function definition table.
6089    For constructor BODY is actually the TREE_LIST of the
6090    member-initializer list.  */
6091
6092 tree
6093 register_constexpr_fundef (tree fun, tree body)
6094 {
6095   constexpr_fundef entry;
6096   constexpr_fundef **slot;
6097
6098   if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
6099     return NULL;
6100
6101   body = massage_constexpr_body (fun, body);
6102   if (body == NULL_TREE || body == error_mark_node)
6103     {
6104       if (!DECL_CONSTRUCTOR_P (fun))
6105         error ("body of constexpr function %qD not a return-statement", fun);
6106       return NULL;
6107     }
6108
6109   if (!potential_rvalue_constant_expression (body))
6110     {
6111       if (!DECL_GENERATED_P (fun))
6112         require_potential_rvalue_constant_expression (body);
6113       return NULL;
6114     }
6115
6116   if (DECL_CONSTRUCTOR_P (fun)
6117       && cx_check_missing_mem_inits (fun, body, !DECL_GENERATED_P (fun)))
6118     return NULL;
6119
6120   /* Create the constexpr function table if necessary.  */
6121   if (constexpr_fundef_table == NULL)
6122     constexpr_fundef_table = htab_create_ggc (101,
6123                                               constexpr_fundef_hash,
6124                                               constexpr_fundef_equal,
6125                                               ggc_free);
6126   entry.decl = fun;
6127   entry.body = body;
6128   slot = (constexpr_fundef **)
6129     htab_find_slot (constexpr_fundef_table, &entry, INSERT);
6130
6131   gcc_assert (*slot == NULL);
6132   *slot = ggc_alloc_constexpr_fundef ();
6133   **slot = entry;
6134
6135   return fun;
6136 }
6137
6138 /* FUN is a non-constexpr function called in a context that requires a
6139    constant expression.  If it comes from a constexpr template, explain why
6140    the instantiation isn't constexpr.  */
6141
6142 void
6143 explain_invalid_constexpr_fn (tree fun)
6144 {
6145   static struct pointer_set_t *diagnosed;
6146   tree body;
6147   location_t save_loc;
6148   /* Only diagnose defaulted functions or instantiations.  */
6149   if (!DECL_DEFAULTED_FN (fun)
6150       && !is_instantiation_of_constexpr (fun))
6151     return;
6152   if (diagnosed == NULL)
6153     diagnosed = pointer_set_create ();
6154   if (pointer_set_insert (diagnosed, fun) != 0)
6155     /* Already explained.  */
6156     return;
6157
6158   save_loc = input_location;
6159   input_location = DECL_SOURCE_LOCATION (fun);
6160   inform (0, "%q+D is not usable as a constexpr function because:", fun);
6161   /* First check the declaration.  */
6162   if (is_valid_constexpr_fn (fun, true))
6163     {
6164       /* Then if it's OK, the body.  */
6165       if (DECL_DEFAULTED_FN (fun))
6166         explain_implicit_non_constexpr (fun);
6167       else
6168         {
6169           body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
6170           require_potential_rvalue_constant_expression (body);
6171           if (DECL_CONSTRUCTOR_P (fun))
6172             cx_check_missing_mem_inits (fun, body, true);
6173         }
6174     }
6175   input_location = save_loc;
6176 }
6177
6178 /* Objects of this type represent calls to constexpr functions
6179    along with the bindings of parameters to their arguments, for
6180    the purpose of compile time evaluation.  */
6181
6182 typedef struct GTY(()) constexpr_call {
6183   /* Description of the constexpr function definition.  */
6184   constexpr_fundef *fundef;
6185   /* Parameter bindings enironment.  A TREE_LIST where each TREE_PURPOSE
6186      is a parameter _DECL and the TREE_VALUE is the value of the parameter.
6187      Note: This arrangement is made to accomodate the use of
6188      iterative_hash_template_arg (see pt.c).  If you change this
6189      representation, also change the hash calculation in
6190      cxx_eval_call_expression.  */
6191   tree bindings;
6192   /* Result of the call.
6193        NULL means the call is being evaluated.
6194        error_mark_node means that the evaluation was erroneous;
6195        otherwise, the actuall value of the call.  */
6196   tree result;
6197   /* The hash of this call; we remember it here to avoid having to
6198      recalculate it when expanding the hash table.  */
6199   hashval_t hash;
6200 } constexpr_call;
6201
6202 /* A table of all constexpr calls that have been evaluated by the
6203    compiler in this translation unit.  */
6204
6205 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
6206
6207 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
6208                                           bool, bool, bool *);
6209
6210 /* Compute a hash value for a constexpr call representation.  */
6211
6212 static hashval_t
6213 constexpr_call_hash (const void *p)
6214 {
6215   const constexpr_call *info = (const constexpr_call *) p;
6216   return info->hash;
6217 }
6218
6219 /* Return 1 if the objects pointed to by P and Q represent calls
6220    to the same constexpr function with the same arguments.
6221    Otherwise, return 0.  */
6222
6223 static int
6224 constexpr_call_equal (const void *p, const void *q)
6225 {
6226   const constexpr_call *lhs = (const constexpr_call *) p;
6227   const constexpr_call *rhs = (const constexpr_call *) q;
6228   tree lhs_bindings;
6229   tree rhs_bindings;
6230   if (lhs == rhs)
6231     return 1;
6232   if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
6233     return 0;
6234   lhs_bindings = lhs->bindings;
6235   rhs_bindings = rhs->bindings;
6236   while (lhs_bindings != NULL && rhs_bindings != NULL)
6237     {
6238       tree lhs_arg = TREE_VALUE (lhs_bindings);
6239       tree rhs_arg = TREE_VALUE (rhs_bindings);
6240       gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
6241       if (!cp_tree_equal (lhs_arg, rhs_arg))
6242         return 0;
6243       lhs_bindings = TREE_CHAIN (lhs_bindings);
6244       rhs_bindings = TREE_CHAIN (rhs_bindings);
6245     }
6246   return lhs_bindings == rhs_bindings;
6247 }
6248
6249 /* Initialize the constexpr call table, if needed.  */
6250
6251 static void
6252 maybe_initialize_constexpr_call_table (void)
6253 {
6254   if (constexpr_call_table == NULL)
6255     constexpr_call_table = htab_create_ggc (101,
6256                                             constexpr_call_hash,
6257                                             constexpr_call_equal,
6258                                             ggc_free);
6259 }
6260
6261 /* Return true if T designates the implied `this' parameter.  */
6262
6263 static inline bool
6264 is_this_parameter (tree t)
6265 {
6266   return t == current_class_ptr;
6267 }
6268
6269 /* We have an expression tree T that represents a call, either CALL_EXPR
6270    or AGGR_INIT_EXPR.  If the call is lexically to a named function,
6271    retrun the _DECL for that function.  */
6272
6273 static tree
6274 get_function_named_in_call (tree t)
6275 {
6276   tree fun = NULL;
6277   switch (TREE_CODE (t))
6278     {
6279     case CALL_EXPR:
6280       fun = CALL_EXPR_FN (t);
6281       break;
6282
6283     case AGGR_INIT_EXPR:
6284       fun = AGGR_INIT_EXPR_FN (t);
6285       break;
6286
6287     default:
6288       gcc_unreachable();
6289       break;
6290     }
6291   if (TREE_CODE (fun) == ADDR_EXPR
6292       && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
6293     fun = TREE_OPERAND (fun, 0);
6294   return fun;
6295 }
6296
6297 /* We have an expression tree T that represents a call, either CALL_EXPR
6298    or AGGR_INIT_EXPR.  Return the Nth argument.  */
6299
6300 static inline tree
6301 get_nth_callarg (tree t, int n)
6302 {
6303   switch (TREE_CODE (t))
6304     {
6305     case CALL_EXPR:
6306       return CALL_EXPR_ARG (t, n);
6307
6308     case AGGR_INIT_EXPR:
6309       return AGGR_INIT_EXPR_ARG (t, n);
6310
6311     default:
6312       gcc_unreachable ();
6313       return NULL;
6314     }
6315 }
6316
6317 /* Look up the binding of the function parameter T in a constexpr
6318    function call context CALL.  */
6319
6320 static tree
6321 lookup_parameter_binding (const constexpr_call *call, tree t)
6322 {
6323   tree b = purpose_member (t, call->bindings);
6324   return TREE_VALUE (b);
6325 }
6326
6327 /* Attempt to evaluate T which represents a call to a builtin function.
6328    We assume here that all builtin functions evaluate to scalar types
6329    represented by _CST nodes.  */
6330
6331 static tree
6332 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
6333                                 bool allow_non_constant, bool addr,
6334                                 bool *non_constant_p)
6335 {
6336   const int nargs = call_expr_nargs (t);
6337   tree *args = (tree *) alloca (nargs * sizeof (tree));
6338   tree new_call;
6339   int i;
6340   for (i = 0; i < nargs; ++i)
6341     {
6342       args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
6343                                               allow_non_constant, addr,
6344                                               non_constant_p);
6345       if (allow_non_constant && *non_constant_p)
6346         return t;
6347     }
6348   if (*non_constant_p)
6349     return t;
6350   new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
6351                                    CALL_EXPR_FN (t), nargs, args);
6352   return fold (new_call);
6353 }
6354
6355 /* TEMP is the constant value of a temporary object of type TYPE.  Adjust
6356    the type of the value to match.  */
6357
6358 static tree
6359 adjust_temp_type (tree type, tree temp)
6360 {
6361   if (TREE_TYPE (temp) == type)
6362     return temp;
6363   /* Avoid wrapping an aggregate value in a NOP_EXPR.  */
6364   if (TREE_CODE (temp) == CONSTRUCTOR)
6365     return build_constructor (type, CONSTRUCTOR_ELTS (temp));
6366   gcc_assert (SCALAR_TYPE_P (type));
6367   return cp_fold_convert (type, temp);
6368 }
6369
6370 /* Subroutine of cxx_eval_call_expression.
6371    We are processing a call expression (either CALL_EXPR or
6372    AGGR_INIT_EXPR) in the call context of OLD_CALL.  Evaluate
6373    all arguments and bind their values to correspondings
6374    parameters, making up the NEW_CALL context.  */
6375
6376 static void
6377 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
6378                              constexpr_call *new_call,
6379                              bool allow_non_constant,
6380                              bool *non_constant_p)
6381 {
6382   const int nargs = call_expr_nargs (t);
6383   tree fun = new_call->fundef->decl;
6384   tree parms = DECL_ARGUMENTS (fun);
6385   int i;
6386   for (i = 0; i < nargs; ++i)
6387     {
6388       tree x, arg;
6389       tree type = parms ? TREE_TYPE (parms) : void_type_node;
6390       /* For member function, the first argument is a pointer to the implied
6391          object.  And for an object contruction, don't bind `this' before
6392          it is fully constructed.  */
6393       if (i == 0 && DECL_CONSTRUCTOR_P (fun))
6394         goto next;
6395       x = get_nth_callarg (t, i);
6396       arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
6397                                           TREE_CODE (type) == REFERENCE_TYPE,
6398                                           non_constant_p);
6399       /* Don't VERIFY_CONSTANT here.  */
6400       if (*non_constant_p && allow_non_constant)
6401         return;
6402       /* Just discard ellipsis args after checking their constantitude.  */
6403       if (!parms)
6404         continue;
6405       if (*non_constant_p)
6406         /* Don't try to adjust the type of non-constant args.  */
6407         goto next;
6408
6409       /* Make sure the binding has the same type as the parm.  */
6410       if (TREE_CODE (type) != REFERENCE_TYPE)
6411         arg = adjust_temp_type (type, arg);
6412       new_call->bindings = tree_cons (parms, arg, new_call->bindings);
6413     next:
6414       parms = TREE_CHAIN (parms);
6415     }
6416 }
6417
6418 /* Variables and functions to manage constexpr call expansion context.
6419    These do not need to be marked for PCH or GC.  */
6420
6421 /* FIXME remember and print actual constant arguments.  */
6422 static VEC(tree,heap) *call_stack = NULL;
6423 static int call_stack_tick;
6424 static int last_cx_error_tick;
6425
6426 static bool
6427 push_cx_call_context (tree call)
6428 {
6429   ++call_stack_tick;
6430   if (!EXPR_HAS_LOCATION (call))
6431     SET_EXPR_LOCATION (call, input_location);
6432   VEC_safe_push (tree, heap, call_stack, call);
6433   if (VEC_length (tree, call_stack) > (unsigned) max_constexpr_depth)
6434     return false;
6435   return true;
6436 }
6437
6438 static void
6439 pop_cx_call_context (void)
6440 {
6441   ++call_stack_tick;
6442   VEC_pop (tree, call_stack);
6443 }
6444
6445 VEC(tree,heap) *
6446 cx_error_context (void)
6447 {
6448   VEC(tree,heap) *r = NULL;
6449   if (call_stack_tick != last_cx_error_tick
6450       && !VEC_empty (tree, call_stack))
6451     r = call_stack;
6452   last_cx_error_tick = call_stack_tick;
6453   return r;
6454 }
6455
6456 /* Subroutine of cxx_eval_constant_expression.
6457    Evaluate the call expression tree T in the context of OLD_CALL expression
6458    evaluation.  */
6459
6460 static tree
6461 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
6462                           bool allow_non_constant, bool addr,
6463                           bool *non_constant_p)
6464 {
6465   location_t loc = EXPR_LOC_OR_HERE (t);
6466   tree fun = get_function_named_in_call (t);
6467   tree result;
6468   constexpr_call new_call = { NULL, NULL, NULL, 0 };
6469   constexpr_call **slot;
6470   constexpr_call *entry;
6471   bool depth_ok;
6472
6473   if (TREE_CODE (fun) != FUNCTION_DECL)
6474     {
6475       /* Might be a constexpr function pointer.  */
6476       fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
6477                                           /*addr*/false, non_constant_p);
6478       if (TREE_CODE (fun) == ADDR_EXPR)
6479         fun = TREE_OPERAND (fun, 0);
6480     }
6481   if (TREE_CODE (fun) != FUNCTION_DECL)
6482     {
6483       if (!allow_non_constant && !*non_constant_p)
6484         error_at (loc, "expression %qE does not designate a constexpr "
6485                   "function", fun);
6486       *non_constant_p = true;
6487       return t;
6488     }
6489   if (DECL_CLONED_FUNCTION_P (fun))
6490     fun = DECL_CLONED_FUNCTION (fun);
6491   if (is_builtin_fn (fun))
6492     return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
6493                                            addr, non_constant_p);
6494   if (!DECL_DECLARED_CONSTEXPR_P (fun))
6495     {
6496       if (!allow_non_constant)
6497         {
6498           error_at (loc, "call to non-constexpr function %qD", fun);
6499           explain_invalid_constexpr_fn (fun);
6500         }
6501       *non_constant_p = true;
6502       return t;
6503     }
6504
6505   /* Shortcut trivial copy constructor/op=.  */
6506   if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
6507     {
6508       tree arg = convert_from_reference (get_nth_callarg (t, 1));
6509       return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
6510                                            addr, non_constant_p);
6511     }
6512
6513   /* If in direct recursive call, optimize definition search.  */
6514   if (old_call != NULL && old_call->fundef->decl == fun)
6515     new_call.fundef = old_call->fundef;
6516   else
6517     {
6518       new_call.fundef = retrieve_constexpr_fundef (fun);
6519       if (new_call.fundef == NULL || new_call.fundef->body == NULL)
6520         {
6521           if (!allow_non_constant)
6522             {
6523               if (DECL_INITIAL (fun))
6524                 {
6525                   /* The definition of fun was somehow unsuitable.  */
6526                   error_at (loc, "%qD called in a constant expression", fun);
6527                   explain_invalid_constexpr_fn (fun);
6528                 }
6529               else
6530                 error_at (loc, "%qD used before its definition", fun);
6531             }
6532           *non_constant_p = true;
6533           return t;
6534         }
6535     }
6536   cxx_bind_parameters_in_call (old_call, t, &new_call,
6537                                allow_non_constant, non_constant_p);
6538   if (*non_constant_p)
6539     return t;
6540
6541   depth_ok = push_cx_call_context (t);
6542
6543   new_call.hash
6544     = iterative_hash_template_arg (new_call.bindings,
6545                                    constexpr_fundef_hash (new_call.fundef));
6546
6547   /* If we have seen this call before, we are done.  */
6548   maybe_initialize_constexpr_call_table ();
6549   slot = (constexpr_call **)
6550     htab_find_slot (constexpr_call_table, &new_call, INSERT);
6551   entry = *slot;
6552   if (entry == NULL)
6553     {
6554       /* We need to keep a pointer to the entry, not just the slot, as the
6555          slot can move in the call to cxx_eval_builtin_function_call.  */
6556       *slot = entry = ggc_alloc_constexpr_call ();
6557       *entry = new_call;
6558     }
6559   /* Calls which are in progress have their result set to NULL
6560      so that we can detect circular dependencies.  */
6561   else if (entry->result == NULL)
6562     {
6563       if (!allow_non_constant)
6564         error ("call has circular dependency");
6565       *non_constant_p = true;
6566       entry->result = result = error_mark_node;
6567     }
6568
6569   if (!depth_ok)
6570     {
6571       if (!allow_non_constant)
6572         error ("constexpr evaluation depth exceeds maximum of %d (use "
6573                "-fconstexpr-depth= to increase the maximum)",
6574                max_constexpr_depth);
6575       *non_constant_p = true;
6576       entry->result = result = error_mark_node;
6577     }
6578   else
6579     {
6580       result = entry->result;
6581       if (!result || result == error_mark_node)
6582         result = (cxx_eval_constant_expression
6583                   (&new_call, new_call.fundef->body,
6584                    allow_non_constant, addr,
6585                    non_constant_p));
6586       if (result == error_mark_node)
6587         *non_constant_p = true;
6588       if (*non_constant_p)
6589         entry->result = result = error_mark_node;
6590       else
6591         {
6592           /* If this was a call to initialize an object, set the type of
6593              the CONSTRUCTOR to the type of that object.  */
6594           if (DECL_CONSTRUCTOR_P (fun))
6595             {
6596               tree ob_arg = get_nth_callarg (t, 0);
6597               STRIP_NOPS (ob_arg);
6598               gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
6599                           && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
6600               result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
6601                                          result);
6602             }
6603           entry->result = result;
6604         }
6605     }
6606
6607   pop_cx_call_context ();
6608   return unshare_expr (result);
6609 }
6610
6611 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase.  */
6612
6613 bool
6614 reduced_constant_expression_p (tree t)
6615 {
6616   if (TREE_OVERFLOW_P (t))
6617     /* Integer overflow makes this not a constant expression.  */
6618     return false;
6619   /* FIXME are we calling this too much?  */
6620   return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6621 }
6622
6623 /* Some expressions may have constant operands but are not constant
6624    themselves, such as 1/0.  Call this function (or rather, the macro
6625    following it) to check for that condition.
6626
6627    We only call this in places that require an arithmetic constant, not in
6628    places where we might have a non-constant expression that can be a
6629    component of a constant expression, such as the address of a constexpr
6630    variable that might be dereferenced later.  */
6631
6632 static bool
6633 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p)
6634 {
6635   if (!*non_constant_p && !reduced_constant_expression_p (t))
6636     {
6637       if (!allow_non_constant)
6638         {
6639           /* If T was already folded to a _CST with TREE_OVERFLOW set,
6640              printing the folded constant isn't helpful.  */
6641           if (TREE_OVERFLOW_P (t))
6642             {
6643               permerror (input_location, "overflow in constant expression");
6644               /* If we're being permissive (and are in an enforcing
6645                  context), consider this constant.  */
6646               if (flag_permissive)
6647                 return false;
6648             }
6649           else
6650             error ("%q+E is not a constant expression", t);
6651         }
6652       *non_constant_p = true;
6653     }
6654   return *non_constant_p;
6655 }
6656 #define VERIFY_CONSTANT(X)                                              \
6657 do {                                                                    \
6658   if (verify_constant ((X), allow_non_constant, non_constant_p))        \
6659     return t;                                                           \
6660  } while (0)
6661
6662 /* Subroutine of cxx_eval_constant_expression.
6663    Attempt to reduce the unary expression tree T to a compile time value.
6664    If successful, return the value.  Otherwise issue a diagnostic
6665    and return error_mark_node.  */
6666
6667 static tree
6668 cxx_eval_unary_expression (const constexpr_call *call, tree t,
6669                            bool allow_non_constant, bool addr,
6670                            bool *non_constant_p)
6671 {
6672   tree r;
6673   tree orig_arg = TREE_OPERAND (t, 0);
6674   tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6675                                            addr, non_constant_p);
6676   VERIFY_CONSTANT (arg);
6677   if (arg == orig_arg)
6678     return t;
6679   r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6680   VERIFY_CONSTANT (r);
6681   return r;
6682 }
6683
6684 /* Subroutine of cxx_eval_constant_expression.
6685    Like cxx_eval_unary_expression, except for binary expressions.  */
6686
6687 static tree
6688 cxx_eval_binary_expression (const constexpr_call *call, tree t,
6689                             bool allow_non_constant, bool addr,
6690                             bool *non_constant_p)
6691 {
6692   tree r;
6693   tree orig_lhs = TREE_OPERAND (t, 0);
6694   tree orig_rhs = TREE_OPERAND (t, 1);
6695   tree lhs, rhs;
6696   lhs = cxx_eval_constant_expression (call, orig_lhs,
6697                                       allow_non_constant, addr,
6698                                       non_constant_p);
6699   VERIFY_CONSTANT (lhs);
6700   rhs = cxx_eval_constant_expression (call, orig_rhs,
6701                                       allow_non_constant, addr,
6702                                       non_constant_p);
6703   VERIFY_CONSTANT (rhs);
6704   if (lhs == orig_lhs && rhs == orig_rhs)
6705     return t;
6706   r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6707   VERIFY_CONSTANT (r);
6708   return r;
6709 }
6710
6711 /* Subroutine of cxx_eval_constant_expression.
6712    Attempt to evaluate condition expressions.  Dead branches are not
6713    looked into.  */
6714
6715 static tree
6716 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6717                                  bool allow_non_constant, bool addr,
6718                                  bool *non_constant_p)
6719 {
6720   tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6721                                            allow_non_constant, addr,
6722                                            non_constant_p);
6723   VERIFY_CONSTANT (val);
6724   /* Don't VERIFY_CONSTANT the other operands.  */
6725   if (integer_zerop (val))
6726     return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6727                                          allow_non_constant, addr,
6728                                          non_constant_p);
6729   return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6730                                        allow_non_constant, addr,
6731                                        non_constant_p);
6732 }
6733
6734 /* Subroutine of cxx_eval_constant_expression.
6735    Attempt to reduce a reference to an array slot.  */
6736
6737 static tree
6738 cxx_eval_array_reference (const constexpr_call *call, tree t,
6739                           bool allow_non_constant, bool addr,
6740                           bool *non_constant_p)
6741 {
6742   tree oldary = TREE_OPERAND (t, 0);
6743   tree ary = cxx_eval_constant_expression (call, oldary,
6744                                            allow_non_constant, addr,
6745                                            non_constant_p);
6746   tree index, oldidx;
6747   HOST_WIDE_INT i;
6748   tree elem_type;
6749   unsigned len, elem_nchars = 1;
6750   if (*non_constant_p)
6751     return t;
6752   oldidx = TREE_OPERAND (t, 1);
6753   index = cxx_eval_constant_expression (call, oldidx,
6754                                         allow_non_constant, false,
6755                                         non_constant_p);
6756   VERIFY_CONSTANT (index);
6757   if (addr && ary == oldary && index == oldidx)
6758     return t;
6759   else if (addr)
6760     return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6761   elem_type = TREE_TYPE (TREE_TYPE (ary));
6762   if (TREE_CODE (ary) == CONSTRUCTOR)
6763     len = CONSTRUCTOR_NELTS (ary);
6764   else if (TREE_CODE (ary) == STRING_CST)
6765     {
6766       elem_nchars = (TYPE_PRECISION (elem_type)
6767                      / TYPE_PRECISION (char_type_node));
6768       len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
6769     }
6770   else
6771     {
6772       /* We can't do anything with other tree codes, so use
6773          VERIFY_CONSTANT to complain and fail.  */
6774       VERIFY_CONSTANT (ary);
6775       gcc_unreachable ();
6776     }
6777   if (compare_tree_int (index, len) >= 0)
6778     {
6779       if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
6780         {
6781           /* If it's within the array bounds but doesn't have an explicit
6782              initializer, it's value-initialized.  */
6783           tree val = build_value_init (elem_type, tf_warning_or_error);
6784           return cxx_eval_constant_expression (call, val,
6785                                                allow_non_constant, addr,
6786                                                non_constant_p);
6787         }
6788
6789       if (!allow_non_constant)
6790         error ("array subscript out of bound");
6791       *non_constant_p = true;
6792       return t;
6793     }
6794   i = tree_low_cst (index, 0);
6795   if (TREE_CODE (ary) == CONSTRUCTOR)
6796     return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
6797   else if (elem_nchars == 1)
6798     return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6799                           TREE_STRING_POINTER (ary)[i]);
6800   else
6801     {
6802       tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
6803       return native_interpret_expr (type, (const unsigned char *)
6804                                           TREE_STRING_POINTER (ary)
6805                                           + i * elem_nchars, elem_nchars);
6806     }
6807   /* Don't VERIFY_CONSTANT here.  */
6808 }
6809
6810 /* Subroutine of cxx_eval_constant_expression.
6811    Attempt to reduce a field access of a value of class type.  */
6812
6813 static tree
6814 cxx_eval_component_reference (const constexpr_call *call, tree t,
6815                               bool allow_non_constant, bool addr,
6816                               bool *non_constant_p)
6817 {
6818   unsigned HOST_WIDE_INT i;
6819   tree field;
6820   tree value;
6821   tree part = TREE_OPERAND (t, 1);
6822   tree orig_whole = TREE_OPERAND (t, 0);
6823   tree whole = cxx_eval_constant_expression (call, orig_whole,
6824                                              allow_non_constant, addr,
6825                                              non_constant_p);
6826   if (whole == orig_whole)
6827     return t;
6828   if (addr)
6829     return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6830                         whole, part, NULL_TREE);
6831   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6832      CONSTRUCTOR.  */
6833   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6834     {
6835       if (!allow_non_constant)
6836         error ("%qE is not a constant expression", orig_whole);
6837       *non_constant_p = true;
6838     }
6839   if (DECL_MUTABLE_P (part))
6840     {
6841       if (!allow_non_constant)
6842         error ("mutable %qD is not usable in a constant expression", part);
6843       *non_constant_p = true;
6844     }
6845   if (*non_constant_p)
6846     return t;
6847   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6848     {
6849       if (field == part)
6850         return value;
6851     }
6852   if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
6853       && CONSTRUCTOR_NELTS (whole) > 0)
6854     {
6855       /* DR 1188 says we don't have to deal with this.  */
6856       if (!allow_non_constant)
6857         error ("accessing %qD member instead of initialized %qD member in "
6858                "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6859       *non_constant_p = true;
6860       return t;
6861     }
6862
6863   /* If there's no explicit init for this field, it's value-initialized.  */
6864   value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
6865   return cxx_eval_constant_expression (call, value,
6866                                        allow_non_constant, addr,
6867                                        non_constant_p);
6868 }
6869
6870 /* Subroutine of cxx_eval_constant_expression.
6871    Attempt to reduce a field access of a value of class type that is
6872    expressed as a BIT_FIELD_REF.  */
6873
6874 static tree
6875 cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
6876                         bool allow_non_constant, bool addr,
6877                         bool *non_constant_p)
6878 {
6879   tree orig_whole = TREE_OPERAND (t, 0);
6880   tree retval, fldval, utype, mask;
6881   bool fld_seen = false;
6882   HOST_WIDE_INT istart, isize;
6883   tree whole = cxx_eval_constant_expression (call, orig_whole,
6884                                              allow_non_constant, addr,
6885                                              non_constant_p);
6886   tree start, field, value;
6887   unsigned HOST_WIDE_INT i;
6888
6889   if (whole == orig_whole)
6890     return t;
6891   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6892      CONSTRUCTOR.  */
6893   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6894     {
6895       if (!allow_non_constant)
6896         error ("%qE is not a constant expression", orig_whole);
6897       *non_constant_p = true;
6898     }
6899   if (*non_constant_p)
6900     return t;
6901
6902   start = TREE_OPERAND (t, 2);
6903   istart = tree_low_cst (start, 0);
6904   isize = tree_low_cst (TREE_OPERAND (t, 1), 0);
6905   utype = TREE_TYPE (t);
6906   if (!TYPE_UNSIGNED (utype))
6907     utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
6908   retval = build_int_cst (utype, 0);
6909   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6910     {
6911       tree bitpos = bit_position (field);
6912       if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
6913         return value;
6914       if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
6915           && TREE_CODE (value) == INTEGER_CST
6916           && host_integerp (bitpos, 0)
6917           && host_integerp (DECL_SIZE (field), 0))
6918         {
6919           HOST_WIDE_INT bit = tree_low_cst (bitpos, 0);
6920           HOST_WIDE_INT sz = tree_low_cst (DECL_SIZE (field), 0);
6921           HOST_WIDE_INT shift;
6922           if (bit >= istart && bit + sz <= istart + isize)
6923             {
6924               fldval = fold_convert (utype, value);
6925               mask = build_int_cst_type (utype, -1);
6926               mask = fold_build2 (LSHIFT_EXPR, utype, mask,
6927                                   size_int (TYPE_PRECISION (utype) - sz));
6928               mask = fold_build2 (RSHIFT_EXPR, utype, mask,
6929                                   size_int (TYPE_PRECISION (utype) - sz));
6930               fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
6931               shift = bit - istart;
6932               if (BYTES_BIG_ENDIAN)
6933                 shift = TYPE_PRECISION (utype) - shift - sz;
6934               fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
6935                                     size_int (shift));
6936               retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
6937               fld_seen = true;
6938             }
6939         }
6940     }
6941   if (fld_seen)
6942     return fold_convert (TREE_TYPE (t), retval);
6943   gcc_unreachable ();
6944   return error_mark_node;
6945 }
6946
6947 /* Subroutine of cxx_eval_constant_expression.
6948    Evaluate a short-circuited logical expression T in the context
6949    of a given constexpr CALL.  BAILOUT_VALUE is the value for
6950    early return.  CONTINUE_VALUE is used here purely for
6951    sanity check purposes.  */
6952
6953 static tree
6954 cxx_eval_logical_expression (const constexpr_call *call, tree t,
6955                              tree bailout_value, tree continue_value,
6956                              bool allow_non_constant, bool addr,
6957                              bool *non_constant_p)
6958 {
6959   tree r;
6960   tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6961                                            allow_non_constant, addr,
6962                                            non_constant_p);
6963   VERIFY_CONSTANT (lhs);
6964   if (tree_int_cst_equal (lhs, bailout_value))
6965     return lhs;
6966   gcc_assert (tree_int_cst_equal (lhs, continue_value));
6967   r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6968                                     allow_non_constant, addr, non_constant_p);
6969   VERIFY_CONSTANT (r);
6970   return r;
6971 }
6972
6973 /* REF is a COMPONENT_REF designating a particular field.  V is a vector of
6974    CONSTRUCTOR elements to initialize (part of) an object containing that
6975    field.  Return a pointer to the constructor_elt corresponding to the
6976    initialization of the field.  */
6977
6978 static constructor_elt *
6979 base_field_constructor_elt (VEC(constructor_elt,gc) *v, tree ref)
6980 {
6981   tree aggr = TREE_OPERAND (ref, 0);
6982   tree field = TREE_OPERAND (ref, 1);
6983   HOST_WIDE_INT i;
6984   constructor_elt *ce;
6985
6986   gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
6987
6988   if (TREE_CODE (aggr) == COMPONENT_REF)
6989     {
6990       constructor_elt *base_ce
6991         = base_field_constructor_elt (v, aggr);
6992       v = CONSTRUCTOR_ELTS (base_ce->value);
6993     }
6994
6995   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
6996     if (ce->index == field)
6997       return ce;
6998
6999   gcc_unreachable ();
7000   return NULL;
7001 }
7002
7003 /* Subroutine of cxx_eval_constant_expression.
7004    The expression tree T denotes a C-style array or a C-style
7005    aggregate.  Reduce it to a constant expression.  */
7006
7007 static tree
7008 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
7009                          bool allow_non_constant, bool addr,
7010                          bool *non_constant_p)
7011 {
7012   VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
7013   VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc,
7014                                           VEC_length (constructor_elt, v));
7015   constructor_elt *ce;
7016   HOST_WIDE_INT i;
7017   bool changed = false;
7018   gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
7019   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7020     {
7021       tree elt = cxx_eval_constant_expression (call, ce->value,
7022                                                allow_non_constant, addr,
7023                                                non_constant_p);
7024       /* Don't VERIFY_CONSTANT here.  */
7025       if (allow_non_constant && *non_constant_p)
7026         goto fail;
7027       if (elt != ce->value)
7028         changed = true;
7029       if (TREE_CODE (ce->index) == COMPONENT_REF)
7030         {
7031           /* This is an initialization of a vfield inside a base
7032              subaggregate that we already initialized; push this
7033              initialization into the previous initialization.  */
7034           constructor_elt *inner = base_field_constructor_elt (n, ce->index);
7035           inner->value = elt;
7036         }
7037       else if (TREE_CODE (ce->index) == NOP_EXPR)
7038         {
7039           /* This is an initializer for an empty base; now that we've
7040              checked that it's constant, we can ignore it.  */
7041           gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (ce->index))));
7042         }
7043       else
7044         CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
7045     }
7046   if (*non_constant_p || !changed)
7047     {
7048     fail:
7049       VEC_free (constructor_elt, gc, n);
7050       return t;
7051     }
7052   t = build_constructor (TREE_TYPE (t), n);
7053   TREE_CONSTANT (t) = true;
7054   return t;
7055 }
7056
7057 /* Subroutine of cxx_eval_constant_expression.
7058    The expression tree T is a VEC_INIT_EXPR which denotes the desired
7059    initialization of a non-static data member of array type.  Reduce it to a
7060    CONSTRUCTOR.
7061
7062    Note that apart from value-initialization (when VALUE_INIT is true),
7063    this is only intended to support value-initialization and the
7064    initializations done by defaulted constructors for classes with
7065    non-static data members of array type.  In this case, VEC_INIT_EXPR_INIT
7066    will either be NULL_TREE for the default constructor, or a COMPONENT_REF
7067    for the copy/move constructor.  */
7068
7069 static tree
7070 cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
7071                      bool value_init, bool allow_non_constant, bool addr,
7072                      bool *non_constant_p)
7073 {
7074   tree elttype = TREE_TYPE (atype);
7075   int max = tree_low_cst (array_type_nelts (atype), 0);
7076   VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc, max + 1);
7077   bool pre_init = false;
7078   int i;
7079
7080   /* For the default constructor, build up a call to the default
7081      constructor of the element type.  We only need to handle class types
7082      here, as for a constructor to be constexpr, all members must be
7083      initialized, which for a defaulted default constructor means they must
7084      be of a class type with a constexpr default constructor.  */
7085   if (TREE_CODE (elttype) == ARRAY_TYPE)
7086     /* We only do this at the lowest level.  */;
7087   else if (value_init)
7088     {
7089       init = build_value_init (elttype, tf_warning_or_error);
7090       init = cxx_eval_constant_expression
7091             (call, init, allow_non_constant, addr, non_constant_p);
7092       pre_init = true;
7093     }
7094   else if (!init)
7095     {
7096       VEC(tree,gc) *argvec = make_tree_vector ();
7097       init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
7098                                         &argvec, elttype, LOOKUP_NORMAL,
7099                                         tf_warning_or_error);
7100       release_tree_vector (argvec);
7101       init = cxx_eval_constant_expression (call, init, allow_non_constant,
7102                                            addr, non_constant_p);
7103       pre_init = true;
7104     }
7105
7106   if (*non_constant_p && !allow_non_constant)
7107     goto fail;
7108
7109   for (i = 0; i <= max; ++i)
7110     {
7111       tree idx = build_int_cst (size_type_node, i);
7112       tree eltinit;
7113       if (TREE_CODE (elttype) == ARRAY_TYPE)
7114         {
7115           /* A multidimensional array; recurse.  */
7116           if (value_init || init == NULL_TREE)
7117             eltinit = NULL_TREE;
7118           else
7119             eltinit = cp_build_array_ref (input_location, init, idx,
7120                                           tf_warning_or_error);
7121           eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
7122                                          allow_non_constant, addr,
7123                                          non_constant_p);
7124         }
7125       else if (pre_init)
7126         {
7127           /* Initializing an element using value or default initialization
7128              we just pre-built above.  */
7129           if (i == 0)
7130             eltinit = init;
7131           else
7132             eltinit = unshare_expr (init);
7133         }
7134       else
7135         {
7136           /* Copying an element.  */
7137           VEC(tree,gc) *argvec;
7138           gcc_assert (same_type_ignoring_top_level_qualifiers_p
7139                       (atype, TREE_TYPE (init)));
7140           eltinit = cp_build_array_ref (input_location, init, idx,
7141                                         tf_warning_or_error);
7142           if (!real_lvalue_p (init))
7143             eltinit = move (eltinit);
7144           argvec = make_tree_vector ();
7145           VEC_quick_push (tree, argvec, eltinit);
7146           eltinit = (build_special_member_call
7147                      (NULL_TREE, complete_ctor_identifier, &argvec,
7148                       elttype, LOOKUP_NORMAL, tf_warning_or_error));
7149           release_tree_vector (argvec);
7150           eltinit = cxx_eval_constant_expression
7151             (call, eltinit, allow_non_constant, addr, non_constant_p);
7152         }
7153       if (*non_constant_p && !allow_non_constant)
7154         goto fail;
7155       CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
7156     }
7157
7158   if (!*non_constant_p)
7159     {
7160       init = build_constructor (atype, n);
7161       TREE_CONSTANT (init) = true;
7162       return init;
7163     }
7164
7165  fail:
7166   VEC_free (constructor_elt, gc, n);
7167   return init;
7168 }
7169
7170 static tree
7171 cxx_eval_vec_init (const constexpr_call *call, tree t,
7172                    bool allow_non_constant, bool addr,
7173                    bool *non_constant_p)
7174 {
7175   tree atype = TREE_TYPE (t);
7176   tree init = VEC_INIT_EXPR_INIT (t);
7177   tree r = cxx_eval_vec_init_1 (call, atype, init,
7178                                 VEC_INIT_EXPR_VALUE_INIT (t),
7179                                 allow_non_constant, addr, non_constant_p);
7180   if (*non_constant_p)
7181     return t;
7182   else
7183     return r;
7184 }
7185
7186 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
7187    match.  We want to be less strict for simple *& folding; if we have a
7188    non-const temporary that we access through a const pointer, that should
7189    work.  We handle this here rather than change fold_indirect_ref_1
7190    because we're dealing with things like ADDR_EXPR of INTEGER_CST which
7191    don't really make sense outside of constant expression evaluation.  Also
7192    we want to allow folding to COMPONENT_REF, which could cause trouble
7193    with TBAA in fold_indirect_ref_1.
7194
7195    Try to keep this function synced with fold_indirect_ref_1.  */
7196
7197 static tree
7198 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
7199 {
7200   tree sub, subtype;
7201
7202   sub = op0;
7203   STRIP_NOPS (sub);
7204   subtype = TREE_TYPE (sub);
7205   if (!POINTER_TYPE_P (subtype))
7206     return NULL_TREE;
7207
7208   if (TREE_CODE (sub) == ADDR_EXPR)
7209     {
7210       tree op = TREE_OPERAND (sub, 0);
7211       tree optype = TREE_TYPE (op);
7212
7213       /* *&CONST_DECL -> to the value of the const decl.  */
7214       if (TREE_CODE (op) == CONST_DECL)
7215         return DECL_INITIAL (op);
7216       /* *&p => p;  make sure to handle *&"str"[cst] here.  */
7217       if (same_type_ignoring_top_level_qualifiers_p (optype, type))
7218         {
7219           tree fop = fold_read_from_constant_string (op);
7220           if (fop)
7221             return fop;
7222           else
7223             return op;
7224         }
7225       /* *(foo *)&fooarray => fooarray[0] */
7226       else if (TREE_CODE (optype) == ARRAY_TYPE
7227                && (same_type_ignoring_top_level_qualifiers_p
7228                    (type, TREE_TYPE (optype))))
7229         {
7230           tree type_domain = TYPE_DOMAIN (optype);
7231           tree min_val = size_zero_node;
7232           if (type_domain && TYPE_MIN_VALUE (type_domain))
7233             min_val = TYPE_MIN_VALUE (type_domain);
7234           return build4_loc (loc, ARRAY_REF, type, op, min_val,
7235                              NULL_TREE, NULL_TREE);
7236         }
7237       /* *(foo *)&complexfoo => __real__ complexfoo */
7238       else if (TREE_CODE (optype) == COMPLEX_TYPE
7239                && (same_type_ignoring_top_level_qualifiers_p
7240                    (type, TREE_TYPE (optype))))
7241         return fold_build1_loc (loc, REALPART_EXPR, type, op);
7242       /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
7243       else if (TREE_CODE (optype) == VECTOR_TYPE
7244                && (same_type_ignoring_top_level_qualifiers_p
7245                    (type, TREE_TYPE (optype))))
7246         {
7247           tree part_width = TYPE_SIZE (type);
7248           tree index = bitsize_int (0);
7249           return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
7250         }
7251       /* Also handle conversion to an empty base class, which
7252          is represented with a NOP_EXPR.  */
7253       else if (is_empty_class (type)
7254                && CLASS_TYPE_P (optype)
7255                && DERIVED_FROM_P (type, optype))
7256         {
7257           *empty_base = true;
7258           return op;
7259         }
7260       /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
7261       else if (RECORD_OR_UNION_TYPE_P (optype))
7262         {
7263           tree field = TYPE_FIELDS (optype);
7264           for (; field; field = DECL_CHAIN (field))
7265             if (TREE_CODE (field) == FIELD_DECL
7266                 && integer_zerop (byte_position (field))
7267                 && (same_type_ignoring_top_level_qualifiers_p
7268                     (TREE_TYPE (field), type)))
7269               {
7270                 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
7271                 break;
7272               }
7273         }
7274     }
7275   else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
7276            && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
7277     {
7278       tree op00 = TREE_OPERAND (sub, 0);
7279       tree op01 = TREE_OPERAND (sub, 1);
7280
7281       STRIP_NOPS (op00);
7282       if (TREE_CODE (op00) == ADDR_EXPR)
7283         {
7284           tree op00type;
7285           op00 = TREE_OPERAND (op00, 0);
7286           op00type = TREE_TYPE (op00);
7287
7288           /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
7289           if (TREE_CODE (op00type) == VECTOR_TYPE
7290               && (same_type_ignoring_top_level_qualifiers_p
7291                   (type, TREE_TYPE (op00type))))
7292             {
7293               HOST_WIDE_INT offset = tree_low_cst (op01, 0);
7294               tree part_width = TYPE_SIZE (type);
7295               unsigned HOST_WIDE_INT part_widthi = tree_low_cst (part_width, 0)/BITS_PER_UNIT;
7296               unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
7297               tree index = bitsize_int (indexi);
7298
7299               if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
7300                 return fold_build3_loc (loc,
7301                                         BIT_FIELD_REF, type, op00,
7302                                         part_width, index);
7303
7304             }
7305           /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
7306           else if (TREE_CODE (op00type) == COMPLEX_TYPE
7307                    && (same_type_ignoring_top_level_qualifiers_p
7308                        (type, TREE_TYPE (op00type))))
7309             {
7310               tree size = TYPE_SIZE_UNIT (type);
7311               if (tree_int_cst_equal (size, op01))
7312                 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
7313             }
7314           /* ((foo *)&fooarray)[1] => fooarray[1] */
7315           else if (TREE_CODE (op00type) == ARRAY_TYPE
7316                    && (same_type_ignoring_top_level_qualifiers_p
7317                        (type, TREE_TYPE (op00type))))
7318             {
7319               tree type_domain = TYPE_DOMAIN (op00type);
7320               tree min_val = size_zero_node;
7321               if (type_domain && TYPE_MIN_VALUE (type_domain))
7322                 min_val = TYPE_MIN_VALUE (type_domain);
7323               op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
7324                                      TYPE_SIZE_UNIT (type));
7325               op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
7326               return build4_loc (loc, ARRAY_REF, type, op00, op01,
7327                                  NULL_TREE, NULL_TREE);
7328             }
7329           /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
7330           else if (RECORD_OR_UNION_TYPE_P (op00type))
7331             {
7332               tree field = TYPE_FIELDS (op00type);
7333               for (; field; field = DECL_CHAIN (field))
7334                 if (TREE_CODE (field) == FIELD_DECL
7335                     && tree_int_cst_equal (byte_position (field), op01)
7336                     && (same_type_ignoring_top_level_qualifiers_p
7337                         (TREE_TYPE (field), type)))
7338                   {
7339                     return fold_build3 (COMPONENT_REF, type, op00,
7340                                      field, NULL_TREE);
7341                     break;
7342                   }
7343             }
7344         }
7345     }
7346   /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
7347   else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
7348            && (same_type_ignoring_top_level_qualifiers_p
7349                (type, TREE_TYPE (TREE_TYPE (subtype)))))
7350     {
7351       tree type_domain;
7352       tree min_val = size_zero_node;
7353       sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
7354       if (!sub)
7355         sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
7356       type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
7357       if (type_domain && TYPE_MIN_VALUE (type_domain))
7358         min_val = TYPE_MIN_VALUE (type_domain);
7359       return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
7360                          NULL_TREE);
7361     }
7362
7363   return NULL_TREE;
7364 }
7365
7366 static tree
7367 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
7368                        bool allow_non_constant, bool addr,
7369                        bool *non_constant_p)
7370 {
7371   tree orig_op0 = TREE_OPERAND (t, 0);
7372   tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
7373                                            /*addr*/false, non_constant_p);
7374   bool empty_base = false;
7375   tree r;
7376
7377   /* Don't VERIFY_CONSTANT here.  */
7378   if (*non_constant_p)
7379     return t;
7380
7381   r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
7382                              &empty_base);
7383
7384   if (r)
7385     r = cxx_eval_constant_expression (call, r, allow_non_constant,
7386                                       addr, non_constant_p);
7387   else
7388     {
7389       tree sub = op0;
7390       STRIP_NOPS (sub);
7391       if (TREE_CODE (sub) == POINTER_PLUS_EXPR)
7392         {
7393           sub = TREE_OPERAND (sub, 0);
7394           STRIP_NOPS (sub);
7395         }
7396       if (TREE_CODE (sub) == ADDR_EXPR)
7397         {
7398           /* We couldn't fold to a constant value.  Make sure it's not
7399              something we should have been able to fold.  */
7400           gcc_assert (!same_type_ignoring_top_level_qualifiers_p
7401                       (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
7402           /* DR 1188 says we don't have to deal with this.  */
7403           if (!allow_non_constant)
7404             error ("accessing value of %qE through a %qT glvalue in a "
7405                    "constant expression", build_fold_indirect_ref (sub),
7406                    TREE_TYPE (t));
7407           *non_constant_p = true;
7408           return t;
7409         }
7410     }
7411
7412   /* If we're pulling out the value of an empty base, make sure
7413      that the whole object is constant and then return an empty
7414      CONSTRUCTOR.  */
7415   if (empty_base)
7416     {
7417       VERIFY_CONSTANT (r);
7418       r = build_constructor (TREE_TYPE (t), NULL);
7419       TREE_CONSTANT (r) = true;
7420     }
7421
7422   if (r == NULL_TREE)
7423     return t;
7424   return r;
7425 }
7426
7427 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
7428    Shared between potential_constant_expression and
7429    cxx_eval_constant_expression.  */
7430
7431 static void
7432 non_const_var_error (tree r)
7433 {
7434   tree type = TREE_TYPE (r);
7435   error ("the value of %qD is not usable in a constant "
7436          "expression", r);
7437   /* Avoid error cascade.  */
7438   if (DECL_INITIAL (r) == error_mark_node)
7439     return;
7440   if (DECL_DECLARED_CONSTEXPR_P (r))
7441     inform (DECL_SOURCE_LOCATION (r),
7442             "%qD used in its own initializer", r);
7443   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7444     {
7445       if (!CP_TYPE_CONST_P (type))
7446         inform (DECL_SOURCE_LOCATION (r),
7447                 "%q#D is not const", r);
7448       else if (CP_TYPE_VOLATILE_P (type))
7449         inform (DECL_SOURCE_LOCATION (r),
7450                 "%q#D is volatile", r);
7451       else if (!DECL_INITIAL (r)
7452                || !TREE_CONSTANT (DECL_INITIAL (r)))
7453         inform (DECL_SOURCE_LOCATION (r),
7454                 "%qD was not initialized with a constant "
7455                 "expression", r);
7456       else
7457         gcc_unreachable ();
7458     }
7459   else
7460     {
7461       if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
7462         inform (DECL_SOURCE_LOCATION (r),
7463                 "%qD was not declared %<constexpr%>", r);
7464       else
7465         inform (DECL_SOURCE_LOCATION (r),
7466                 "%qD does not have integral or enumeration type",
7467                 r);
7468     }
7469 }
7470
7471 /* Attempt to reduce the expression T to a constant value.
7472    On failure, issue diagnostic and return error_mark_node.  */
7473 /* FIXME unify with c_fully_fold */
7474
7475 static tree
7476 cxx_eval_constant_expression (const constexpr_call *call, tree t,
7477                               bool allow_non_constant, bool addr,
7478                               bool *non_constant_p)
7479 {
7480   tree r = t;
7481
7482   if (t == error_mark_node)
7483     {
7484       *non_constant_p = true;
7485       return t;
7486     }
7487   if (CONSTANT_CLASS_P (t))
7488     {
7489       if (TREE_CODE (t) == PTRMEM_CST)
7490         t = cplus_expand_constant (t);
7491       return t;
7492     }
7493   if (TREE_CODE (t) != NOP_EXPR
7494       && reduced_constant_expression_p (t))
7495     return fold (t);
7496
7497   switch (TREE_CODE (t))
7498     {
7499     case VAR_DECL:
7500       if (addr)
7501         return t;
7502       /* else fall through. */
7503     case CONST_DECL:
7504       r = integral_constant_value (t);
7505       if (TREE_CODE (r) == TARGET_EXPR
7506           && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
7507         r = TARGET_EXPR_INITIAL (r);
7508       if (DECL_P (r))
7509         {
7510           if (!allow_non_constant)
7511             non_const_var_error (r);
7512           *non_constant_p = true;
7513         }
7514       break;
7515
7516     case FUNCTION_DECL:
7517     case TEMPLATE_DECL:
7518     case LABEL_DECL:
7519       return t;
7520
7521     case PARM_DECL:
7522       if (call && DECL_CONTEXT (t) == call->fundef->decl)
7523         {
7524           if (DECL_ARTIFICIAL (t) && DECL_CONSTRUCTOR_P (DECL_CONTEXT (t)))
7525             {
7526               if (!allow_non_constant)
7527                 sorry ("use of the value of the object being constructed "
7528                        "in a constant expression");
7529               *non_constant_p = true;
7530             }
7531           else
7532             r = lookup_parameter_binding (call, t);
7533         }
7534       else if (addr)
7535         /* Defer in case this is only used for its type.  */;
7536       else
7537         {
7538           if (!allow_non_constant)
7539             error ("%qE is not a constant expression", t);
7540           *non_constant_p = true;
7541         }
7542       break;
7543
7544     case CALL_EXPR:
7545     case AGGR_INIT_EXPR:
7546       r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
7547                                     non_constant_p);
7548       break;
7549
7550     case TARGET_EXPR:
7551       if (!literal_type_p (TREE_TYPE (t)))
7552         {
7553           if (!allow_non_constant)
7554             {
7555               error ("temporary of non-literal type %qT in a "
7556                      "constant expression", TREE_TYPE (t));
7557               explain_non_literal_class (TREE_TYPE (t));
7558             }
7559           *non_constant_p = true;
7560           break;
7561         }
7562       /* else fall through.  */
7563     case INIT_EXPR:
7564       /* Pass false for 'addr' because these codes indicate
7565          initialization of a temporary.  */
7566       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7567                                         allow_non_constant, false,
7568                                         non_constant_p);
7569       if (!*non_constant_p)
7570         /* Adjust the type of the result to the type of the temporary.  */
7571         r = adjust_temp_type (TREE_TYPE (t), r);
7572       break;
7573
7574     case SCOPE_REF:
7575       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7576                                         allow_non_constant, addr,
7577                                         non_constant_p);
7578       break;
7579
7580     case RETURN_EXPR:
7581     case NON_LVALUE_EXPR:
7582     case TRY_CATCH_EXPR:
7583     case CLEANUP_POINT_EXPR:
7584     case MUST_NOT_THROW_EXPR:
7585     case SAVE_EXPR:
7586       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7587                                         allow_non_constant, addr,
7588                                         non_constant_p);
7589       break;
7590
7591       /* These differ from cxx_eval_unary_expression in that this doesn't
7592          check for a constant operand or result; an address can be
7593          constant without its operand being, and vice versa.  */
7594     case INDIRECT_REF:
7595       r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
7596                                  non_constant_p);
7597       break;
7598
7599     case ADDR_EXPR:
7600       {
7601         tree oldop = TREE_OPERAND (t, 0);
7602         tree op = cxx_eval_constant_expression (call, oldop,
7603                                                 allow_non_constant,
7604                                                 /*addr*/true,
7605                                                 non_constant_p);
7606         /* Don't VERIFY_CONSTANT here.  */
7607         if (*non_constant_p)
7608           return t;
7609         /* This function does more aggressive folding than fold itself.  */
7610         r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
7611         if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
7612           return t;
7613         break;
7614       }
7615
7616     case REALPART_EXPR:
7617     case IMAGPART_EXPR:
7618     case CONJ_EXPR:
7619     case FIX_TRUNC_EXPR:
7620     case FLOAT_EXPR:
7621     case NEGATE_EXPR:
7622     case ABS_EXPR:
7623     case BIT_NOT_EXPR:
7624     case TRUTH_NOT_EXPR:
7625     case FIXED_CONVERT_EXPR:
7626       r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
7627                                      non_constant_p);
7628       break;
7629
7630     case COMPOUND_EXPR:
7631       {
7632         /* check_return_expr sometimes wraps a TARGET_EXPR in a
7633            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
7634            introduced by build_call_a.  */
7635         tree op0 = TREE_OPERAND (t, 0);
7636         tree op1 = TREE_OPERAND (t, 1);
7637         STRIP_NOPS (op1);
7638         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7639             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7640           r = cxx_eval_constant_expression (call, op0, allow_non_constant,
7641                                             addr, non_constant_p);
7642         else
7643           {
7644             /* Check that the LHS is constant and then discard it.  */
7645             cxx_eval_constant_expression (call, op0, allow_non_constant,
7646                                           false, non_constant_p);
7647             r = cxx_eval_constant_expression (call, op1, allow_non_constant,
7648                                               addr, non_constant_p);
7649           }
7650       }
7651       break;
7652
7653     case POINTER_PLUS_EXPR:
7654     case PLUS_EXPR:
7655     case MINUS_EXPR:
7656     case MULT_EXPR:
7657     case TRUNC_DIV_EXPR:
7658     case CEIL_DIV_EXPR:
7659     case FLOOR_DIV_EXPR:
7660     case ROUND_DIV_EXPR:
7661     case TRUNC_MOD_EXPR:
7662     case CEIL_MOD_EXPR:
7663     case ROUND_MOD_EXPR:
7664     case RDIV_EXPR:
7665     case EXACT_DIV_EXPR:
7666     case MIN_EXPR:
7667     case MAX_EXPR:
7668     case LSHIFT_EXPR:
7669     case RSHIFT_EXPR:
7670     case LROTATE_EXPR:
7671     case RROTATE_EXPR:
7672     case BIT_IOR_EXPR:
7673     case BIT_XOR_EXPR:
7674     case BIT_AND_EXPR:
7675     case TRUTH_XOR_EXPR:
7676     case LT_EXPR:
7677     case LE_EXPR:
7678     case GT_EXPR:
7679     case GE_EXPR:
7680     case EQ_EXPR:
7681     case NE_EXPR:
7682     case UNORDERED_EXPR:
7683     case ORDERED_EXPR:
7684     case UNLT_EXPR:
7685     case UNLE_EXPR:
7686     case UNGT_EXPR:
7687     case UNGE_EXPR:
7688     case UNEQ_EXPR:
7689     case RANGE_EXPR:
7690     case COMPLEX_EXPR:
7691       r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
7692                                       non_constant_p);
7693       break;
7694
7695       /* fold can introduce non-IF versions of these; still treat them as
7696          short-circuiting.  */
7697     case TRUTH_AND_EXPR:
7698     case TRUTH_ANDIF_EXPR:
7699       r = cxx_eval_logical_expression (call, t, boolean_false_node,
7700                                        boolean_true_node,
7701                                        allow_non_constant, addr,
7702                                        non_constant_p);
7703       break;
7704
7705     case TRUTH_OR_EXPR:
7706     case TRUTH_ORIF_EXPR:
7707       r = cxx_eval_logical_expression (call, t, boolean_true_node,
7708                                        boolean_false_node,
7709                                        allow_non_constant, addr,
7710                                        non_constant_p);
7711       break;
7712
7713     case ARRAY_REF:
7714       r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
7715                                     non_constant_p);
7716       break;
7717
7718     case COMPONENT_REF:
7719       r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
7720                                         non_constant_p);
7721       break;
7722
7723     case BIT_FIELD_REF:
7724       r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
7725                                   non_constant_p);
7726       break;
7727
7728     case COND_EXPR:
7729     case VEC_COND_EXPR:
7730       r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
7731                                            non_constant_p);
7732       break;
7733
7734     case CONSTRUCTOR:
7735       r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
7736                                    non_constant_p);
7737       break;
7738
7739     case VEC_INIT_EXPR:
7740       /* We can get this in a defaulted constructor for a class with a
7741          non-static data member of array type.  Either the initializer will
7742          be NULL, meaning default-initialization, or it will be an lvalue
7743          or xvalue of the same type, meaning direct-initialization from the
7744          corresponding member.  */
7745       r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
7746                              non_constant_p);
7747       break;
7748
7749     case CONVERT_EXPR:
7750     case VIEW_CONVERT_EXPR:
7751     case NOP_EXPR:
7752       {
7753         tree oldop = TREE_OPERAND (t, 0);
7754         tree op = oldop;
7755         tree to = TREE_TYPE (t);
7756         op = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7757                                            allow_non_constant, addr,
7758                                            non_constant_p);
7759         if (*non_constant_p)
7760           return t;
7761         if (op == oldop)
7762           /* We didn't fold at the top so we could check for ptr-int
7763              conversion.  */
7764           return fold (t);
7765         r = fold_build1 (TREE_CODE (t), to, op);
7766         /* Conversion of an out-of-range value has implementation-defined
7767            behavior; the language considers it different from arithmetic
7768            overflow, which is undefined.  */
7769         if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
7770           TREE_OVERFLOW (r) = false;
7771       }
7772       break;
7773
7774     case EMPTY_CLASS_EXPR:
7775       /* This is good enough for a function argument that might not get
7776          used, and they can't do anything with it, so just return it.  */
7777       return t;
7778
7779     case LAMBDA_EXPR:
7780     case PREINCREMENT_EXPR:
7781     case POSTINCREMENT_EXPR:
7782     case PREDECREMENT_EXPR:
7783     case POSTDECREMENT_EXPR:
7784     case NEW_EXPR:
7785     case VEC_NEW_EXPR:
7786     case DELETE_EXPR:
7787     case VEC_DELETE_EXPR:
7788     case THROW_EXPR:
7789     case MODIFY_EXPR:
7790     case MODOP_EXPR:
7791       /* GCC internal stuff.  */
7792     case VA_ARG_EXPR:
7793     case OBJ_TYPE_REF:
7794     case WITH_CLEANUP_EXPR:
7795     case STATEMENT_LIST:
7796     case BIND_EXPR:
7797     case NON_DEPENDENT_EXPR:
7798     case BASELINK:
7799     case EXPR_STMT:
7800     case OFFSET_REF:
7801       if (!allow_non_constant)
7802         error_at (EXPR_LOC_OR_HERE (t),
7803                   "expression %qE is not a constant-expression", t);
7804       *non_constant_p = true;
7805       break;
7806
7807     default:
7808       internal_error ("unexpected expression %qE of kind %s", t,
7809                       tree_code_name[TREE_CODE (t)]);
7810       *non_constant_p = true;
7811       break;
7812     }
7813
7814   if (r == error_mark_node)
7815     *non_constant_p = true;
7816
7817   if (*non_constant_p)
7818     return t;
7819   else
7820     return r;
7821 }
7822
7823 static tree
7824 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
7825 {
7826   bool non_constant_p = false;
7827   tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
7828                                          false, &non_constant_p);
7829
7830   verify_constant (r, allow_non_constant, &non_constant_p);
7831
7832   if (TREE_CODE (t) != CONSTRUCTOR
7833       && cp_has_mutable_p (TREE_TYPE (t)))
7834     {
7835       /* We allow a mutable type if the original expression was a
7836          CONSTRUCTOR so that we can do aggregate initialization of
7837          constexpr variables.  */
7838       if (!allow_non_constant)
7839         error ("%qT cannot be the type of a complete constant expression "
7840                "because it has mutable sub-objects", TREE_TYPE (t));
7841       non_constant_p = true;
7842     }
7843
7844   /* Technically we should check this for all subexpressions, but that
7845      runs into problems with our internal representation of pointer
7846      subtraction and the 5.19 rules are still in flux.  */
7847   if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
7848       && ARITHMETIC_TYPE_P (TREE_TYPE (r))
7849       && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
7850     {
7851       if (!allow_non_constant)
7852         error ("conversion from pointer type %qT "
7853                "to arithmetic type %qT in a constant-expression",
7854                TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
7855       non_constant_p = true;
7856     }
7857
7858   if (non_constant_p && !allow_non_constant)
7859     return error_mark_node;
7860   else if (non_constant_p && TREE_CONSTANT (t))
7861     {
7862       /* This isn't actually constant, so unset TREE_CONSTANT.  */
7863       if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
7864         r = copy_node (t);
7865       else
7866         r = build_nop (TREE_TYPE (t), t);
7867       TREE_CONSTANT (r) = false;
7868       return r;
7869     }
7870   else if (non_constant_p || r == t)
7871     return t;
7872   else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
7873     {
7874       if (TREE_CODE (t) == TARGET_EXPR
7875           && TARGET_EXPR_INITIAL (t) == r)
7876         return t;
7877       else
7878         {
7879           r = get_target_expr (r);
7880           TREE_CONSTANT (r) = true;
7881           return r;
7882         }
7883     }
7884   else
7885     return r;
7886 }
7887
7888 /* Returns true if T is a valid subexpression of a constant expression,
7889    even if it isn't itself a constant expression.  */
7890
7891 bool
7892 is_sub_constant_expr (tree t)
7893 {
7894   bool non_constant_p = false;
7895   cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
7896   return !non_constant_p;
7897 }
7898
7899 /* If T represents a constant expression returns its reduced value.
7900    Otherwise return error_mark_node.  If T is dependent, then
7901    return NULL.  */
7902
7903 tree
7904 cxx_constant_value (tree t)
7905 {
7906   return cxx_eval_outermost_constant_expr (t, false);
7907 }
7908
7909 /* If T is a constant expression, returns its reduced value.
7910    Otherwise, if T does not have TREE_CONSTANT set, returns T.
7911    Otherwise, returns a version of T without TREE_CONSTANT.  */
7912
7913 tree
7914 maybe_constant_value (tree t)
7915 {
7916   tree r;
7917
7918   if (type_dependent_expression_p (t)
7919       || type_unknown_p (t)
7920       || BRACE_ENCLOSED_INITIALIZER_P (t)
7921       || !potential_constant_expression (t)
7922       || value_dependent_expression_p (t))
7923     {
7924       if (TREE_OVERFLOW_P (t))
7925         {
7926           t = build_nop (TREE_TYPE (t), t);
7927           TREE_CONSTANT (t) = false;
7928         }
7929       return t;
7930     }
7931
7932   r = cxx_eval_outermost_constant_expr (t, true);
7933 #ifdef ENABLE_CHECKING
7934   /* cp_tree_equal looks through NOPs, so allow them.  */
7935   gcc_assert (r == t
7936               || CONVERT_EXPR_P (t)
7937               || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
7938               || !cp_tree_equal (r, t));
7939 #endif
7940   return r;
7941 }
7942
7943 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
7944    than wrapped in a TARGET_EXPR.  */
7945
7946 tree
7947 maybe_constant_init (tree t)
7948 {
7949   t = maybe_constant_value (t);
7950   if (TREE_CODE (t) == TARGET_EXPR)
7951     {
7952       tree init = TARGET_EXPR_INITIAL (t);
7953       if (TREE_CODE (init) == CONSTRUCTOR
7954           && TREE_CONSTANT (init))
7955         t = init;
7956     }
7957   return t;
7958 }
7959
7960 #if 0
7961 /* FIXME see ADDR_EXPR section in potential_constant_expression_1.  */
7962 /* Return true if the object referred to by REF has automatic or thread
7963    local storage.  */
7964
7965 enum { ck_ok, ck_bad, ck_unknown };
7966 static int
7967 check_automatic_or_tls (tree ref)
7968 {
7969   enum machine_mode mode;
7970   HOST_WIDE_INT bitsize, bitpos;
7971   tree offset;
7972   int volatilep = 0, unsignedp = 0;
7973   tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
7974                                    &mode, &unsignedp, &volatilep, false);
7975   duration_kind dk;
7976
7977   /* If there isn't a decl in the middle, we don't know the linkage here,
7978      and this isn't a constant expression anyway.  */
7979   if (!DECL_P (decl))
7980     return ck_unknown;
7981   dk = decl_storage_duration (decl);
7982   return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
7983 }
7984 #endif
7985
7986 /* Return true if T denotes a potentially constant expression.  Issue
7987    diagnostic as appropriate under control of FLAGS.  If WANT_RVAL is true,
7988    an lvalue-rvalue conversion is implied.
7989
7990    C++0x [expr.const] used to say
7991
7992    6 An expression is a potential constant expression if it is
7993      a constant expression where all occurences of function
7994      parameters are replaced by arbitrary constant expressions
7995      of the appropriate type.
7996
7997    2  A conditional expression is a constant expression unless it
7998       involves one of the following as a potentially evaluated
7999       subexpression (3.2), but subexpressions of logical AND (5.14),
8000       logical OR (5.15), and conditional (5.16) operations that are
8001       not evaluated are not considered.   */
8002
8003 static bool
8004 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
8005 {
8006   enum { any = false, rval = true };
8007   int i;
8008   tree tmp;
8009
8010   /* C++98 has different rules for the form of a constant expression that
8011      are enforced in the parser, so we can assume that anything that gets
8012      this far is suitable.  */
8013   if (cxx_dialect < cxx0x)
8014     return true;
8015
8016   if (t == error_mark_node)
8017     return false;
8018   if (t == NULL_TREE)
8019     return true;
8020   if (TREE_THIS_VOLATILE (t))
8021     {
8022       if (flags & tf_error)
8023         error ("expression %qE has side-effects", t);
8024       return false;
8025     }
8026   if (CONSTANT_CLASS_P (t))
8027     {
8028       if (TREE_OVERFLOW (t))
8029         {
8030           if (flags & tf_error)
8031             {
8032               permerror (EXPR_LOC_OR_HERE (t),
8033                          "overflow in constant expression");
8034               if (flag_permissive)
8035                 return true;
8036             }
8037           return false;
8038         }
8039       return true;
8040     }
8041
8042   switch (TREE_CODE (t))
8043     {
8044     case FUNCTION_DECL:
8045     case BASELINK:
8046     case TEMPLATE_DECL:
8047     case OVERLOAD:
8048     case TEMPLATE_ID_EXPR:
8049     case LABEL_DECL:
8050     case CONST_DECL:
8051     case SIZEOF_EXPR:
8052     case ALIGNOF_EXPR:
8053     case OFFSETOF_EXPR:
8054     case NOEXCEPT_EXPR:
8055     case TEMPLATE_PARM_INDEX:
8056     case TRAIT_EXPR:
8057     case IDENTIFIER_NODE:
8058     case USERDEF_LITERAL:
8059       /* We can see a FIELD_DECL in a pointer-to-member expression.  */
8060     case FIELD_DECL:
8061     case PARM_DECL:
8062     case USING_DECL:
8063       return true;
8064
8065     case AGGR_INIT_EXPR:
8066     case CALL_EXPR:
8067       /* -- an invocation of a function other than a constexpr function
8068             or a constexpr constructor.  */
8069       {
8070         tree fun = get_function_named_in_call (t);
8071         const int nargs = call_expr_nargs (t);
8072         i = 0;
8073
8074         if (is_overloaded_fn (fun))
8075           {
8076             if (TREE_CODE (fun) == FUNCTION_DECL)
8077               {
8078                 if (builtin_valid_in_constant_expr_p (fun))
8079                   return true;
8080                 if (!DECL_DECLARED_CONSTEXPR_P (fun)
8081                     /* Allow any built-in function; if the expansion
8082                        isn't constant, we'll deal with that then.  */
8083                     && !is_builtin_fn (fun))
8084                   {
8085                     if (flags & tf_error)
8086                       {
8087                         error_at (EXPR_LOC_OR_HERE (t),
8088                                   "call to non-constexpr function %qD", fun);
8089                         explain_invalid_constexpr_fn (fun);
8090                       }
8091                     return false;
8092                   }
8093                 /* A call to a non-static member function takes the address
8094                    of the object as the first argument.  But in a constant
8095                    expression the address will be folded away, so look
8096                    through it now.  */
8097                 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
8098                     && !DECL_CONSTRUCTOR_P (fun))
8099                   {
8100                     tree x = get_nth_callarg (t, 0);
8101                     if (is_this_parameter (x))
8102                       {
8103                         if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8104                           {
8105                             if (flags & tf_error)
8106                               sorry ("calling a member function of the "
8107                                      "object being constructed in a constant "
8108                                      "expression");
8109                             return false;
8110                           }
8111                         /* Otherwise OK.  */;
8112                       }
8113                     else if (!potential_constant_expression_1 (x, rval, flags))
8114                       return false;
8115                     i = 1;
8116                   }
8117               }
8118             else
8119               fun = get_first_fn (fun);
8120             /* Skip initial arguments to base constructors.  */
8121             if (DECL_BASE_CONSTRUCTOR_P (fun))
8122               i = num_artificial_parms_for (fun);
8123             fun = DECL_ORIGIN (fun);
8124           }
8125         else
8126           {
8127             if (potential_constant_expression_1 (fun, rval, flags))
8128               /* Might end up being a constant function pointer.  */;
8129             else
8130               return false;
8131           }
8132         for (; i < nargs; ++i)
8133           {
8134             tree x = get_nth_callarg (t, i);
8135             if (!potential_constant_expression_1 (x, rval, flags))
8136               return false;
8137           }
8138         return true;
8139       }
8140
8141     case NON_LVALUE_EXPR:
8142       /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
8143             -- an lvalue of integral type that refers to a non-volatile
8144                const variable or static data member initialized with
8145                constant expressions, or
8146
8147             -- an lvalue of literal type that refers to non-volatile
8148                object defined with constexpr, or that refers to a
8149                sub-object of such an object;  */
8150       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8151
8152     case VAR_DECL:
8153       if (want_rval && !decl_constant_var_p (t)
8154           && !dependent_type_p (TREE_TYPE (t)))
8155         {
8156           if (flags & tf_error)
8157             non_const_var_error (t);
8158           return false;
8159         }
8160       return true;
8161
8162     case NOP_EXPR:
8163     case CONVERT_EXPR:
8164     case VIEW_CONVERT_EXPR:
8165       /* -- a reinterpret_cast.  FIXME not implemented, and this rule
8166          may change to something more specific to type-punning (DR 1312).  */
8167       {
8168         tree from = TREE_OPERAND (t, 0);
8169         return (potential_constant_expression_1
8170                 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
8171       }
8172
8173     case ADDR_EXPR:
8174       /* -- a unary operator & that is applied to an lvalue that
8175             designates an object with thread or automatic storage
8176             duration;  */
8177       t = TREE_OPERAND (t, 0);
8178 #if 0
8179       /* FIXME adjust when issue 1197 is fully resolved.  For now don't do
8180          any checking here, as we might dereference the pointer later.  If
8181          we remove this code, also remove check_automatic_or_tls.  */
8182       i = check_automatic_or_tls (t);
8183       if (i == ck_ok)
8184         return true;
8185       if (i == ck_bad)
8186         {
8187           if (flags & tf_error)
8188             error ("address-of an object %qE with thread local or "
8189                    "automatic storage is not a constant expression", t);
8190           return false;
8191         }
8192 #endif
8193       return potential_constant_expression_1 (t, any, flags);
8194
8195     case COMPONENT_REF:
8196     case BIT_FIELD_REF:
8197     case ARROW_EXPR:
8198     case OFFSET_REF:
8199       /* -- a class member access unless its postfix-expression is
8200             of literal type or of pointer to literal type.  */
8201       /* This test would be redundant, as it follows from the
8202          postfix-expression being a potential constant expression.  */
8203       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8204                                               want_rval, flags);
8205
8206     case EXPR_PACK_EXPANSION:
8207       return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
8208                                               want_rval, flags);
8209
8210     case INDIRECT_REF:
8211       {
8212         tree x = TREE_OPERAND (t, 0);
8213         STRIP_NOPS (x);
8214         if (is_this_parameter (x))
8215           {
8216             if (want_rval && DECL_CONTEXT (x)
8217                 && DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8218               {
8219                 if (flags & tf_error)
8220                   sorry ("use of the value of the object being constructed "
8221                          "in a constant expression");
8222                 return false;
8223               }
8224             return true;
8225           }
8226         return potential_constant_expression_1 (x, rval, flags);
8227       }
8228
8229     case LAMBDA_EXPR:
8230     case DYNAMIC_CAST_EXPR:
8231     case PSEUDO_DTOR_EXPR:
8232     case PREINCREMENT_EXPR:
8233     case POSTINCREMENT_EXPR:
8234     case PREDECREMENT_EXPR:
8235     case POSTDECREMENT_EXPR:
8236     case NEW_EXPR:
8237     case VEC_NEW_EXPR:
8238     case DELETE_EXPR:
8239     case VEC_DELETE_EXPR:
8240     case THROW_EXPR:
8241     case MODIFY_EXPR:
8242     case MODOP_EXPR:
8243       /* GCC internal stuff.  */
8244     case VA_ARG_EXPR:
8245     case OBJ_TYPE_REF:
8246     case WITH_CLEANUP_EXPR:
8247     case CLEANUP_POINT_EXPR:
8248     case MUST_NOT_THROW_EXPR:
8249     case TRY_CATCH_EXPR:
8250     case STATEMENT_LIST:
8251       /* Don't bother trying to define a subset of statement-expressions to
8252          be constant-expressions, at least for now.  */
8253     case STMT_EXPR:
8254     case EXPR_STMT:
8255     case BIND_EXPR:
8256     case TRANSACTION_EXPR:
8257     case IF_STMT:
8258     case DO_STMT:
8259     case FOR_STMT:
8260     case WHILE_STMT:
8261       if (flags & tf_error)
8262         error ("expression %qE is not a constant-expression", t);
8263       return false;
8264
8265     case TYPEID_EXPR:
8266       /* -- a typeid expression whose operand is of polymorphic
8267             class type;  */
8268       {
8269         tree e = TREE_OPERAND (t, 0);
8270         if (!TYPE_P (e) && !type_dependent_expression_p (e)
8271             && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
8272           {
8273             if (flags & tf_error)
8274               error ("typeid-expression is not a constant expression "
8275                      "because %qE is of polymorphic type", e);
8276             return false;
8277           }
8278         return true;
8279       }
8280
8281     case MINUS_EXPR:
8282       /* -- a subtraction where both operands are pointers.   */
8283       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8284           && TYPE_PTR_P (TREE_OPERAND (t, 1)))
8285         {
8286           if (flags & tf_error)
8287             error ("difference of two pointer expressions is not "
8288                    "a constant expression");
8289           return false;
8290         }
8291       want_rval = true;
8292       goto binary;
8293
8294     case LT_EXPR:
8295     case LE_EXPR:
8296     case GT_EXPR:
8297     case GE_EXPR:
8298     case EQ_EXPR:
8299     case NE_EXPR:
8300       /* -- a relational or equality operator where at least
8301             one of the operands is a pointer.  */
8302       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8303           || TYPE_PTR_P (TREE_OPERAND (t, 1)))
8304         {
8305           if (flags & tf_error)
8306             error ("pointer comparison expression is not a "
8307                    "constant expression");
8308           return false;
8309         }
8310       want_rval = true;
8311       goto binary;
8312
8313     case BIT_NOT_EXPR:
8314       /* A destructor.  */
8315       if (TYPE_P (TREE_OPERAND (t, 0)))
8316         return true;
8317       /* else fall through.  */
8318
8319     case REALPART_EXPR:
8320     case IMAGPART_EXPR:
8321     case CONJ_EXPR:
8322     case SAVE_EXPR:
8323     case FIX_TRUNC_EXPR:
8324     case FLOAT_EXPR:
8325     case NEGATE_EXPR:
8326     case ABS_EXPR:
8327     case TRUTH_NOT_EXPR:
8328     case FIXED_CONVERT_EXPR:
8329     case UNARY_PLUS_EXPR:
8330       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
8331                                               flags);
8332
8333     case CAST_EXPR:
8334     case CONST_CAST_EXPR:
8335     case STATIC_CAST_EXPR:
8336     case REINTERPRET_CAST_EXPR:
8337     case IMPLICIT_CONV_EXPR:
8338       return (potential_constant_expression_1
8339               (TREE_OPERAND (t, 0),
8340                TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
8341
8342     case PAREN_EXPR:
8343     case NON_DEPENDENT_EXPR:
8344       /* For convenience.  */
8345     case RETURN_EXPR:
8346       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8347                                               want_rval, flags);
8348
8349     case SCOPE_REF:
8350       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8351                                               want_rval, flags);
8352
8353     case TARGET_EXPR:
8354       if (!literal_type_p (TREE_TYPE (t)))
8355         {
8356           if (flags & tf_error)
8357             {
8358               error ("temporary of non-literal type %qT in a "
8359                      "constant expression", TREE_TYPE (t));
8360               explain_non_literal_class (TREE_TYPE (t));
8361             }
8362           return false;
8363         }
8364     case INIT_EXPR:
8365       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8366                                               rval, flags);
8367
8368     case CONSTRUCTOR:
8369       {
8370         VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
8371         constructor_elt *ce;
8372         for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
8373           if (!potential_constant_expression_1 (ce->value, want_rval, flags))
8374             return false;
8375         return true;
8376       }
8377
8378     case TREE_LIST:
8379       {
8380         gcc_assert (TREE_PURPOSE (t) == NULL_TREE
8381                     || DECL_P (TREE_PURPOSE (t)));
8382         if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
8383                                               flags))
8384           return false;
8385         if (TREE_CHAIN (t) == NULL_TREE)
8386           return true;
8387         return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
8388                                                 flags);
8389       }
8390
8391     case TRUNC_DIV_EXPR:
8392     case CEIL_DIV_EXPR:
8393     case FLOOR_DIV_EXPR:
8394     case ROUND_DIV_EXPR:
8395     case TRUNC_MOD_EXPR:
8396     case CEIL_MOD_EXPR:
8397     case ROUND_MOD_EXPR:
8398       {
8399         tree denom = TREE_OPERAND (t, 1);
8400         /* We can't call maybe_constant_value on an expression
8401            that hasn't been through fold_non_dependent_expr yet.  */
8402         if (!processing_template_decl)
8403           denom = maybe_constant_value (denom);
8404         if (integer_zerop (denom))
8405           {
8406             if (flags & tf_error)
8407               error ("division by zero is not a constant-expression");
8408             return false;
8409           }
8410         else
8411           {
8412             want_rval = true;
8413             goto binary;
8414           }
8415       }
8416
8417     case COMPOUND_EXPR:
8418       {
8419         /* check_return_expr sometimes wraps a TARGET_EXPR in a
8420            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
8421            introduced by build_call_a.  */
8422         tree op0 = TREE_OPERAND (t, 0);
8423         tree op1 = TREE_OPERAND (t, 1);
8424         STRIP_NOPS (op1);
8425         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
8426             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
8427           return potential_constant_expression_1 (op0, want_rval, flags);
8428         else
8429           goto binary;
8430       }
8431
8432       /* If the first operand is the non-short-circuit constant, look at
8433          the second operand; otherwise we only care about the first one for
8434          potentiality.  */
8435     case TRUTH_AND_EXPR:
8436     case TRUTH_ANDIF_EXPR:
8437       tmp = boolean_true_node;
8438       goto truth;
8439     case TRUTH_OR_EXPR:
8440     case TRUTH_ORIF_EXPR:
8441       tmp = boolean_false_node;
8442     truth:
8443       if (TREE_OPERAND (t, 0) == tmp)
8444         return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
8445       else
8446         return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8447
8448     case PLUS_EXPR:
8449     case MULT_EXPR:
8450     case POINTER_PLUS_EXPR:
8451     case RDIV_EXPR:
8452     case EXACT_DIV_EXPR:
8453     case MIN_EXPR:
8454     case MAX_EXPR:
8455     case LSHIFT_EXPR:
8456     case RSHIFT_EXPR:
8457     case LROTATE_EXPR:
8458     case RROTATE_EXPR:
8459     case BIT_IOR_EXPR:
8460     case BIT_XOR_EXPR:
8461     case BIT_AND_EXPR:
8462     case TRUTH_XOR_EXPR:
8463     case UNORDERED_EXPR:
8464     case ORDERED_EXPR:
8465     case UNLT_EXPR:
8466     case UNLE_EXPR:
8467     case UNGT_EXPR:
8468     case UNGE_EXPR:
8469     case UNEQ_EXPR:
8470     case LTGT_EXPR:
8471     case RANGE_EXPR:
8472     case COMPLEX_EXPR:
8473       want_rval = true;
8474       /* Fall through.  */
8475     case ARRAY_REF:
8476     case ARRAY_RANGE_REF:
8477     case MEMBER_REF:
8478     case DOTSTAR_EXPR:
8479     binary:
8480       for (i = 0; i < 2; ++i)
8481         if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8482                                               want_rval, flags))
8483           return false;
8484       return true;
8485
8486     case FMA_EXPR:
8487      for (i = 0; i < 3; ++i)
8488       if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8489                                             true, flags))
8490         return false;
8491      return true;
8492
8493     case COND_EXPR:
8494     case VEC_COND_EXPR:
8495       /* If the condition is a known constant, we know which of the legs we
8496          care about; otherwise we only require that the condition and
8497          either of the legs be potentially constant.  */
8498       tmp = TREE_OPERAND (t, 0);
8499       if (!potential_constant_expression_1 (tmp, rval, flags))
8500         return false;
8501       else if (integer_zerop (tmp))
8502         return potential_constant_expression_1 (TREE_OPERAND (t, 2),
8503                                                 want_rval, flags);
8504       else if (TREE_CODE (tmp) == INTEGER_CST)
8505         return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8506                                                 want_rval, flags);
8507       for (i = 1; i < 3; ++i)
8508         if (potential_constant_expression_1 (TREE_OPERAND (t, i),
8509                                              want_rval, tf_none))
8510           return true;
8511       if (flags & tf_error)
8512         error ("expression %qE is not a constant-expression", t);
8513       return false;
8514
8515     case VEC_INIT_EXPR:
8516       if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
8517         return true;
8518       if (flags & tf_error)
8519         {
8520           error ("non-constant array initialization");
8521           diagnose_non_constexpr_vec_init (t);
8522         }
8523       return false;
8524
8525     default:
8526       sorry ("unexpected AST of kind %s", tree_code_name[TREE_CODE (t)]);
8527       gcc_unreachable();
8528       return false;
8529     }
8530 }
8531
8532 /* The main entry point to the above.  */
8533
8534 bool
8535 potential_constant_expression (tree t)
8536 {
8537   return potential_constant_expression_1 (t, false, tf_none);
8538 }
8539
8540 /* As above, but require a constant rvalue.  */
8541
8542 bool
8543 potential_rvalue_constant_expression (tree t)
8544 {
8545   return potential_constant_expression_1 (t, true, tf_none);
8546 }
8547
8548 /* Like above, but complain about non-constant expressions.  */
8549
8550 bool
8551 require_potential_constant_expression (tree t)
8552 {
8553   return potential_constant_expression_1 (t, false, tf_warning_or_error);
8554 }
8555
8556 /* Cross product of the above.  */
8557
8558 bool
8559 require_potential_rvalue_constant_expression (tree t)
8560 {
8561   return potential_constant_expression_1 (t, true, tf_warning_or_error);
8562 }
8563 \f
8564 /* Constructor for a lambda expression.  */
8565
8566 tree
8567 build_lambda_expr (void)
8568 {
8569   tree lambda = make_node (LAMBDA_EXPR);
8570   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
8571   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
8572   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
8573   LAMBDA_EXPR_PENDING_PROXIES      (lambda) = NULL;
8574   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
8575   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
8576   return lambda;
8577 }
8578
8579 /* Create the closure object for a LAMBDA_EXPR.  */
8580
8581 tree
8582 build_lambda_object (tree lambda_expr)
8583 {
8584   /* Build aggregate constructor call.
8585      - cp_parser_braced_list
8586      - cp_parser_functional_cast  */
8587   VEC(constructor_elt,gc) *elts = NULL;
8588   tree node, expr, type;
8589   location_t saved_loc;
8590
8591   if (processing_template_decl)
8592     return lambda_expr;
8593
8594   /* Make sure any error messages refer to the lambda-introducer.  */
8595   saved_loc = input_location;
8596   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
8597
8598   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8599        node;
8600        node = TREE_CHAIN (node))
8601     {
8602       tree field = TREE_PURPOSE (node);
8603       tree val = TREE_VALUE (node);
8604
8605       if (field == error_mark_node)
8606         {
8607           expr = error_mark_node;
8608           goto out;
8609         }
8610
8611       if (DECL_P (val))
8612         mark_used (val);
8613
8614       /* Mere mortals can't copy arrays with aggregate initialization, so
8615          do some magic to make it work here.  */
8616       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
8617         val = build_array_copy (val);
8618       else if (DECL_NORMAL_CAPTURE_P (field)
8619                && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
8620         {
8621           /* "the entities that are captured by copy are used to
8622              direct-initialize each corresponding non-static data
8623              member of the resulting closure object."
8624
8625              There's normally no way to express direct-initialization
8626              from an element of a CONSTRUCTOR, so we build up a special
8627              TARGET_EXPR to bypass the usual copy-initialization.  */
8628           val = force_rvalue (val, tf_warning_or_error);
8629           if (TREE_CODE (val) == TARGET_EXPR)
8630             TARGET_EXPR_DIRECT_INIT_P (val) = true;
8631         }
8632
8633       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
8634     }
8635
8636   expr = build_constructor (init_list_type_node, elts);
8637   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
8638
8639   /* N2927: "[The closure] class type is not an aggregate."
8640      But we briefly treat it as an aggregate to make this simpler.  */
8641   type = LAMBDA_EXPR_CLOSURE (lambda_expr);
8642   CLASSTYPE_NON_AGGREGATE (type) = 0;
8643   expr = finish_compound_literal (type, expr, tf_warning_or_error);
8644   CLASSTYPE_NON_AGGREGATE (type) = 1;
8645
8646  out:
8647   input_location = saved_loc;
8648   return expr;
8649 }
8650
8651 /* Return an initialized RECORD_TYPE for LAMBDA.
8652    LAMBDA must have its explicit captures already.  */
8653
8654 tree
8655 begin_lambda_type (tree lambda)
8656 {
8657   tree type;
8658
8659   {
8660     /* Unique name.  This is just like an unnamed class, but we cannot use
8661        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
8662     tree name;
8663     name = make_lambda_name ();
8664
8665     /* Create the new RECORD_TYPE for this lambda.  */
8666     type = xref_tag (/*tag_code=*/record_type,
8667                      name,
8668                      /*scope=*/ts_within_enclosing_non_class,
8669                      /*template_header_p=*/false);
8670   }
8671
8672   /* Designate it as a struct so that we can use aggregate initialization.  */
8673   CLASSTYPE_DECLARED_CLASS (type) = false;
8674
8675   /* Clear base types.  */
8676   xref_basetypes (type, /*bases=*/NULL_TREE);
8677
8678   /* Start the class.  */
8679   type = begin_class_definition (type);
8680   if (type == error_mark_node)
8681     return error_mark_node;
8682
8683   /* Cross-reference the expression and the type.  */
8684   LAMBDA_EXPR_CLOSURE (lambda) = type;
8685   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
8686
8687   return type;
8688 }
8689
8690 /* Returns the type to use for the return type of the operator() of a
8691    closure class.  */
8692
8693 tree
8694 lambda_return_type (tree expr)
8695 {
8696   tree type;
8697   if (type_unknown_p (expr)
8698       || BRACE_ENCLOSED_INITIALIZER_P (expr))
8699     {
8700       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
8701       return void_type_node;
8702     }
8703   if (type_dependent_expression_p (expr))
8704     type = dependent_lambda_return_type_node;
8705   else
8706     type = cv_unqualified (type_decays_to (unlowered_expr_type (expr)));
8707   return type;
8708 }
8709
8710 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
8711    closure type.  */
8712
8713 tree
8714 lambda_function (tree lambda)
8715 {
8716   tree type;
8717   if (TREE_CODE (lambda) == LAMBDA_EXPR)
8718     type = LAMBDA_EXPR_CLOSURE (lambda);
8719   else
8720     type = lambda;
8721   gcc_assert (LAMBDA_TYPE_P (type));
8722   /* Don't let debug_tree cause instantiation.  */
8723   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
8724       && !COMPLETE_OR_OPEN_TYPE_P (type))
8725     return NULL_TREE;
8726   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
8727                           /*protect=*/0, /*want_type=*/false,
8728                           tf_warning_or_error);
8729   if (lambda)
8730     lambda = BASELINK_FUNCTIONS (lambda);
8731   return lambda;
8732 }
8733
8734 /* Returns the type to use for the FIELD_DECL corresponding to the
8735    capture of EXPR.
8736    The caller should add REFERENCE_TYPE for capture by reference.  */
8737
8738 tree
8739 lambda_capture_field_type (tree expr)
8740 {
8741   tree type;
8742   if (type_dependent_expression_p (expr))
8743     {
8744       type = cxx_make_type (DECLTYPE_TYPE);
8745       DECLTYPE_TYPE_EXPR (type) = expr;
8746       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
8747       SET_TYPE_STRUCTURAL_EQUALITY (type);
8748     }
8749   else
8750     type = non_reference (unlowered_expr_type (expr));
8751   return type;
8752 }
8753
8754 /* Recompute the return type for LAMBDA with body of the form:
8755      { return EXPR ; }  */
8756
8757 void
8758 apply_lambda_return_type (tree lambda, tree return_type)
8759 {
8760   tree fco = lambda_function (lambda);
8761   tree result;
8762
8763   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
8764
8765   if (return_type == error_mark_node)
8766     return;
8767   if (TREE_TYPE (TREE_TYPE (fco)) == return_type)
8768     return;
8769
8770   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
8771      TREE_TYPE (METHOD_TYPE)   == return-type  */
8772   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
8773
8774   result = DECL_RESULT (fco);
8775   if (result == NULL_TREE)
8776     return;
8777
8778   /* We already have a DECL_RESULT from start_preparsed_function.
8779      Now we need to redo the work it and allocate_struct_function
8780      did to reflect the new type.  */
8781   gcc_assert (current_function_decl == fco);
8782   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
8783                        TYPE_MAIN_VARIANT (return_type));
8784   DECL_ARTIFICIAL (result) = 1;
8785   DECL_IGNORED_P (result) = 1;
8786   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
8787                                result);
8788
8789   DECL_RESULT (fco) = result;
8790
8791   if (!processing_template_decl && aggregate_value_p (result, fco))
8792     {
8793 #ifdef PCC_STATIC_STRUCT_RETURN
8794       cfun->returns_pcc_struct = 1;
8795 #endif
8796       cfun->returns_struct = 1;
8797     }
8798
8799 }
8800
8801 /* DECL is a local variable or parameter from the surrounding scope of a
8802    lambda-expression.  Returns the decltype for a use of the capture field
8803    for DECL even if it hasn't been captured yet.  */
8804
8805 static tree
8806 capture_decltype (tree decl)
8807 {
8808   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8809   /* FIXME do lookup instead of list walk? */
8810   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
8811   tree type;
8812
8813   if (cap)
8814     type = TREE_TYPE (TREE_PURPOSE (cap));
8815   else
8816     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
8817       {
8818       case CPLD_NONE:
8819         error ("%qD is not captured", decl);
8820         return error_mark_node;
8821
8822       case CPLD_COPY:
8823         type = TREE_TYPE (decl);
8824         if (TREE_CODE (type) == REFERENCE_TYPE
8825             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
8826           type = TREE_TYPE (type);
8827         break;
8828
8829       case CPLD_REFERENCE:
8830         type = TREE_TYPE (decl);
8831         if (TREE_CODE (type) != REFERENCE_TYPE)
8832           type = build_reference_type (TREE_TYPE (decl));
8833         break;
8834
8835       default:
8836         gcc_unreachable ();
8837       }
8838
8839   if (TREE_CODE (type) != REFERENCE_TYPE)
8840     {
8841       if (!LAMBDA_EXPR_MUTABLE_P (lam))
8842         type = cp_build_qualified_type (type, (cp_type_quals (type)
8843                                                |TYPE_QUAL_CONST));
8844       type = build_reference_type (type);
8845     }
8846   return type;
8847 }
8848
8849 /* Returns true iff DECL is a lambda capture proxy variable created by
8850    build_capture_proxy.  */
8851
8852 bool
8853 is_capture_proxy (tree decl)
8854 {
8855   return (TREE_CODE (decl) == VAR_DECL
8856           && DECL_HAS_VALUE_EXPR_P (decl)
8857           && !DECL_ANON_UNION_VAR_P (decl)
8858           && LAMBDA_FUNCTION_P (DECL_CONTEXT (decl)));
8859 }
8860
8861 /* Returns true iff DECL is a capture proxy for a normal capture
8862    (i.e. without explicit initializer).  */
8863
8864 bool
8865 is_normal_capture_proxy (tree decl)
8866 {
8867   tree val;
8868
8869   if (!is_capture_proxy (decl))
8870     /* It's not a capture proxy.  */
8871     return false;
8872
8873   /* It is a capture proxy, is it a normal capture?  */
8874   val = DECL_VALUE_EXPR (decl);
8875   gcc_assert (TREE_CODE (val) == COMPONENT_REF);
8876   val = TREE_OPERAND (val, 1);
8877   return DECL_NORMAL_CAPTURE_P (val);
8878 }
8879
8880 /* VAR is a capture proxy created by build_capture_proxy; add it to the
8881    current function, which is the operator() for the appropriate lambda.  */
8882
8883 void
8884 insert_capture_proxy (tree var)
8885 {
8886   cp_binding_level *b;
8887   int skip;
8888   tree stmt_list;
8889
8890   /* Put the capture proxy in the extra body block so that it won't clash
8891      with a later local variable.  */
8892   b = current_binding_level;
8893   for (skip = 0; ; ++skip)
8894     {
8895       cp_binding_level *n = b->level_chain;
8896       if (n->kind == sk_function_parms)
8897         break;
8898       b = n;
8899     }
8900   pushdecl_with_scope (var, b, false);
8901
8902   /* And put a DECL_EXPR in the STATEMENT_LIST for the same block.  */
8903   var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
8904   stmt_list = VEC_index (tree, stmt_list_stack,
8905                          VEC_length (tree, stmt_list_stack) - 1 - skip);
8906   gcc_assert (stmt_list);
8907   append_to_statement_list_force (var, &stmt_list);
8908 }
8909
8910 /* We've just finished processing a lambda; if the containing scope is also
8911    a lambda, insert any capture proxies that were created while processing
8912    the nested lambda.  */
8913
8914 void
8915 insert_pending_capture_proxies (void)
8916 {
8917   tree lam;
8918   VEC(tree,gc) *proxies;
8919   unsigned i;
8920
8921   if (!current_function_decl || !LAMBDA_FUNCTION_P (current_function_decl))
8922     return;
8923
8924   lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8925   proxies = LAMBDA_EXPR_PENDING_PROXIES (lam);
8926   for (i = 0; i < VEC_length (tree, proxies); ++i)
8927     {
8928       tree var = VEC_index (tree, proxies, i);
8929       insert_capture_proxy (var);
8930     }
8931   release_tree_vector (LAMBDA_EXPR_PENDING_PROXIES (lam));
8932   LAMBDA_EXPR_PENDING_PROXIES (lam) = NULL;
8933 }
8934
8935 /* Given REF, a COMPONENT_REF designating a field in the lambda closure,
8936    return the type we want the proxy to have: the type of the field itself,
8937    with added const-qualification if the lambda isn't mutable and the
8938    capture is by value.  */
8939
8940 tree
8941 lambda_proxy_type (tree ref)
8942 {
8943   tree type;
8944   if (REFERENCE_REF_P (ref))
8945     ref = TREE_OPERAND (ref, 0);
8946   type = TREE_TYPE (ref);
8947   if (!dependent_type_p (type))
8948     return type;
8949   type = cxx_make_type (DECLTYPE_TYPE);
8950   DECLTYPE_TYPE_EXPR (type) = ref;
8951   DECLTYPE_FOR_LAMBDA_PROXY (type) = true;
8952   SET_TYPE_STRUCTURAL_EQUALITY (type);
8953   return type;
8954 }
8955
8956 /* MEMBER is a capture field in a lambda closure class.  Now that we're
8957    inside the operator(), build a placeholder var for future lookups and
8958    debugging.  */
8959
8960 tree
8961 build_capture_proxy (tree member)
8962 {
8963   tree var, object, fn, closure, name, lam, type;
8964
8965   closure = DECL_CONTEXT (member);
8966   fn = lambda_function (closure);
8967   lam = CLASSTYPE_LAMBDA_EXPR (closure);
8968
8969   /* The proxy variable forwards to the capture field.  */
8970   object = build_fold_indirect_ref (DECL_ARGUMENTS (fn));
8971   object = finish_non_static_data_member (member, object, NULL_TREE);
8972   if (REFERENCE_REF_P (object))
8973     object = TREE_OPERAND (object, 0);
8974
8975   /* Remove the __ inserted by add_capture.  */
8976   name = get_identifier (IDENTIFIER_POINTER (DECL_NAME (member)) + 2);
8977
8978   type = lambda_proxy_type (object);
8979   var = build_decl (input_location, VAR_DECL, name, type);
8980   SET_DECL_VALUE_EXPR (var, object);
8981   DECL_HAS_VALUE_EXPR_P (var) = 1;
8982   DECL_ARTIFICIAL (var) = 1;
8983   TREE_USED (var) = 1;
8984   DECL_CONTEXT (var) = fn;
8985
8986   if (name == this_identifier)
8987     {
8988       gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (lam) == member);
8989       LAMBDA_EXPR_THIS_CAPTURE (lam) = var;
8990     }
8991
8992   if (fn == current_function_decl)
8993     insert_capture_proxy (var);
8994   else
8995     VEC_safe_push (tree, gc, LAMBDA_EXPR_PENDING_PROXIES (lam), var);
8996
8997   return var;
8998 }
8999
9000 /* From an ID and INITIALIZER, create a capture (by reference if
9001    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
9002    and return it.  */
9003
9004 tree
9005 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
9006              bool explicit_init_p)
9007 {
9008   char *buf;
9009   tree type, member, name;
9010
9011   type = lambda_capture_field_type (initializer);
9012   if (by_reference_p)
9013     {
9014       type = build_reference_type (type);
9015       if (!real_lvalue_p (initializer))
9016         error ("cannot capture %qE by reference", initializer);
9017     }
9018   else
9019     /* Capture by copy requires a complete type.  */
9020     type = complete_type (type);
9021
9022   /* Add __ to the beginning of the field name so that user code
9023      won't find the field with name lookup.  We can't just leave the name
9024      unset because template instantiation uses the name to find
9025      instantiated fields.  */
9026   buf = (char *) alloca (IDENTIFIER_LENGTH (id) + 3);
9027   buf[1] = buf[0] = '_';
9028   memcpy (buf + 2, IDENTIFIER_POINTER (id),
9029           IDENTIFIER_LENGTH (id) + 1);
9030   name = get_identifier (buf);
9031
9032   /* If TREE_TYPE isn't set, we're still in the introducer, so check
9033      for duplicates.  */
9034   if (!LAMBDA_EXPR_CLOSURE (lambda))
9035     {
9036       if (IDENTIFIER_MARKED (name))
9037         {
9038           pedwarn (input_location, 0,
9039                    "already captured %qD in lambda expression", id);
9040           return NULL_TREE;
9041         }
9042       IDENTIFIER_MARKED (name) = true;
9043     }
9044
9045   /* Make member variable.  */
9046   member = build_lang_decl (FIELD_DECL, name, type);
9047
9048   if (!explicit_init_p)
9049     /* Normal captures are invisible to name lookup but uses are replaced
9050        with references to the capture field; we implement this by only
9051        really making them invisible in unevaluated context; see
9052        qualify_lookup.  For now, let's make explicitly initialized captures
9053        always visible.  */
9054     DECL_NORMAL_CAPTURE_P (member) = true;
9055
9056   if (id == this_identifier)
9057     LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
9058
9059   /* Add it to the appropriate closure class if we've started it.  */
9060   if (current_class_type
9061       && current_class_type == LAMBDA_EXPR_CLOSURE (lambda))
9062     finish_member_declaration (member);
9063
9064   LAMBDA_EXPR_CAPTURE_LIST (lambda)
9065     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
9066
9067   if (LAMBDA_EXPR_CLOSURE (lambda))
9068     return build_capture_proxy (member);
9069   /* For explicit captures we haven't started the function yet, so we wait
9070      and build the proxy from cp_parser_lambda_body.  */
9071   return NULL_TREE;
9072 }
9073
9074 /* Register all the capture members on the list CAPTURES, which is the
9075    LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
9076
9077 void
9078 register_capture_members (tree captures)
9079 {
9080   if (captures == NULL_TREE)
9081     return;
9082
9083   register_capture_members (TREE_CHAIN (captures));
9084   /* We set this in add_capture to avoid duplicates.  */
9085   IDENTIFIER_MARKED (DECL_NAME (TREE_PURPOSE (captures))) = false;
9086   finish_member_declaration (TREE_PURPOSE (captures));
9087 }
9088
9089 /* Similar to add_capture, except this works on a stack of nested lambdas.
9090    BY_REFERENCE_P in this case is derived from the default capture mode.
9091    Returns the capture for the lambda at the bottom of the stack.  */
9092
9093 tree
9094 add_default_capture (tree lambda_stack, tree id, tree initializer)
9095 {
9096   bool this_capture_p = (id == this_identifier);
9097
9098   tree var = NULL_TREE;
9099
9100   tree saved_class_type = current_class_type;
9101
9102   tree node;
9103
9104   for (node = lambda_stack;
9105        node;
9106        node = TREE_CHAIN (node))
9107     {
9108       tree lambda = TREE_VALUE (node);
9109
9110       current_class_type = LAMBDA_EXPR_CLOSURE (lambda);
9111       var = add_capture (lambda,
9112                             id,
9113                             initializer,
9114                             /*by_reference_p=*/
9115                             (!this_capture_p
9116                              && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
9117                                  == CPLD_REFERENCE)),
9118                             /*explicit_init_p=*/false);
9119       initializer = convert_from_reference (var);
9120     }
9121
9122   current_class_type = saved_class_type;
9123
9124   return var;
9125 }
9126
9127 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
9128    INDIRECT_REF, possibly adding it through default capturing.  */
9129
9130 tree
9131 lambda_expr_this_capture (tree lambda)
9132 {
9133   tree result;
9134
9135   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9136
9137   /* Try to default capture 'this' if we can.  */
9138   if (!this_capture
9139       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
9140     {
9141       tree containing_function = TYPE_CONTEXT (LAMBDA_EXPR_CLOSURE (lambda));
9142       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
9143       tree init = NULL_TREE;
9144
9145       /* If we are in a lambda function, we can move out until we hit:
9146            1. a non-lambda function,
9147            2. a lambda function capturing 'this', or
9148            3. a non-default capturing lambda function.  */
9149       while (LAMBDA_FUNCTION_P (containing_function))
9150         {
9151           tree lambda
9152             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
9153
9154           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
9155             {
9156               /* An outer lambda has already captured 'this'.  */
9157               init = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9158               break;
9159             }
9160
9161           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
9162             /* An outer lambda won't let us capture 'this'.  */
9163             break;
9164
9165           lambda_stack = tree_cons (NULL_TREE,
9166                                     lambda,
9167                                     lambda_stack);
9168
9169           containing_function = decl_function_context (containing_function);
9170         }
9171
9172       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
9173           && !LAMBDA_FUNCTION_P (containing_function))
9174         /* First parameter is 'this'.  */
9175         init = DECL_ARGUMENTS (containing_function);
9176
9177       if (init)
9178         this_capture = add_default_capture (lambda_stack,
9179                                             /*id=*/this_identifier,
9180                                             init);
9181     }
9182
9183   if (!this_capture)
9184     {
9185       error ("%<this%> was not captured for this lambda function");
9186       result = error_mark_node;
9187     }
9188   else
9189     {
9190       /* To make sure that current_class_ref is for the lambda.  */
9191       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref))
9192                   == LAMBDA_EXPR_CLOSURE (lambda));
9193
9194       result = this_capture;
9195
9196       /* If 'this' is captured, each use of 'this' is transformed into an
9197          access to the corresponding unnamed data member of the closure
9198          type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
9199          ensures that the transformed expression is an rvalue. ] */
9200       result = rvalue (result);
9201     }
9202
9203   return result;
9204 }
9205
9206 /* Returns the method basetype of the innermost non-lambda function, or
9207    NULL_TREE if none.  */
9208
9209 tree
9210 nonlambda_method_basetype (void)
9211 {
9212   tree fn, type;
9213   if (!current_class_ref)
9214     return NULL_TREE;
9215
9216   type = current_class_type;
9217   if (!LAMBDA_TYPE_P (type))
9218     return type;
9219
9220   /* Find the nearest enclosing non-lambda function.  */
9221   fn = TYPE_NAME (type);
9222   do
9223     fn = decl_function_context (fn);
9224   while (fn && LAMBDA_FUNCTION_P (fn));
9225
9226   if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9227     return NULL_TREE;
9228
9229   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
9230 }
9231
9232 /* If the closure TYPE has a static op(), also add a conversion to function
9233    pointer.  */
9234
9235 void
9236 maybe_add_lambda_conv_op (tree type)
9237 {
9238   bool nested = (current_function_decl != NULL_TREE);
9239   tree callop = lambda_function (type);
9240   tree rettype, name, fntype, fn, body, compound_stmt;
9241   tree thistype, stattype, statfn, convfn, call, arg;
9242   VEC (tree, gc) *argvec;
9243
9244   if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
9245     return;
9246
9247   if (processing_template_decl)
9248     return;
9249
9250   stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
9251                                   FUNCTION_ARG_CHAIN (callop));
9252
9253   /* First build up the conversion op.  */
9254
9255   rettype = build_pointer_type (stattype);
9256   name = mangle_conv_op_name_for_type (rettype);
9257   thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
9258   fntype = build_method_type_directly (thistype, rettype, void_list_node);
9259   fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
9260   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9261
9262   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9263       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9264     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9265
9266   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
9267   grokclassfn (type, fn, NO_SPECIAL);
9268   set_linkage_according_to_type (type, fn);
9269   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9270   DECL_IN_AGGR_P (fn) = 1;
9271   DECL_ARTIFICIAL (fn) = 1;
9272   DECL_NOT_REALLY_EXTERN (fn) = 1;
9273   DECL_DECLARED_INLINE_P (fn) = 1;
9274   DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
9275
9276   add_method (type, fn, NULL_TREE);
9277
9278   /* Generic thunk code fails for varargs; we'll complain in mark_used if
9279      the conversion op is used.  */
9280   if (varargs_function_p (callop))
9281     {
9282       DECL_DELETED_FN (fn) = 1;
9283       return;
9284     }
9285
9286   /* Now build up the thunk to be returned.  */
9287
9288   name = get_identifier ("_FUN");
9289   fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
9290   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9291   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9292       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9293     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9294   grokclassfn (type, fn, NO_SPECIAL);
9295   set_linkage_according_to_type (type, fn);
9296   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9297   DECL_IN_AGGR_P (fn) = 1;
9298   DECL_ARTIFICIAL (fn) = 1;
9299   DECL_NOT_REALLY_EXTERN (fn) = 1;
9300   DECL_DECLARED_INLINE_P (fn) = 1;
9301   DECL_STATIC_FUNCTION_P (fn) = 1;
9302   DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
9303   for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
9304     DECL_CONTEXT (arg) = fn;
9305
9306   add_method (type, fn, NULL_TREE);
9307
9308   if (nested)
9309     push_function_context ();
9310   else
9311     /* Still increment function_depth so that we don't GC in the
9312        middle of an expression.  */
9313     ++function_depth;
9314
9315   /* Generate the body of the thunk.  */
9316
9317   start_preparsed_function (statfn, NULL_TREE,
9318                             SF_PRE_PARSED | SF_INCLASS_INLINE);
9319   if (DECL_ONE_ONLY (statfn))
9320     {
9321       /* Put the thunk in the same comdat group as the call op.  */
9322       cgraph_add_to_same_comdat_group (cgraph_get_create_node (statfn),
9323                                        cgraph_get_create_node (callop));
9324     }
9325   body = begin_function_body ();
9326   compound_stmt = begin_compound_stmt (0);
9327
9328   arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
9329                 null_pointer_node);
9330   argvec = make_tree_vector ();
9331   VEC_quick_push (tree, argvec, arg);
9332   for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
9333     {
9334       mark_exp_read (arg);
9335       VEC_safe_push (tree, gc, argvec, arg);
9336     }
9337   call = build_call_a (callop, VEC_length (tree, argvec),
9338                        VEC_address (tree, argvec));
9339   CALL_FROM_THUNK_P (call) = 1;
9340   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
9341     call = build_cplus_new (TREE_TYPE (call), call, tf_warning_or_error);
9342   call = convert_from_reference (call);
9343   finish_return_stmt (call);
9344
9345   finish_compound_stmt (compound_stmt);
9346   finish_function_body (body);
9347
9348   expand_or_defer_fn (finish_function (2));
9349
9350   /* Generate the body of the conversion op.  */
9351
9352   start_preparsed_function (convfn, NULL_TREE,
9353                             SF_PRE_PARSED | SF_INCLASS_INLINE);
9354   body = begin_function_body ();
9355   compound_stmt = begin_compound_stmt (0);
9356
9357   finish_return_stmt (decay_conversion (statfn));
9358
9359   finish_compound_stmt (compound_stmt);
9360   finish_function_body (body);
9361
9362   expand_or_defer_fn (finish_function (2));
9363
9364   if (nested)
9365     pop_function_context ();
9366   else
9367     --function_depth;
9368 }
9369
9370 /* Returns true iff VAL is a lambda-related declaration which should
9371    be ignored by unqualified lookup.  */
9372
9373 bool
9374 is_lambda_ignored_entity (tree val)
9375 {
9376   /* In unevaluated context, look past normal capture proxies.  */
9377   if (cp_unevaluated_operand && is_normal_capture_proxy (val))
9378     return true;
9379
9380   /* Always ignore lambda fields, their names are only for debugging.  */
9381   if (TREE_CODE (val) == FIELD_DECL
9382       && CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (val)))
9383     return true;
9384
9385   /* None of the lookups that use qualify_lookup want the op() from the
9386      lambda; they want the one from the enclosing class.  */
9387   if (TREE_CODE (val) == FUNCTION_DECL && LAMBDA_FUNCTION_P (val))
9388     return true;
9389
9390   return false;
9391 }
9392
9393 #include "gt-cp-semantics.h"