OSDN Git Service

PR c++/51675
[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, tree attributes)
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   cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2576   fixup_attribute_variants (t);
2577
2578   if (flag_pack_struct)
2579     {
2580       tree v;
2581       TYPE_PACKED (t) = 1;
2582       /* Even though the type is being defined for the first time
2583          here, there might have been a forward declaration, so there
2584          might be cv-qualified variants of T.  */
2585       for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2586         TYPE_PACKED (v) = 1;
2587     }
2588   /* Reset the interface data, at the earliest possible
2589      moment, as it might have been set via a class foo;
2590      before.  */
2591   if (! TYPE_ANONYMOUS_P (t))
2592     {
2593       struct c_fileinfo *finfo = get_fileinfo (input_filename);
2594       CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2595       SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2596         (t, finfo->interface_unknown);
2597     }
2598   reset_specialization();
2599
2600   /* Make a declaration for this class in its own scope.  */
2601   build_self_reference ();
2602
2603   return t;
2604 }
2605
2606 /* Finish the member declaration given by DECL.  */
2607
2608 void
2609 finish_member_declaration (tree decl)
2610 {
2611   if (decl == error_mark_node || decl == NULL_TREE)
2612     return;
2613
2614   if (decl == void_type_node)
2615     /* The COMPONENT was a friend, not a member, and so there's
2616        nothing for us to do.  */
2617     return;
2618
2619   /* We should see only one DECL at a time.  */
2620   gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2621
2622   /* Set up access control for DECL.  */
2623   TREE_PRIVATE (decl)
2624     = (current_access_specifier == access_private_node);
2625   TREE_PROTECTED (decl)
2626     = (current_access_specifier == access_protected_node);
2627   if (TREE_CODE (decl) == TEMPLATE_DECL)
2628     {
2629       TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2630       TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2631     }
2632
2633   /* Mark the DECL as a member of the current class.  */
2634   DECL_CONTEXT (decl) = current_class_type;
2635
2636   /* Check for bare parameter packs in the member variable declaration.  */
2637   if (TREE_CODE (decl) == FIELD_DECL)
2638     {
2639       if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2640         TREE_TYPE (decl) = error_mark_node;
2641       if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2642         DECL_ATTRIBUTES (decl) = NULL_TREE;
2643     }
2644
2645   /* [dcl.link]
2646
2647      A C language linkage is ignored for the names of class members
2648      and the member function type of class member functions.  */
2649   if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2650     SET_DECL_LANGUAGE (decl, lang_cplusplus);
2651
2652   /* Put functions on the TYPE_METHODS list and everything else on the
2653      TYPE_FIELDS list.  Note that these are built up in reverse order.
2654      We reverse them (to obtain declaration order) in finish_struct.  */
2655   if (TREE_CODE (decl) == FUNCTION_DECL
2656       || DECL_FUNCTION_TEMPLATE_P (decl))
2657     {
2658       /* We also need to add this function to the
2659          CLASSTYPE_METHOD_VEC.  */
2660       if (add_method (current_class_type, decl, NULL_TREE))
2661         {
2662           DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2663           TYPE_METHODS (current_class_type) = decl;
2664
2665           maybe_add_class_template_decl_list (current_class_type, decl,
2666                                               /*friend_p=*/0);
2667         }
2668     }
2669   /* Enter the DECL into the scope of the class.  */
2670   else if (pushdecl_class_level (decl))
2671     {
2672       if (TREE_CODE (decl) == USING_DECL)
2673         {
2674           /* For now, ignore class-scope USING_DECLS, so that
2675              debugging backends do not see them. */
2676           DECL_IGNORED_P (decl) = 1;
2677         }
2678
2679       /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2680          go at the beginning.  The reason is that lookup_field_1
2681          searches the list in order, and we want a field name to
2682          override a type name so that the "struct stat hack" will
2683          work.  In particular:
2684
2685            struct S { enum E { }; int E } s;
2686            s.E = 3;
2687
2688          is valid.  In addition, the FIELD_DECLs must be maintained in
2689          declaration order so that class layout works as expected.
2690          However, we don't need that order until class layout, so we
2691          save a little time by putting FIELD_DECLs on in reverse order
2692          here, and then reversing them in finish_struct_1.  (We could
2693          also keep a pointer to the correct insertion points in the
2694          list.)  */
2695
2696       if (TREE_CODE (decl) == TYPE_DECL)
2697         TYPE_FIELDS (current_class_type)
2698           = chainon (TYPE_FIELDS (current_class_type), decl);
2699       else
2700         {
2701           DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2702           TYPE_FIELDS (current_class_type) = decl;
2703         }
2704
2705       maybe_add_class_template_decl_list (current_class_type, decl,
2706                                           /*friend_p=*/0);
2707     }
2708
2709   if (pch_file)
2710     note_decl_for_pch (decl);
2711 }
2712
2713 /* DECL has been declared while we are building a PCH file.  Perform
2714    actions that we might normally undertake lazily, but which can be
2715    performed now so that they do not have to be performed in
2716    translation units which include the PCH file.  */
2717
2718 void
2719 note_decl_for_pch (tree decl)
2720 {
2721   gcc_assert (pch_file);
2722
2723   /* There's a good chance that we'll have to mangle names at some
2724      point, even if only for emission in debugging information.  */
2725   if ((TREE_CODE (decl) == VAR_DECL
2726        || TREE_CODE (decl) == FUNCTION_DECL)
2727       && !processing_template_decl)
2728     mangle_decl (decl);
2729 }
2730
2731 /* Finish processing a complete template declaration.  The PARMS are
2732    the template parameters.  */
2733
2734 void
2735 finish_template_decl (tree parms)
2736 {
2737   if (parms)
2738     end_template_decl ();
2739   else
2740     end_specialization ();
2741 }
2742
2743 /* Finish processing a template-id (which names a type) of the form
2744    NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2745    template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2746    the scope of template-id indicated.  */
2747
2748 tree
2749 finish_template_type (tree name, tree args, int entering_scope)
2750 {
2751   tree type;
2752
2753   type = lookup_template_class (name, args,
2754                                 NULL_TREE, NULL_TREE, entering_scope,
2755                                 tf_warning_or_error | tf_user);
2756   if (type == error_mark_node)
2757     return type;
2758   else if (CLASS_TYPE_P (type) && !alias_type_or_template_p (type))
2759     return TYPE_STUB_DECL (type);
2760   else
2761     return TYPE_NAME (type);
2762 }
2763
2764 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2765    Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2766    BASE_CLASS, or NULL_TREE if an error occurred.  The
2767    ACCESS_SPECIFIER is one of
2768    access_{default,public,protected_private}_node.  For a virtual base
2769    we set TREE_TYPE.  */
2770
2771 tree
2772 finish_base_specifier (tree base, tree access, bool virtual_p)
2773 {
2774   tree result;
2775
2776   if (base == error_mark_node)
2777     {
2778       error ("invalid base-class specification");
2779       result = NULL_TREE;
2780     }
2781   else if (! MAYBE_CLASS_TYPE_P (base))
2782     {
2783       error ("%qT is not a class type", base);
2784       result = NULL_TREE;
2785     }
2786   else
2787     {
2788       if (cp_type_quals (base) != 0)
2789         {
2790           /* DR 484: Can a base-specifier name a cv-qualified
2791              class type?  */
2792           base = TYPE_MAIN_VARIANT (base);
2793         }
2794       result = build_tree_list (access, base);
2795       if (virtual_p)
2796         TREE_TYPE (result) = integer_type_node;
2797     }
2798
2799   return result;
2800 }
2801
2802 /* If FNS is a member function, a set of member functions, or a
2803    template-id referring to one or more member functions, return a
2804    BASELINK for FNS, incorporating the current access context.
2805    Otherwise, return FNS unchanged.  */
2806
2807 tree
2808 baselink_for_fns (tree fns)
2809 {
2810   tree scope;
2811   tree cl;
2812
2813   if (BASELINK_P (fns) 
2814       || error_operand_p (fns))
2815     return fns;
2816
2817   scope = ovl_scope (fns);
2818   if (!CLASS_TYPE_P (scope))
2819     return fns;
2820
2821   cl = currently_open_derived_class (scope);
2822   if (!cl)
2823     cl = scope;
2824   cl = TYPE_BINFO (cl);
2825   return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2826 }
2827
2828 /* Returns true iff DECL is an automatic variable from a function outside
2829    the current one.  */
2830
2831 static bool
2832 outer_automatic_var_p (tree decl)
2833 {
2834   return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2835           && DECL_FUNCTION_SCOPE_P (decl)
2836           && !TREE_STATIC (decl)
2837           && DECL_CONTEXT (decl) != current_function_decl);
2838 }
2839
2840 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2841    id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2842    if non-NULL, is the type or namespace used to explicitly qualify
2843    ID_EXPRESSION.  DECL is the entity to which that name has been
2844    resolved.
2845
2846    *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2847    constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2848    be set to true if this expression isn't permitted in a
2849    constant-expression, but it is otherwise not set by this function.
2850    *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2851    constant-expression, but a non-constant expression is also
2852    permissible.
2853
2854    DONE is true if this expression is a complete postfix-expression;
2855    it is false if this expression is followed by '->', '[', '(', etc.
2856    ADDRESS_P is true iff this expression is the operand of '&'.
2857    TEMPLATE_P is true iff the qualified-id was of the form
2858    "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2859    appears as a template argument.
2860
2861    If an error occurs, and it is the kind of error that might cause
2862    the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2863    is the caller's responsibility to issue the message.  *ERROR_MSG
2864    will be a string with static storage duration, so the caller need
2865    not "free" it.
2866
2867    Return an expression for the entity, after issuing appropriate
2868    diagnostics.  This function is also responsible for transforming a
2869    reference to a non-static member into a COMPONENT_REF that makes
2870    the use of "this" explicit.
2871
2872    Upon return, *IDK will be filled in appropriately.  */
2873 tree
2874 finish_id_expression (tree id_expression,
2875                       tree decl,
2876                       tree scope,
2877                       cp_id_kind *idk,
2878                       bool integral_constant_expression_p,
2879                       bool allow_non_integral_constant_expression_p,
2880                       bool *non_integral_constant_expression_p,
2881                       bool template_p,
2882                       bool done,
2883                       bool address_p,
2884                       bool template_arg_p,
2885                       const char **error_msg,
2886                       location_t location)
2887 {
2888   decl = strip_using_decl (decl);
2889
2890   /* Initialize the output parameters.  */
2891   *idk = CP_ID_KIND_NONE;
2892   *error_msg = NULL;
2893
2894   if (id_expression == error_mark_node)
2895     return error_mark_node;
2896   /* If we have a template-id, then no further lookup is
2897      required.  If the template-id was for a template-class, we
2898      will sometimes have a TYPE_DECL at this point.  */
2899   else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2900            || TREE_CODE (decl) == TYPE_DECL)
2901     ;
2902   /* Look up the name.  */
2903   else
2904     {
2905       if (decl == error_mark_node)
2906         {
2907           /* Name lookup failed.  */
2908           if (scope
2909               && (!TYPE_P (scope)
2910                   || (!dependent_type_p (scope)
2911                       && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2912                            && IDENTIFIER_TYPENAME_P (id_expression)
2913                            && dependent_type_p (TREE_TYPE (id_expression))))))
2914             {
2915               /* If the qualifying type is non-dependent (and the name
2916                  does not name a conversion operator to a dependent
2917                  type), issue an error.  */
2918               qualified_name_lookup_error (scope, id_expression, decl, location);
2919               return error_mark_node;
2920             }
2921           else if (!scope)
2922             {
2923               /* It may be resolved via Koenig lookup.  */
2924               *idk = CP_ID_KIND_UNQUALIFIED;
2925               return id_expression;
2926             }
2927           else
2928             decl = id_expression;
2929         }
2930       /* If DECL is a variable that would be out of scope under
2931          ANSI/ISO rules, but in scope in the ARM, name lookup
2932          will succeed.  Issue a diagnostic here.  */
2933       else
2934         decl = check_for_out_of_scope_variable (decl);
2935
2936       /* Remember that the name was used in the definition of
2937          the current class so that we can check later to see if
2938          the meaning would have been different after the class
2939          was entirely defined.  */
2940       if (!scope && decl != error_mark_node
2941           && TREE_CODE (id_expression) == IDENTIFIER_NODE)
2942         maybe_note_name_used_in_class (id_expression, decl);
2943
2944       /* Disallow uses of local variables from containing functions, except
2945          within lambda-expressions.  */
2946       if (outer_automatic_var_p (decl)
2947           /* It's not a use (3.2) if we're in an unevaluated context.  */
2948           && !cp_unevaluated_operand)
2949         {
2950           tree context = DECL_CONTEXT (decl);
2951           tree containing_function = current_function_decl;
2952           tree lambda_stack = NULL_TREE;
2953           tree lambda_expr = NULL_TREE;
2954           tree initializer = convert_from_reference (decl);
2955
2956           /* Mark it as used now even if the use is ill-formed.  */
2957           mark_used (decl);
2958
2959           /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2960              support for an approach in which a reference to a local
2961              [constant] automatic variable in a nested class or lambda body
2962              would enter the expression as an rvalue, which would reduce
2963              the complexity of the problem"
2964
2965              FIXME update for final resolution of core issue 696.  */
2966           if (decl_constant_var_p (decl))
2967             return integral_constant_value (decl);
2968
2969           /* If we are in a lambda function, we can move out until we hit
2970              1. the context,
2971              2. a non-lambda function, or
2972              3. a non-default capturing lambda function.  */
2973           while (context != containing_function
2974                  && LAMBDA_FUNCTION_P (containing_function))
2975             {
2976               lambda_expr = CLASSTYPE_LAMBDA_EXPR
2977                 (DECL_CONTEXT (containing_function));
2978
2979               if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2980                   == CPLD_NONE)
2981                 break;
2982
2983               lambda_stack = tree_cons (NULL_TREE,
2984                                         lambda_expr,
2985                                         lambda_stack);
2986
2987               containing_function
2988                 = decl_function_context (containing_function);
2989             }
2990
2991           if (context == containing_function)
2992             {
2993               decl = add_default_capture (lambda_stack,
2994                                           /*id=*/DECL_NAME (decl),
2995                                           initializer);
2996             }
2997           else if (lambda_expr)
2998             {
2999               error ("%qD is not captured", decl);
3000               return error_mark_node;
3001             }
3002           else
3003             {
3004               error (TREE_CODE (decl) == VAR_DECL
3005                      ? G_("use of %<auto%> variable from containing function")
3006                      : G_("use of parameter from containing function"));
3007               error ("  %q+#D declared here", decl);
3008               return error_mark_node;
3009             }
3010         }
3011
3012       /* Also disallow uses of function parameters outside the function
3013          body, except inside an unevaluated context (i.e. decltype).  */
3014       if (TREE_CODE (decl) == PARM_DECL
3015           && DECL_CONTEXT (decl) == NULL_TREE
3016           && !cp_unevaluated_operand)
3017         {
3018           error ("use of parameter %qD outside function body", decl);
3019           return error_mark_node;
3020         }
3021     }
3022
3023   /* If we didn't find anything, or what we found was a type,
3024      then this wasn't really an id-expression.  */
3025   if (TREE_CODE (decl) == TEMPLATE_DECL
3026       && !DECL_FUNCTION_TEMPLATE_P (decl))
3027     {
3028       *error_msg = "missing template arguments";
3029       return error_mark_node;
3030     }
3031   else if (TREE_CODE (decl) == TYPE_DECL
3032            || TREE_CODE (decl) == NAMESPACE_DECL)
3033     {
3034       *error_msg = "expected primary-expression";
3035       return error_mark_node;
3036     }
3037
3038   /* If the name resolved to a template parameter, there is no
3039      need to look it up again later.  */
3040   if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
3041       || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3042     {
3043       tree r;
3044
3045       *idk = CP_ID_KIND_NONE;
3046       if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3047         decl = TEMPLATE_PARM_DECL (decl);
3048       r = convert_from_reference (DECL_INITIAL (decl));
3049
3050       if (integral_constant_expression_p
3051           && !dependent_type_p (TREE_TYPE (decl))
3052           && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
3053         {
3054           if (!allow_non_integral_constant_expression_p)
3055             error ("template parameter %qD of type %qT is not allowed in "
3056                    "an integral constant expression because it is not of "
3057                    "integral or enumeration type", decl, TREE_TYPE (decl));
3058           *non_integral_constant_expression_p = true;
3059         }
3060       return r;
3061     }
3062   /* Similarly, we resolve enumeration constants to their
3063      underlying values.  */
3064   else if (TREE_CODE (decl) == CONST_DECL)
3065     {
3066       *idk = CP_ID_KIND_NONE;
3067       if (!processing_template_decl)
3068         {
3069           used_types_insert (TREE_TYPE (decl));
3070           return DECL_INITIAL (decl);
3071         }
3072       return decl;
3073     }
3074   else
3075     {
3076       bool dependent_p;
3077
3078       /* If the declaration was explicitly qualified indicate
3079          that.  The semantics of `A::f(3)' are different than
3080          `f(3)' if `f' is virtual.  */
3081       *idk = (scope
3082               ? CP_ID_KIND_QUALIFIED
3083               : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3084                  ? CP_ID_KIND_TEMPLATE_ID
3085                  : CP_ID_KIND_UNQUALIFIED));
3086
3087
3088       /* [temp.dep.expr]
3089
3090          An id-expression is type-dependent if it contains an
3091          identifier that was declared with a dependent type.
3092
3093          The standard is not very specific about an id-expression that
3094          names a set of overloaded functions.  What if some of them
3095          have dependent types and some of them do not?  Presumably,
3096          such a name should be treated as a dependent name.  */
3097       /* Assume the name is not dependent.  */
3098       dependent_p = false;
3099       if (!processing_template_decl)
3100         /* No names are dependent outside a template.  */
3101         ;
3102       /* A template-id where the name of the template was not resolved
3103          is definitely dependent.  */
3104       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3105                && (TREE_CODE (TREE_OPERAND (decl, 0))
3106                    == IDENTIFIER_NODE))
3107         dependent_p = true;
3108       /* For anything except an overloaded function, just check its
3109          type.  */
3110       else if (!is_overloaded_fn (decl))
3111         dependent_p
3112           = dependent_type_p (TREE_TYPE (decl));
3113       /* For a set of overloaded functions, check each of the
3114          functions.  */
3115       else
3116         {
3117           tree fns = decl;
3118
3119           if (BASELINK_P (fns))
3120             fns = BASELINK_FUNCTIONS (fns);
3121
3122           /* For a template-id, check to see if the template
3123              arguments are dependent.  */
3124           if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3125             {
3126               tree args = TREE_OPERAND (fns, 1);
3127               dependent_p = any_dependent_template_arguments_p (args);
3128               /* The functions are those referred to by the
3129                  template-id.  */
3130               fns = TREE_OPERAND (fns, 0);
3131             }
3132
3133           /* If there are no dependent template arguments, go through
3134              the overloaded functions.  */
3135           while (fns && !dependent_p)
3136             {
3137               tree fn = OVL_CURRENT (fns);
3138
3139               /* Member functions of dependent classes are
3140                  dependent.  */
3141               if (TREE_CODE (fn) == FUNCTION_DECL
3142                   && type_dependent_expression_p (fn))
3143                 dependent_p = true;
3144               else if (TREE_CODE (fn) == TEMPLATE_DECL
3145                        && dependent_template_p (fn))
3146                 dependent_p = true;
3147
3148               fns = OVL_NEXT (fns);
3149             }
3150         }
3151
3152       /* If the name was dependent on a template parameter, we will
3153          resolve the name at instantiation time.  */
3154       if (dependent_p)
3155         {
3156           /* Create a SCOPE_REF for qualified names, if the scope is
3157              dependent.  */
3158           if (scope)
3159             {
3160               if (TYPE_P (scope))
3161                 {
3162                   if (address_p && done)
3163                     decl = finish_qualified_id_expr (scope, decl,
3164                                                      done, address_p,
3165                                                      template_p,
3166                                                      template_arg_p);
3167                   else
3168                     {
3169                       tree type = NULL_TREE;
3170                       if (DECL_P (decl) && !dependent_scope_p (scope))
3171                         type = TREE_TYPE (decl);
3172                       decl = build_qualified_name (type,
3173                                                    scope,
3174                                                    id_expression,
3175                                                    template_p);
3176                     }
3177                 }
3178               if (TREE_TYPE (decl))
3179                 decl = convert_from_reference (decl);
3180               return decl;
3181             }
3182           /* A TEMPLATE_ID already contains all the information we
3183              need.  */
3184           if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3185             return id_expression;
3186           *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3187           /* If we found a variable, then name lookup during the
3188              instantiation will always resolve to the same VAR_DECL
3189              (or an instantiation thereof).  */
3190           if (TREE_CODE (decl) == VAR_DECL
3191               || TREE_CODE (decl) == PARM_DECL)
3192             {
3193               mark_used (decl);
3194               return convert_from_reference (decl);
3195             }
3196           /* The same is true for FIELD_DECL, but we also need to
3197              make sure that the syntax is correct.  */
3198           else if (TREE_CODE (decl) == FIELD_DECL)
3199             {
3200               /* Since SCOPE is NULL here, this is an unqualified name.
3201                  Access checking has been performed during name lookup
3202                  already.  Turn off checking to avoid duplicate errors.  */
3203               push_deferring_access_checks (dk_no_check);
3204               decl = finish_non_static_data_member
3205                        (decl, NULL_TREE,
3206                         /*qualifying_scope=*/NULL_TREE);
3207               pop_deferring_access_checks ();
3208               return decl;
3209             }
3210           return id_expression;
3211         }
3212
3213       if (TREE_CODE (decl) == NAMESPACE_DECL)
3214         {
3215           error ("use of namespace %qD as expression", decl);
3216           return error_mark_node;
3217         }
3218       else if (DECL_CLASS_TEMPLATE_P (decl))
3219         {
3220           error ("use of class template %qT as expression", decl);
3221           return error_mark_node;
3222         }
3223       else if (TREE_CODE (decl) == TREE_LIST)
3224         {
3225           /* Ambiguous reference to base members.  */
3226           error ("request for member %qD is ambiguous in "
3227                  "multiple inheritance lattice", id_expression);
3228           print_candidates (decl);
3229           return error_mark_node;
3230         }
3231
3232       /* Mark variable-like entities as used.  Functions are similarly
3233          marked either below or after overload resolution.  */
3234       if (TREE_CODE (decl) == VAR_DECL
3235           || TREE_CODE (decl) == PARM_DECL
3236           || TREE_CODE (decl) == RESULT_DECL)
3237         mark_used (decl);
3238
3239       /* Only certain kinds of names are allowed in constant
3240          expression.  Enumerators and template parameters have already
3241          been handled above.  */
3242       if (! error_operand_p (decl)
3243           && integral_constant_expression_p
3244           && ! decl_constant_var_p (decl)
3245           && ! builtin_valid_in_constant_expr_p (decl))
3246         {
3247           if (!allow_non_integral_constant_expression_p)
3248             {
3249               error ("%qD cannot appear in a constant-expression", decl);
3250               return error_mark_node;
3251             }
3252           *non_integral_constant_expression_p = true;
3253         }
3254
3255       if (scope)
3256         {
3257           decl = (adjust_result_of_qualified_name_lookup
3258                   (decl, scope, current_nonlambda_class_type()));
3259
3260           if (TREE_CODE (decl) == FUNCTION_DECL)
3261             mark_used (decl);
3262
3263           if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3264             decl = finish_qualified_id_expr (scope,
3265                                              decl,
3266                                              done,
3267                                              address_p,
3268                                              template_p,
3269                                              template_arg_p);
3270           else
3271             {
3272               tree r = convert_from_reference (decl);
3273
3274               /* In a template, return a SCOPE_REF for most qualified-ids
3275                  so that we can check access at instantiation time.  But if
3276                  we're looking at a member of the current instantiation, we
3277                  know we have access and building up the SCOPE_REF confuses
3278                  non-type template argument handling.  */
3279               if (processing_template_decl && TYPE_P (scope)
3280                   && !currently_open_class (scope))
3281                 r = build_qualified_name (TREE_TYPE (r),
3282                                           scope, decl,
3283                                           template_p);
3284               decl = r;
3285             }
3286         }
3287       else if (TREE_CODE (decl) == FIELD_DECL)
3288         {
3289           /* Since SCOPE is NULL here, this is an unqualified name.
3290              Access checking has been performed during name lookup
3291              already.  Turn off checking to avoid duplicate errors.  */
3292           push_deferring_access_checks (dk_no_check);
3293           decl = finish_non_static_data_member (decl, NULL_TREE,
3294                                                 /*qualifying_scope=*/NULL_TREE);
3295           pop_deferring_access_checks ();
3296         }
3297       else if (is_overloaded_fn (decl))
3298         {
3299           tree first_fn;
3300
3301           first_fn = get_first_fn (decl);
3302           if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3303             first_fn = DECL_TEMPLATE_RESULT (first_fn);
3304
3305           if (!really_overloaded_fn (decl)
3306               && !mark_used (first_fn))
3307             return error_mark_node;
3308
3309           if (!template_arg_p
3310               && TREE_CODE (first_fn) == FUNCTION_DECL
3311               && DECL_FUNCTION_MEMBER_P (first_fn)
3312               && !shared_member_p (decl))
3313             {
3314               /* A set of member functions.  */
3315               decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3316               return finish_class_member_access_expr (decl, id_expression,
3317                                                       /*template_p=*/false,
3318                                                       tf_warning_or_error);
3319             }
3320
3321           decl = baselink_for_fns (decl);
3322         }
3323       else
3324         {
3325           if (DECL_P (decl) && DECL_NONLOCAL (decl)
3326               && DECL_CLASS_SCOPE_P (decl))
3327             {
3328               tree context = context_for_name_lookup (decl); 
3329               if (context != current_class_type)
3330                 {
3331                   tree path = currently_open_derived_class (context);
3332                   perform_or_defer_access_check (TYPE_BINFO (path),
3333                                                  decl, decl);
3334                 }
3335             }
3336
3337           decl = convert_from_reference (decl);
3338         }
3339     }
3340
3341   if (TREE_DEPRECATED (decl))
3342     warn_deprecated_use (decl, NULL_TREE);
3343
3344   return decl;
3345 }
3346
3347 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3348    use as a type-specifier.  */
3349
3350 tree
3351 finish_typeof (tree expr)
3352 {
3353   tree type;
3354
3355   if (type_dependent_expression_p (expr))
3356     {
3357       type = cxx_make_type (TYPEOF_TYPE);
3358       TYPEOF_TYPE_EXPR (type) = expr;
3359       SET_TYPE_STRUCTURAL_EQUALITY (type);
3360
3361       return type;
3362     }
3363
3364   expr = mark_type_use (expr);
3365
3366   type = unlowered_expr_type (expr);
3367
3368   if (!type || type == unknown_type_node)
3369     {
3370       error ("type of %qE is unknown", expr);
3371       return error_mark_node;
3372     }
3373
3374   return type;
3375 }
3376
3377 /* Implement the __underlying_type keyword: Return the underlying
3378    type of TYPE, suitable for use as a type-specifier.  */
3379
3380 tree
3381 finish_underlying_type (tree type)
3382 {
3383   tree underlying_type;
3384
3385   if (processing_template_decl)
3386     {
3387       underlying_type = cxx_make_type (UNDERLYING_TYPE);
3388       UNDERLYING_TYPE_TYPE (underlying_type) = type;
3389       SET_TYPE_STRUCTURAL_EQUALITY (underlying_type);
3390
3391       return underlying_type;
3392     }
3393
3394   complete_type (type);
3395
3396   if (TREE_CODE (type) != ENUMERAL_TYPE)
3397     {
3398       error ("%qT is not an enumeration type", type);
3399       return error_mark_node;
3400     }
3401
3402   underlying_type = ENUM_UNDERLYING_TYPE (type);
3403
3404   /* Fixup necessary in this case because ENUM_UNDERLYING_TYPE
3405      includes TYPE_MIN_VALUE and TYPE_MAX_VALUE information.
3406      See finish_enum_value_list for details.  */
3407   if (!ENUM_FIXED_UNDERLYING_TYPE_P (type))
3408     underlying_type
3409       = c_common_type_for_mode (TYPE_MODE (underlying_type),
3410                                 TYPE_UNSIGNED (underlying_type));
3411
3412   return underlying_type;
3413 }
3414
3415 /* Implement the __direct_bases keyword: Return the direct base classes
3416    of type */
3417
3418 tree
3419 calculate_direct_bases (tree type)
3420 {
3421   VEC(tree, gc) *vector = make_tree_vector();
3422   tree bases_vec = NULL_TREE;
3423   VEC(tree, none) *base_binfos;
3424   tree binfo;
3425   unsigned i;
3426
3427   complete_type (type);
3428
3429   if (!NON_UNION_CLASS_TYPE_P (type))
3430     return make_tree_vec (0);
3431
3432   base_binfos = BINFO_BASE_BINFOS (TYPE_BINFO (type));
3433
3434   /* Virtual bases are initialized first */
3435   for (i = 0; VEC_iterate (tree, base_binfos, i, binfo); i++)
3436     {
3437       if (BINFO_VIRTUAL_P (binfo))
3438        {
3439          VEC_safe_push (tree, gc, vector, binfo);
3440        }
3441     }
3442
3443   /* Now non-virtuals */
3444   for (i = 0; VEC_iterate (tree, base_binfos, i, binfo); i++)
3445     {
3446       if (!BINFO_VIRTUAL_P (binfo))
3447        {
3448          VEC_safe_push (tree, gc, vector, binfo);
3449        }
3450     }
3451
3452
3453   bases_vec = make_tree_vec (VEC_length (tree, vector));
3454
3455   for (i = 0; i < VEC_length (tree, vector); ++i)
3456     {
3457       TREE_VEC_ELT (bases_vec, i) = BINFO_TYPE (VEC_index (tree, vector, i));
3458     }
3459   return bases_vec;
3460 }
3461
3462 /* Implement the __bases keyword: Return the base classes
3463    of type */
3464
3465 /* Find morally non-virtual base classes by walking binfo hierarchy */
3466 /* Virtual base classes are handled separately in finish_bases */
3467
3468 static tree
3469 dfs_calculate_bases_pre (tree binfo, ATTRIBUTE_UNUSED void *data_)
3470 {
3471   /* Don't walk bases of virtual bases */
3472   return BINFO_VIRTUAL_P (binfo) ? dfs_skip_bases : NULL_TREE;
3473 }
3474
3475 static tree
3476 dfs_calculate_bases_post (tree binfo, void *data_)
3477 {
3478   VEC(tree, gc) **data = (VEC(tree, gc) **) data_;
3479   if (!BINFO_VIRTUAL_P (binfo))
3480     {
3481       VEC_safe_push (tree, gc, *data, BINFO_TYPE (binfo));
3482     }
3483   return NULL_TREE;
3484 }
3485
3486 /* Calculates the morally non-virtual base classes of a class */
3487 static VEC(tree, gc) *
3488 calculate_bases_helper (tree type)
3489 {
3490   VEC(tree, gc) *vector = make_tree_vector();
3491
3492   /* Now add non-virtual base classes in order of construction */
3493   dfs_walk_all (TYPE_BINFO (type),
3494                 dfs_calculate_bases_pre, dfs_calculate_bases_post, &vector);
3495   return vector;
3496 }
3497
3498 tree
3499 calculate_bases (tree type)
3500 {
3501   VEC(tree, gc) *vector = make_tree_vector();
3502   tree bases_vec = NULL_TREE;
3503   unsigned i;
3504   VEC(tree, gc) *vbases;
3505   VEC(tree, gc) *nonvbases;
3506   tree binfo;
3507
3508   complete_type (type);
3509
3510   if (!NON_UNION_CLASS_TYPE_P (type))
3511     return make_tree_vec (0);
3512
3513   /* First go through virtual base classes */
3514   for (vbases = CLASSTYPE_VBASECLASSES (type), i = 0;
3515        VEC_iterate (tree, vbases, i, binfo); i++)
3516     {
3517       VEC(tree, gc) *vbase_bases = calculate_bases_helper (BINFO_TYPE (binfo));
3518       VEC_safe_splice (tree, gc, vector, vbase_bases);
3519       release_tree_vector (vbase_bases);
3520     }
3521
3522   /* Now for the non-virtual bases */
3523   nonvbases = calculate_bases_helper (type);
3524   VEC_safe_splice (tree, gc, vector, nonvbases);
3525   release_tree_vector (nonvbases);
3526
3527   /* Last element is entire class, so don't copy */
3528   bases_vec = make_tree_vec (VEC_length (tree, vector) - 1);
3529
3530   for (i = 0; i < VEC_length (tree, vector) - 1; ++i)
3531     {
3532       TREE_VEC_ELT (bases_vec, i) = VEC_index (tree, vector, i);
3533     }
3534   release_tree_vector (vector);
3535   return bases_vec;
3536 }
3537
3538 tree
3539 finish_bases (tree type, bool direct)
3540 {
3541   tree bases = NULL_TREE;
3542
3543   if (!processing_template_decl)
3544     {
3545       /* Parameter packs can only be used in templates */
3546       error ("Parameter pack __bases only valid in template declaration");
3547       return error_mark_node;
3548     }
3549
3550   bases = cxx_make_type (BASES);
3551   BASES_TYPE (bases) = type;
3552   BASES_DIRECT (bases) = direct;
3553   SET_TYPE_STRUCTURAL_EQUALITY (bases);
3554
3555   return bases;
3556 }
3557
3558 /* Perform C++-specific checks for __builtin_offsetof before calling
3559    fold_offsetof.  */
3560
3561 tree
3562 finish_offsetof (tree expr)
3563 {
3564   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3565     {
3566       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3567               TREE_OPERAND (expr, 2));
3568       return error_mark_node;
3569     }
3570   if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3571       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3572       || TREE_TYPE (expr) == unknown_type_node)
3573     {
3574       if (TREE_CODE (expr) == COMPONENT_REF
3575           || TREE_CODE (expr) == COMPOUND_EXPR)
3576         expr = TREE_OPERAND (expr, 1);
3577       error ("cannot apply %<offsetof%> to member function %qD", expr);
3578       return error_mark_node;
3579     }
3580   if (REFERENCE_REF_P (expr))
3581     expr = TREE_OPERAND (expr, 0);
3582   if (TREE_CODE (expr) == COMPONENT_REF)
3583     {
3584       tree object = TREE_OPERAND (expr, 0);
3585       if (!complete_type_or_else (TREE_TYPE (object), object))
3586         return error_mark_node;
3587     }
3588   return fold_offsetof (expr);
3589 }
3590
3591 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3592    function is broken out from the above for the benefit of the tree-ssa
3593    project.  */
3594
3595 void
3596 simplify_aggr_init_expr (tree *tp)
3597 {
3598   tree aggr_init_expr = *tp;
3599
3600   /* Form an appropriate CALL_EXPR.  */
3601   tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3602   tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3603   tree type = TREE_TYPE (slot);
3604
3605   tree call_expr;
3606   enum style_t { ctor, arg, pcc } style;
3607
3608   if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3609     style = ctor;
3610 #ifdef PCC_STATIC_STRUCT_RETURN
3611   else if (1)
3612     style = pcc;
3613 #endif
3614   else
3615     {
3616       gcc_assert (TREE_ADDRESSABLE (type));
3617       style = arg;
3618     }
3619
3620   call_expr = build_call_array_loc (input_location,
3621                                     TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3622                                     fn,
3623                                     aggr_init_expr_nargs (aggr_init_expr),
3624                                     AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3625   TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3626
3627   if (style == ctor)
3628     {
3629       /* Replace the first argument to the ctor with the address of the
3630          slot.  */
3631       cxx_mark_addressable (slot);
3632       CALL_EXPR_ARG (call_expr, 0) =
3633         build1 (ADDR_EXPR, build_pointer_type (type), slot);
3634     }
3635   else if (style == arg)
3636     {
3637       /* Just mark it addressable here, and leave the rest to
3638          expand_call{,_inline}.  */
3639       cxx_mark_addressable (slot);
3640       CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3641       call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3642     }
3643   else if (style == pcc)
3644     {
3645       /* If we're using the non-reentrant PCC calling convention, then we
3646          need to copy the returned value out of the static buffer into the
3647          SLOT.  */
3648       push_deferring_access_checks (dk_no_check);
3649       call_expr = build_aggr_init (slot, call_expr,
3650                                    DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3651                                    tf_warning_or_error);
3652       pop_deferring_access_checks ();
3653       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3654     }
3655
3656   if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3657     {
3658       tree init = build_zero_init (type, NULL_TREE,
3659                                    /*static_storage_p=*/false);
3660       init = build2 (INIT_EXPR, void_type_node, slot, init);
3661       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3662                           init, call_expr);
3663     }
3664
3665   *tp = call_expr;
3666 }
3667
3668 /* Emit all thunks to FN that should be emitted when FN is emitted.  */
3669
3670 void
3671 emit_associated_thunks (tree fn)
3672 {
3673   /* When we use vcall offsets, we emit thunks with the virtual
3674      functions to which they thunk. The whole point of vcall offsets
3675      is so that you can know statically the entire set of thunks that
3676      will ever be needed for a given virtual function, thereby
3677      enabling you to output all the thunks with the function itself.  */
3678   if (DECL_VIRTUAL_P (fn)
3679       /* Do not emit thunks for extern template instantiations.  */
3680       && ! DECL_REALLY_EXTERN (fn))
3681     {
3682       tree thunk;
3683
3684       for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3685         {
3686           if (!THUNK_ALIAS (thunk))
3687             {
3688               use_thunk (thunk, /*emit_p=*/1);
3689               if (DECL_RESULT_THUNK_P (thunk))
3690                 {
3691                   tree probe;
3692
3693                   for (probe = DECL_THUNKS (thunk);
3694                        probe; probe = DECL_CHAIN (probe))
3695                     use_thunk (probe, /*emit_p=*/1);
3696                 }
3697             }
3698           else
3699             gcc_assert (!DECL_THUNKS (thunk));
3700         }
3701     }
3702 }
3703
3704 /* Returns true iff FUN is an instantiation of a constexpr function
3705    template.  */
3706
3707 static inline bool
3708 is_instantiation_of_constexpr (tree fun)
3709 {
3710   return (DECL_TEMPLOID_INSTANTIATION (fun)
3711           && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
3712                                         (DECL_TI_TEMPLATE (fun))));
3713 }
3714
3715 /* Generate RTL for FN.  */
3716
3717 bool
3718 expand_or_defer_fn_1 (tree fn)
3719 {
3720   /* When the parser calls us after finishing the body of a template
3721      function, we don't really want to expand the body.  */
3722   if (processing_template_decl)
3723     {
3724       /* Normally, collection only occurs in rest_of_compilation.  So,
3725          if we don't collect here, we never collect junk generated
3726          during the processing of templates until we hit a
3727          non-template function.  It's not safe to do this inside a
3728          nested class, though, as the parser may have local state that
3729          is not a GC root.  */
3730       if (!function_depth)
3731         ggc_collect ();
3732       return false;
3733     }
3734
3735   gcc_assert (DECL_SAVED_TREE (fn));
3736
3737   /* If this is a constructor or destructor body, we have to clone
3738      it.  */
3739   if (maybe_clone_body (fn))
3740     {
3741       /* We don't want to process FN again, so pretend we've written
3742          it out, even though we haven't.  */
3743       TREE_ASM_WRITTEN (fn) = 1;
3744       /* If this is an instantiation of a constexpr function, keep
3745          DECL_SAVED_TREE for explain_invalid_constexpr_fn.  */
3746       if (!is_instantiation_of_constexpr (fn))
3747         DECL_SAVED_TREE (fn) = NULL_TREE;
3748       return false;
3749     }
3750
3751   /* We make a decision about linkage for these functions at the end
3752      of the compilation.  Until that point, we do not want the back
3753      end to output them -- but we do want it to see the bodies of
3754      these functions so that it can inline them as appropriate.  */
3755   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3756     {
3757       if (DECL_INTERFACE_KNOWN (fn))
3758         /* We've already made a decision as to how this function will
3759            be handled.  */;
3760       else if (!at_eof)
3761         {
3762           DECL_EXTERNAL (fn) = 1;
3763           DECL_NOT_REALLY_EXTERN (fn) = 1;
3764           note_vague_linkage_fn (fn);
3765           /* A non-template inline function with external linkage will
3766              always be COMDAT.  As we must eventually determine the
3767              linkage of all functions, and as that causes writes to
3768              the data mapped in from the PCH file, it's advantageous
3769              to mark the functions at this point.  */
3770           if (!DECL_IMPLICIT_INSTANTIATION (fn))
3771             {
3772               /* This function must have external linkage, as
3773                  otherwise DECL_INTERFACE_KNOWN would have been
3774                  set.  */
3775               gcc_assert (TREE_PUBLIC (fn));
3776               comdat_linkage (fn);
3777               DECL_INTERFACE_KNOWN (fn) = 1;
3778             }
3779         }
3780       else
3781         import_export_decl (fn);
3782
3783       /* If the user wants us to keep all inline functions, then mark
3784          this function as needed so that finish_file will make sure to
3785          output it later.  Similarly, all dllexport'd functions must
3786          be emitted; there may be callers in other DLLs.  */
3787       if ((flag_keep_inline_functions
3788            && DECL_DECLARED_INLINE_P (fn)
3789            && !DECL_REALLY_EXTERN (fn))
3790           || (flag_keep_inline_dllexport
3791               && lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn))))
3792         {
3793           mark_needed (fn);
3794           DECL_EXTERNAL (fn) = 0;
3795         }
3796     }
3797
3798   /* There's no reason to do any of the work here if we're only doing
3799      semantic analysis; this code just generates RTL.  */
3800   if (flag_syntax_only)
3801     return false;
3802
3803   return true;
3804 }
3805
3806 void
3807 expand_or_defer_fn (tree fn)
3808 {
3809   if (expand_or_defer_fn_1 (fn))
3810     {
3811       function_depth++;
3812
3813       /* Expand or defer, at the whim of the compilation unit manager.  */
3814       cgraph_finalize_function (fn, function_depth > 1);
3815       emit_associated_thunks (fn);
3816
3817       function_depth--;
3818     }
3819 }
3820
3821 struct nrv_data
3822 {
3823   tree var;
3824   tree result;
3825   htab_t visited;
3826 };
3827
3828 /* Helper function for walk_tree, used by finalize_nrv below.  */
3829
3830 static tree
3831 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3832 {
3833   struct nrv_data *dp = (struct nrv_data *)data;
3834   void **slot;
3835
3836   /* No need to walk into types.  There wouldn't be any need to walk into
3837      non-statements, except that we have to consider STMT_EXPRs.  */
3838   if (TYPE_P (*tp))
3839     *walk_subtrees = 0;
3840   /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3841      but differs from using NULL_TREE in that it indicates that we care
3842      about the value of the RESULT_DECL.  */
3843   else if (TREE_CODE (*tp) == RETURN_EXPR)
3844     TREE_OPERAND (*tp, 0) = dp->result;
3845   /* Change all cleanups for the NRV to only run when an exception is
3846      thrown.  */
3847   else if (TREE_CODE (*tp) == CLEANUP_STMT
3848            && CLEANUP_DECL (*tp) == dp->var)
3849     CLEANUP_EH_ONLY (*tp) = 1;
3850   /* Replace the DECL_EXPR for the NRV with an initialization of the
3851      RESULT_DECL, if needed.  */
3852   else if (TREE_CODE (*tp) == DECL_EXPR
3853            && DECL_EXPR_DECL (*tp) == dp->var)
3854     {
3855       tree init;
3856       if (DECL_INITIAL (dp->var)
3857           && DECL_INITIAL (dp->var) != error_mark_node)
3858         init = build2 (INIT_EXPR, void_type_node, dp->result,
3859                        DECL_INITIAL (dp->var));
3860       else
3861         init = build_empty_stmt (EXPR_LOCATION (*tp));
3862       DECL_INITIAL (dp->var) = NULL_TREE;
3863       SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3864       *tp = init;
3865     }
3866   /* And replace all uses of the NRV with the RESULT_DECL.  */
3867   else if (*tp == dp->var)
3868     *tp = dp->result;
3869
3870   /* Avoid walking into the same tree more than once.  Unfortunately, we
3871      can't just use walk_tree_without duplicates because it would only call
3872      us for the first occurrence of dp->var in the function body.  */
3873   slot = htab_find_slot (dp->visited, *tp, INSERT);
3874   if (*slot)
3875     *walk_subtrees = 0;
3876   else
3877     *slot = *tp;
3878
3879   /* Keep iterating.  */
3880   return NULL_TREE;
3881 }
3882
3883 /* Called from finish_function to implement the named return value
3884    optimization by overriding all the RETURN_EXPRs and pertinent
3885    CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3886    RESULT_DECL for the function.  */
3887
3888 void
3889 finalize_nrv (tree *tp, tree var, tree result)
3890 {
3891   struct nrv_data data;
3892
3893   /* Copy name from VAR to RESULT.  */
3894   DECL_NAME (result) = DECL_NAME (var);
3895   /* Don't forget that we take its address.  */
3896   TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3897   /* Finally set DECL_VALUE_EXPR to avoid assigning
3898      a stack slot at -O0 for the original var and debug info
3899      uses RESULT location for VAR.  */
3900   SET_DECL_VALUE_EXPR (var, result);
3901   DECL_HAS_VALUE_EXPR_P (var) = 1;
3902
3903   data.var = var;
3904   data.result = result;
3905   data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3906   cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3907   htab_delete (data.visited);
3908 }
3909 \f
3910 /* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
3911
3912 bool
3913 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3914                             bool need_copy_ctor, bool need_copy_assignment)
3915 {
3916   int save_errorcount = errorcount;
3917   tree info, t;
3918
3919   /* Always allocate 3 elements for simplicity.  These are the
3920      function decls for the ctor, dtor, and assignment op.
3921      This layout is known to the three lang hooks,
3922      cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3923      and cxx_omp_clause_assign_op.  */
3924   info = make_tree_vec (3);
3925   CP_OMP_CLAUSE_INFO (c) = info;
3926
3927   if (need_default_ctor || need_copy_ctor)
3928     {
3929       if (need_default_ctor)
3930         t = get_default_ctor (type);
3931       else
3932         t = get_copy_ctor (type, tf_warning_or_error);
3933
3934       if (t && !trivial_fn_p (t))
3935         TREE_VEC_ELT (info, 0) = t;
3936     }
3937
3938   if ((need_default_ctor || need_copy_ctor)
3939       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3940     TREE_VEC_ELT (info, 1) = get_dtor (type, tf_warning_or_error);
3941
3942   if (need_copy_assignment)
3943     {
3944       t = get_copy_assign (type);
3945
3946       if (t && !trivial_fn_p (t))
3947         TREE_VEC_ELT (info, 2) = t;
3948     }
3949
3950   return errorcount != save_errorcount;
3951 }
3952
3953 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3954    Remove any elements from the list that are invalid.  */
3955
3956 tree
3957 finish_omp_clauses (tree clauses)
3958 {
3959   bitmap_head generic_head, firstprivate_head, lastprivate_head;
3960   tree c, t, *pc = &clauses;
3961   const char *name;
3962
3963   bitmap_obstack_initialize (NULL);
3964   bitmap_initialize (&generic_head, &bitmap_default_obstack);
3965   bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3966   bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3967
3968   for (pc = &clauses, c = clauses; c ; c = *pc)
3969     {
3970       bool remove = false;
3971
3972       switch (OMP_CLAUSE_CODE (c))
3973         {
3974         case OMP_CLAUSE_SHARED:
3975           name = "shared";
3976           goto check_dup_generic;
3977         case OMP_CLAUSE_PRIVATE:
3978           name = "private";
3979           goto check_dup_generic;
3980         case OMP_CLAUSE_REDUCTION:
3981           name = "reduction";
3982           goto check_dup_generic;
3983         case OMP_CLAUSE_COPYPRIVATE:
3984           name = "copyprivate";
3985           goto check_dup_generic;
3986         case OMP_CLAUSE_COPYIN:
3987           name = "copyin";
3988           goto check_dup_generic;
3989         check_dup_generic:
3990           t = OMP_CLAUSE_DECL (c);
3991           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3992             {
3993               if (processing_template_decl)
3994                 break;
3995               if (DECL_P (t))
3996                 error ("%qD is not a variable in clause %qs", t, name);
3997               else
3998                 error ("%qE is not a variable in clause %qs", t, name);
3999               remove = true;
4000             }
4001           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4002                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
4003                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
4004             {
4005               error ("%qD appears more than once in data clauses", t);
4006               remove = true;
4007             }
4008           else
4009             bitmap_set_bit (&generic_head, DECL_UID (t));
4010           break;
4011
4012         case OMP_CLAUSE_FIRSTPRIVATE:
4013           t = OMP_CLAUSE_DECL (c);
4014           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4015             {
4016               if (processing_template_decl)
4017                 break;
4018               if (DECL_P (t))
4019                 error ("%qD is not a variable in clause %<firstprivate%>", t);
4020               else
4021                 error ("%qE is not a variable in clause %<firstprivate%>", t);
4022               remove = true;
4023             }
4024           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4025                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
4026             {
4027               error ("%qD appears more than once in data clauses", t);
4028               remove = true;
4029             }
4030           else
4031             bitmap_set_bit (&firstprivate_head, DECL_UID (t));
4032           break;
4033
4034         case OMP_CLAUSE_LASTPRIVATE:
4035           t = OMP_CLAUSE_DECL (c);
4036           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4037             {
4038               if (processing_template_decl)
4039                 break;
4040               if (DECL_P (t))
4041                 error ("%qD is not a variable in clause %<lastprivate%>", t);
4042               else
4043                 error ("%qE is not a variable in clause %<lastprivate%>", t);
4044               remove = true;
4045             }
4046           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
4047                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
4048             {
4049               error ("%qD appears more than once in data clauses", t);
4050               remove = true;
4051             }
4052           else
4053             bitmap_set_bit (&lastprivate_head, DECL_UID (t));
4054           break;
4055
4056         case OMP_CLAUSE_IF:
4057           t = OMP_CLAUSE_IF_EXPR (c);
4058           t = maybe_convert_cond (t);
4059           if (t == error_mark_node)
4060             remove = true;
4061           else if (!processing_template_decl)
4062             t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4063           OMP_CLAUSE_IF_EXPR (c) = t;
4064           break;
4065
4066         case OMP_CLAUSE_FINAL:
4067           t = OMP_CLAUSE_FINAL_EXPR (c);
4068           t = maybe_convert_cond (t);
4069           if (t == error_mark_node)
4070             remove = true;
4071           else if (!processing_template_decl)
4072             t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4073           OMP_CLAUSE_FINAL_EXPR (c) = t;
4074           break;
4075
4076         case OMP_CLAUSE_NUM_THREADS:
4077           t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
4078           if (t == error_mark_node)
4079             remove = true;
4080           else if (!type_dependent_expression_p (t)
4081                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
4082             {
4083               error ("num_threads expression must be integral");
4084               remove = true;
4085             }
4086           else
4087             {
4088               t = mark_rvalue_use (t);
4089               if (!processing_template_decl)
4090                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4091               OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
4092             }
4093           break;
4094
4095         case OMP_CLAUSE_SCHEDULE:
4096           t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
4097           if (t == NULL)
4098             ;
4099           else if (t == error_mark_node)
4100             remove = true;
4101           else if (!type_dependent_expression_p (t)
4102                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
4103             {
4104               error ("schedule chunk size expression must be integral");
4105               remove = true;
4106             }
4107           else
4108             {
4109               t = mark_rvalue_use (t);
4110               if (!processing_template_decl)
4111                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4112               OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
4113             }
4114           break;
4115
4116         case OMP_CLAUSE_NOWAIT:
4117         case OMP_CLAUSE_ORDERED:
4118         case OMP_CLAUSE_DEFAULT:
4119         case OMP_CLAUSE_UNTIED:
4120         case OMP_CLAUSE_COLLAPSE:
4121         case OMP_CLAUSE_MERGEABLE:
4122           break;
4123
4124         default:
4125           gcc_unreachable ();
4126         }
4127
4128       if (remove)
4129         *pc = OMP_CLAUSE_CHAIN (c);
4130       else
4131         pc = &OMP_CLAUSE_CHAIN (c);
4132     }
4133
4134   for (pc = &clauses, c = clauses; c ; c = *pc)
4135     {
4136       enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
4137       bool remove = false;
4138       bool need_complete_non_reference = false;
4139       bool need_default_ctor = false;
4140       bool need_copy_ctor = false;
4141       bool need_copy_assignment = false;
4142       bool need_implicitly_determined = false;
4143       tree type, inner_type;
4144
4145       switch (c_kind)
4146         {
4147         case OMP_CLAUSE_SHARED:
4148           name = "shared";
4149           need_implicitly_determined = true;
4150           break;
4151         case OMP_CLAUSE_PRIVATE:
4152           name = "private";
4153           need_complete_non_reference = true;
4154           need_default_ctor = true;
4155           need_implicitly_determined = true;
4156           break;
4157         case OMP_CLAUSE_FIRSTPRIVATE:
4158           name = "firstprivate";
4159           need_complete_non_reference = true;
4160           need_copy_ctor = true;
4161           need_implicitly_determined = true;
4162           break;
4163         case OMP_CLAUSE_LASTPRIVATE:
4164           name = "lastprivate";
4165           need_complete_non_reference = true;
4166           need_copy_assignment = true;
4167           need_implicitly_determined = true;
4168           break;
4169         case OMP_CLAUSE_REDUCTION:
4170           name = "reduction";
4171           need_implicitly_determined = true;
4172           break;
4173         case OMP_CLAUSE_COPYPRIVATE:
4174           name = "copyprivate";
4175           need_copy_assignment = true;
4176           break;
4177         case OMP_CLAUSE_COPYIN:
4178           name = "copyin";
4179           need_copy_assignment = true;
4180           break;
4181         default:
4182           pc = &OMP_CLAUSE_CHAIN (c);
4183           continue;
4184         }
4185
4186       t = OMP_CLAUSE_DECL (c);
4187       if (processing_template_decl
4188           && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4189         {
4190           pc = &OMP_CLAUSE_CHAIN (c);
4191           continue;
4192         }
4193
4194       switch (c_kind)
4195         {
4196         case OMP_CLAUSE_LASTPRIVATE:
4197           if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
4198             need_default_ctor = true;
4199           break;
4200
4201         case OMP_CLAUSE_REDUCTION:
4202           if (AGGREGATE_TYPE_P (TREE_TYPE (t))
4203               || POINTER_TYPE_P (TREE_TYPE (t)))
4204             {
4205               error ("%qE has invalid type for %<reduction%>", t);
4206               remove = true;
4207             }
4208           else if (FLOAT_TYPE_P (TREE_TYPE (t)))
4209             {
4210               enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
4211               switch (r_code)
4212                 {
4213                 case PLUS_EXPR:
4214                 case MULT_EXPR:
4215                 case MINUS_EXPR:
4216                 case MIN_EXPR:
4217                 case MAX_EXPR:
4218                   break;
4219                 default:
4220                   error ("%qE has invalid type for %<reduction(%s)%>",
4221                          t, operator_name_info[r_code].name);
4222                   remove = true;
4223                 }
4224             }
4225           break;
4226
4227         case OMP_CLAUSE_COPYIN:
4228           if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
4229             {
4230               error ("%qE must be %<threadprivate%> for %<copyin%>", t);
4231               remove = true;
4232             }
4233           break;
4234
4235         default:
4236           break;
4237         }
4238
4239       if (need_complete_non_reference || need_copy_assignment)
4240         {
4241           t = require_complete_type (t);
4242           if (t == error_mark_node)
4243             remove = true;
4244           else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
4245                    && need_complete_non_reference)
4246             {
4247               error ("%qE has reference type for %qs", t, name);
4248               remove = true;
4249             }
4250         }
4251       if (need_implicitly_determined)
4252         {
4253           const char *share_name = NULL;
4254
4255           if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
4256             share_name = "threadprivate";
4257           else switch (cxx_omp_predetermined_sharing (t))
4258             {
4259             case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
4260               break;
4261             case OMP_CLAUSE_DEFAULT_SHARED:
4262               /* const vars may be specified in firstprivate clause.  */
4263               if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
4264                   && cxx_omp_const_qual_no_mutable (t))
4265                 break;
4266               share_name = "shared";
4267               break;
4268             case OMP_CLAUSE_DEFAULT_PRIVATE:
4269               share_name = "private";
4270               break;
4271             default:
4272               gcc_unreachable ();
4273             }
4274           if (share_name)
4275             {
4276               error ("%qE is predetermined %qs for %qs",
4277                      t, share_name, name);
4278               remove = true;
4279             }
4280         }
4281
4282       /* We're interested in the base element, not arrays.  */
4283       inner_type = type = TREE_TYPE (t);
4284       while (TREE_CODE (inner_type) == ARRAY_TYPE)
4285         inner_type = TREE_TYPE (inner_type);
4286
4287       /* Check for special function availability by building a call to one.
4288          Save the results, because later we won't be in the right context
4289          for making these queries.  */
4290       if (CLASS_TYPE_P (inner_type)
4291           && COMPLETE_TYPE_P (inner_type)
4292           && (need_default_ctor || need_copy_ctor || need_copy_assignment)
4293           && !type_dependent_expression_p (t)
4294           && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
4295                                          need_copy_ctor, need_copy_assignment))
4296         remove = true;
4297
4298       if (remove)
4299         *pc = OMP_CLAUSE_CHAIN (c);
4300       else
4301         pc = &OMP_CLAUSE_CHAIN (c);
4302     }
4303
4304   bitmap_obstack_release (NULL);
4305   return clauses;
4306 }
4307
4308 /* For all variables in the tree_list VARS, mark them as thread local.  */
4309
4310 void
4311 finish_omp_threadprivate (tree vars)
4312 {
4313   tree t;
4314
4315   /* Mark every variable in VARS to be assigned thread local storage.  */
4316   for (t = vars; t; t = TREE_CHAIN (t))
4317     {
4318       tree v = TREE_PURPOSE (t);
4319
4320       if (error_operand_p (v))
4321         ;
4322       else if (TREE_CODE (v) != VAR_DECL)
4323         error ("%<threadprivate%> %qD is not file, namespace "
4324                "or block scope variable", v);
4325       /* If V had already been marked threadprivate, it doesn't matter
4326          whether it had been used prior to this point.  */
4327       else if (TREE_USED (v)
4328           && (DECL_LANG_SPECIFIC (v) == NULL
4329               || !CP_DECL_THREADPRIVATE_P (v)))
4330         error ("%qE declared %<threadprivate%> after first use", v);
4331       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
4332         error ("automatic variable %qE cannot be %<threadprivate%>", v);
4333       else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
4334         error ("%<threadprivate%> %qE has incomplete type", v);
4335       else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
4336                && CP_DECL_CONTEXT (v) != current_class_type)
4337         error ("%<threadprivate%> %qE directive not "
4338                "in %qT definition", v, CP_DECL_CONTEXT (v));
4339       else
4340         {
4341           /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
4342           if (DECL_LANG_SPECIFIC (v) == NULL)
4343             {
4344               retrofit_lang_decl (v);
4345
4346               /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4347                  after the allocation of the lang_decl structure.  */
4348               if (DECL_DISCRIMINATOR_P (v))
4349                 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
4350             }
4351
4352           if (! DECL_THREAD_LOCAL_P (v))
4353             {
4354               DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4355               /* If rtl has been already set for this var, call
4356                  make_decl_rtl once again, so that encode_section_info
4357                  has a chance to look at the new decl flags.  */
4358               if (DECL_RTL_SET_P (v))
4359                 make_decl_rtl (v);
4360             }
4361           CP_DECL_THREADPRIVATE_P (v) = 1;
4362         }
4363     }
4364 }
4365
4366 /* Build an OpenMP structured block.  */
4367
4368 tree
4369 begin_omp_structured_block (void)
4370 {
4371   return do_pushlevel (sk_omp);
4372 }
4373
4374 tree
4375 finish_omp_structured_block (tree block)
4376 {
4377   return do_poplevel (block);
4378 }
4379
4380 /* Similarly, except force the retention of the BLOCK.  */
4381
4382 tree
4383 begin_omp_parallel (void)
4384 {
4385   keep_next_level (true);
4386   return begin_omp_structured_block ();
4387 }
4388
4389 tree
4390 finish_omp_parallel (tree clauses, tree body)
4391 {
4392   tree stmt;
4393
4394   body = finish_omp_structured_block (body);
4395
4396   stmt = make_node (OMP_PARALLEL);
4397   TREE_TYPE (stmt) = void_type_node;
4398   OMP_PARALLEL_CLAUSES (stmt) = clauses;
4399   OMP_PARALLEL_BODY (stmt) = body;
4400
4401   return add_stmt (stmt);
4402 }
4403
4404 tree
4405 begin_omp_task (void)
4406 {
4407   keep_next_level (true);
4408   return begin_omp_structured_block ();
4409 }
4410
4411 tree
4412 finish_omp_task (tree clauses, tree body)
4413 {
4414   tree stmt;
4415
4416   body = finish_omp_structured_block (body);
4417
4418   stmt = make_node (OMP_TASK);
4419   TREE_TYPE (stmt) = void_type_node;
4420   OMP_TASK_CLAUSES (stmt) = clauses;
4421   OMP_TASK_BODY (stmt) = body;
4422
4423   return add_stmt (stmt);
4424 }
4425
4426 /* Helper function for finish_omp_for.  Convert Ith random access iterator
4427    into integral iterator.  Return FALSE if successful.  */
4428
4429 static bool
4430 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4431                                tree condv, tree incrv, tree *body,
4432                                tree *pre_body, tree clauses)
4433 {
4434   tree diff, iter_init, iter_incr = NULL, last;
4435   tree incr_var = NULL, orig_pre_body, orig_body, c;
4436   tree decl = TREE_VEC_ELT (declv, i);
4437   tree init = TREE_VEC_ELT (initv, i);
4438   tree cond = TREE_VEC_ELT (condv, i);
4439   tree incr = TREE_VEC_ELT (incrv, i);
4440   tree iter = decl;
4441   location_t elocus = locus;
4442
4443   if (init && EXPR_HAS_LOCATION (init))
4444     elocus = EXPR_LOCATION (init);
4445
4446   switch (TREE_CODE (cond))
4447     {
4448     case GT_EXPR:
4449     case GE_EXPR:
4450     case LT_EXPR:
4451     case LE_EXPR:
4452       if (TREE_OPERAND (cond, 1) == iter)
4453         cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4454                        TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4455       if (TREE_OPERAND (cond, 0) != iter)
4456         cond = error_mark_node;
4457       else
4458         {
4459           tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4460                                         TREE_OPERAND (cond, 1), ERROR_MARK,
4461                                         NULL, tf_warning_or_error);
4462           if (error_operand_p (tem))
4463             return true;
4464         }
4465       break;
4466     default:
4467       cond = error_mark_node;
4468       break;
4469     }
4470   if (cond == error_mark_node)
4471     {
4472       error_at (elocus, "invalid controlling predicate");
4473       return true;
4474     }
4475   diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4476                             ERROR_MARK, iter, ERROR_MARK, NULL,
4477                             tf_warning_or_error);
4478   if (error_operand_p (diff))
4479     return true;
4480   if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4481     {
4482       error_at (elocus, "difference between %qE and %qD does not have integer type",
4483                 TREE_OPERAND (cond, 1), iter);
4484       return true;
4485     }
4486
4487   switch (TREE_CODE (incr))
4488     {
4489     case PREINCREMENT_EXPR:
4490     case PREDECREMENT_EXPR:
4491     case POSTINCREMENT_EXPR:
4492     case POSTDECREMENT_EXPR:
4493       if (TREE_OPERAND (incr, 0) != iter)
4494         {
4495           incr = error_mark_node;
4496           break;
4497         }
4498       iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4499                                     tf_warning_or_error);
4500       if (error_operand_p (iter_incr))
4501         return true;
4502       else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4503                || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4504         incr = integer_one_node;
4505       else
4506         incr = integer_minus_one_node;
4507       break;
4508     case MODIFY_EXPR:
4509       if (TREE_OPERAND (incr, 0) != iter)
4510         incr = error_mark_node;
4511       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4512                || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4513         {
4514           tree rhs = TREE_OPERAND (incr, 1);
4515           if (TREE_OPERAND (rhs, 0) == iter)
4516             {
4517               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4518                   != INTEGER_TYPE)
4519                 incr = error_mark_node;
4520               else
4521                 {
4522                   iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4523                                                    TREE_OPERAND (rhs, 1),
4524                                                    tf_warning_or_error);
4525                   if (error_operand_p (iter_incr))
4526                     return true;
4527                   incr = TREE_OPERAND (rhs, 1);
4528                   incr = cp_convert (TREE_TYPE (diff), incr);
4529                   if (TREE_CODE (rhs) == MINUS_EXPR)
4530                     {
4531                       incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4532                       incr = fold_if_not_in_template (incr);
4533                     }
4534                   if (TREE_CODE (incr) != INTEGER_CST
4535                       && (TREE_CODE (incr) != NOP_EXPR
4536                           || (TREE_CODE (TREE_OPERAND (incr, 0))
4537                               != INTEGER_CST)))
4538                     iter_incr = NULL;
4539                 }
4540             }
4541           else if (TREE_OPERAND (rhs, 1) == iter)
4542             {
4543               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4544                   || TREE_CODE (rhs) != PLUS_EXPR)
4545                 incr = error_mark_node;
4546               else
4547                 {
4548                   iter_incr = build_x_binary_op (PLUS_EXPR,
4549                                                  TREE_OPERAND (rhs, 0),
4550                                                  ERROR_MARK, iter,
4551                                                  ERROR_MARK, NULL,
4552                                                  tf_warning_or_error);
4553                   if (error_operand_p (iter_incr))
4554                     return true;
4555                   iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4556                                                    iter_incr,
4557                                                    tf_warning_or_error);
4558                   if (error_operand_p (iter_incr))
4559                     return true;
4560                   incr = TREE_OPERAND (rhs, 0);
4561                   iter_incr = NULL;
4562                 }
4563             }
4564           else
4565             incr = error_mark_node;
4566         }
4567       else
4568         incr = error_mark_node;
4569       break;
4570     default:
4571       incr = error_mark_node;
4572       break;
4573     }
4574
4575   if (incr == error_mark_node)
4576     {
4577       error_at (elocus, "invalid increment expression");
4578       return true;
4579     }
4580
4581   incr = cp_convert (TREE_TYPE (diff), incr);
4582   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4583     if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4584         && OMP_CLAUSE_DECL (c) == iter)
4585       break;
4586
4587   decl = create_temporary_var (TREE_TYPE (diff));
4588   pushdecl (decl);
4589   add_decl_expr (decl);
4590   last = create_temporary_var (TREE_TYPE (diff));
4591   pushdecl (last);
4592   add_decl_expr (last);
4593   if (c && iter_incr == NULL)
4594     {
4595       incr_var = create_temporary_var (TREE_TYPE (diff));
4596       pushdecl (incr_var);
4597       add_decl_expr (incr_var);
4598     }
4599   gcc_assert (stmts_are_full_exprs_p ());
4600
4601   orig_pre_body = *pre_body;
4602   *pre_body = push_stmt_list ();
4603   if (orig_pre_body)
4604     add_stmt (orig_pre_body);
4605   if (init != NULL)
4606     finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4607                                            tf_warning_or_error));
4608   init = build_int_cst (TREE_TYPE (diff), 0);
4609   if (c && iter_incr == NULL)
4610     {
4611       finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4612                                              incr, tf_warning_or_error));
4613       incr = incr_var;
4614       iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4615                                        tf_warning_or_error);
4616     }
4617   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4618                                          tf_warning_or_error));
4619   *pre_body = pop_stmt_list (*pre_body);
4620
4621   cond = cp_build_binary_op (elocus,
4622                              TREE_CODE (cond), decl, diff,
4623                              tf_warning_or_error);
4624   incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4625                             elocus, incr, NULL_TREE);
4626
4627   orig_body = *body;
4628   *body = push_stmt_list ();
4629   iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4630   iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4631                                    tf_warning_or_error);
4632   iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4633   finish_expr_stmt (iter_init);
4634   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4635                                          tf_warning_or_error));
4636   add_stmt (orig_body);
4637   *body = pop_stmt_list (*body);
4638
4639   if (c)
4640     {
4641       OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4642       finish_expr_stmt (iter_incr);
4643       OMP_CLAUSE_LASTPRIVATE_STMT (c)
4644         = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4645     }
4646
4647   TREE_VEC_ELT (declv, i) = decl;
4648   TREE_VEC_ELT (initv, i) = init;
4649   TREE_VEC_ELT (condv, i) = cond;
4650   TREE_VEC_ELT (incrv, i) = incr;
4651
4652   return false;
4653 }
4654
4655 /* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
4656    are directly for their associated operands in the statement.  DECL
4657    and INIT are a combo; if DECL is NULL then INIT ought to be a
4658    MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
4659    optional statements that need to go before the loop into its
4660    sk_omp scope.  */
4661
4662 tree
4663 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4664                 tree incrv, tree body, tree pre_body, tree clauses)
4665 {
4666   tree omp_for = NULL, orig_incr = NULL;
4667   tree decl, init, cond, incr;
4668   location_t elocus;
4669   int i;
4670
4671   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4672   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4673   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4674   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4675     {
4676       decl = TREE_VEC_ELT (declv, i);
4677       init = TREE_VEC_ELT (initv, i);
4678       cond = TREE_VEC_ELT (condv, i);
4679       incr = TREE_VEC_ELT (incrv, i);
4680       elocus = locus;
4681
4682       if (decl == NULL)
4683         {
4684           if (init != NULL)
4685             switch (TREE_CODE (init))
4686               {
4687               case MODIFY_EXPR:
4688                 decl = TREE_OPERAND (init, 0);
4689                 init = TREE_OPERAND (init, 1);
4690                 break;
4691               case MODOP_EXPR:
4692                 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4693                   {
4694                     decl = TREE_OPERAND (init, 0);
4695                     init = TREE_OPERAND (init, 2);
4696                   }
4697                 break;
4698               default:
4699                 break;
4700               }
4701
4702           if (decl == NULL)
4703             {
4704               error_at (locus,
4705                         "expected iteration declaration or initialization");
4706               return NULL;
4707             }
4708         }
4709
4710       if (init && EXPR_HAS_LOCATION (init))
4711         elocus = EXPR_LOCATION (init);
4712
4713       if (cond == NULL)
4714         {
4715           error_at (elocus, "missing controlling predicate");
4716           return NULL;
4717         }
4718
4719       if (incr == NULL)
4720         {
4721           error_at (elocus, "missing increment expression");
4722           return NULL;
4723         }
4724
4725       TREE_VEC_ELT (declv, i) = decl;
4726       TREE_VEC_ELT (initv, i) = init;
4727     }
4728
4729   if (dependent_omp_for_p (declv, initv, condv, incrv))
4730     {
4731       tree stmt;
4732
4733       stmt = make_node (OMP_FOR);
4734
4735       for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4736         {
4737           /* This is really just a place-holder.  We'll be decomposing this
4738              again and going through the cp_build_modify_expr path below when
4739              we instantiate the thing.  */
4740           TREE_VEC_ELT (initv, i)
4741             = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4742                       TREE_VEC_ELT (initv, i));
4743         }
4744
4745       TREE_TYPE (stmt) = void_type_node;
4746       OMP_FOR_INIT (stmt) = initv;
4747       OMP_FOR_COND (stmt) = condv;
4748       OMP_FOR_INCR (stmt) = incrv;
4749       OMP_FOR_BODY (stmt) = body;
4750       OMP_FOR_PRE_BODY (stmt) = pre_body;
4751       OMP_FOR_CLAUSES (stmt) = clauses;
4752
4753       SET_EXPR_LOCATION (stmt, locus);
4754       return add_stmt (stmt);
4755     }
4756
4757   if (processing_template_decl)
4758     orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4759
4760   for (i = 0; i < TREE_VEC_LENGTH (declv); )
4761     {
4762       decl = TREE_VEC_ELT (declv, i);
4763       init = TREE_VEC_ELT (initv, i);
4764       cond = TREE_VEC_ELT (condv, i);
4765       incr = TREE_VEC_ELT (incrv, i);
4766       if (orig_incr)
4767         TREE_VEC_ELT (orig_incr, i) = incr;
4768       elocus = locus;
4769
4770       if (init && EXPR_HAS_LOCATION (init))
4771         elocus = EXPR_LOCATION (init);
4772
4773       if (!DECL_P (decl))
4774         {
4775           error_at (elocus, "expected iteration declaration or initialization");
4776           return NULL;
4777         }
4778
4779       if (incr && TREE_CODE (incr) == MODOP_EXPR)
4780         {
4781           if (orig_incr)
4782             TREE_VEC_ELT (orig_incr, i) = incr;
4783           incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4784                                        TREE_CODE (TREE_OPERAND (incr, 1)),
4785                                        TREE_OPERAND (incr, 2),
4786                                        tf_warning_or_error);
4787         }
4788
4789       if (CLASS_TYPE_P (TREE_TYPE (decl)))
4790         {
4791           if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4792                                              incrv, &body, &pre_body, clauses))
4793             return NULL;
4794           continue;
4795         }
4796
4797       if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4798           && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4799         {
4800           error_at (elocus, "invalid type for iteration variable %qE", decl);
4801           return NULL;
4802         }
4803
4804       if (!processing_template_decl)
4805         {
4806           init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4807           init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4808         }
4809       else
4810         init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4811       if (cond
4812           && TREE_SIDE_EFFECTS (cond)
4813           && COMPARISON_CLASS_P (cond)
4814           && !processing_template_decl)
4815         {
4816           tree t = TREE_OPERAND (cond, 0);
4817           if (TREE_SIDE_EFFECTS (t)
4818               && t != decl
4819               && (TREE_CODE (t) != NOP_EXPR
4820                   || TREE_OPERAND (t, 0) != decl))
4821             TREE_OPERAND (cond, 0)
4822               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4823
4824           t = TREE_OPERAND (cond, 1);
4825           if (TREE_SIDE_EFFECTS (t)
4826               && t != decl
4827               && (TREE_CODE (t) != NOP_EXPR
4828                   || TREE_OPERAND (t, 0) != decl))
4829             TREE_OPERAND (cond, 1)
4830               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4831         }
4832       if (decl == error_mark_node || init == error_mark_node)
4833         return NULL;
4834
4835       TREE_VEC_ELT (declv, i) = decl;
4836       TREE_VEC_ELT (initv, i) = init;
4837       TREE_VEC_ELT (condv, i) = cond;
4838       TREE_VEC_ELT (incrv, i) = incr;
4839       i++;
4840     }
4841
4842   if (IS_EMPTY_STMT (pre_body))
4843     pre_body = NULL;
4844
4845   omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4846                               body, pre_body);
4847
4848   if (omp_for == NULL)
4849     return NULL;
4850
4851   for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4852     {
4853       decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4854       incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4855
4856       if (TREE_CODE (incr) != MODIFY_EXPR)
4857         continue;
4858
4859       if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4860           && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4861           && !processing_template_decl)
4862         {
4863           tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4864           if (TREE_SIDE_EFFECTS (t)
4865               && t != decl
4866               && (TREE_CODE (t) != NOP_EXPR
4867                   || TREE_OPERAND (t, 0) != decl))
4868             TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4869               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4870
4871           t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4872           if (TREE_SIDE_EFFECTS (t)
4873               && t != decl
4874               && (TREE_CODE (t) != NOP_EXPR
4875                   || TREE_OPERAND (t, 0) != decl))
4876             TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4877               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4878         }
4879
4880       if (orig_incr)
4881         TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4882     }
4883   if (omp_for != NULL)
4884     OMP_FOR_CLAUSES (omp_for) = clauses;
4885   return omp_for;
4886 }
4887
4888 void
4889 finish_omp_atomic (enum tree_code code, enum tree_code opcode, tree lhs,
4890                    tree rhs, tree v, tree lhs1, tree rhs1)
4891 {
4892   tree orig_lhs;
4893   tree orig_rhs;
4894   tree orig_v;
4895   tree orig_lhs1;
4896   tree orig_rhs1;
4897   bool dependent_p;
4898   tree stmt;
4899
4900   orig_lhs = lhs;
4901   orig_rhs = rhs;
4902   orig_v = v;
4903   orig_lhs1 = lhs1;
4904   orig_rhs1 = rhs1;
4905   dependent_p = false;
4906   stmt = NULL_TREE;
4907
4908   /* Even in a template, we can detect invalid uses of the atomic
4909      pragma if neither LHS nor RHS is type-dependent.  */
4910   if (processing_template_decl)
4911     {
4912       dependent_p = (type_dependent_expression_p (lhs)
4913                      || (rhs && type_dependent_expression_p (rhs))
4914                      || (v && type_dependent_expression_p (v))
4915                      || (lhs1 && type_dependent_expression_p (lhs1))
4916                      || (rhs1 && type_dependent_expression_p (rhs1)));
4917       if (!dependent_p)
4918         {
4919           lhs = build_non_dependent_expr (lhs);
4920           if (rhs)
4921             rhs = build_non_dependent_expr (rhs);
4922           if (v)
4923             v = build_non_dependent_expr (v);
4924           if (lhs1)
4925             lhs1 = build_non_dependent_expr (lhs1);
4926           if (rhs1)
4927             rhs1 = build_non_dependent_expr (rhs1);
4928         }
4929     }
4930   if (!dependent_p)
4931     {
4932       stmt = c_finish_omp_atomic (input_location, code, opcode, lhs, rhs,
4933                                   v, lhs1, rhs1);
4934       if (stmt == error_mark_node)
4935         return;
4936     }
4937   if (processing_template_decl)
4938     {
4939       if (code == OMP_ATOMIC_READ)
4940         {
4941           stmt = build_min_nt (OMP_ATOMIC_READ, orig_lhs);
4942           stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
4943         }
4944       else
4945         {
4946           if (opcode == NOP_EXPR)
4947             stmt = build2 (MODIFY_EXPR, void_type_node, orig_lhs, orig_rhs);
4948           else 
4949             stmt = build2 (opcode, void_type_node, orig_lhs, orig_rhs);
4950           if (orig_rhs1)
4951             stmt = build_min_nt (COMPOUND_EXPR, orig_rhs1, stmt);
4952           if (code != OMP_ATOMIC)
4953             {
4954               stmt = build_min_nt (code, orig_lhs1, stmt);
4955               stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
4956             }
4957         }
4958       stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
4959     }
4960   add_stmt (stmt);
4961 }
4962
4963 void
4964 finish_omp_barrier (void)
4965 {
4966   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
4967   VEC(tree,gc) *vec = make_tree_vector ();
4968   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4969   release_tree_vector (vec);
4970   finish_expr_stmt (stmt);
4971 }
4972
4973 void
4974 finish_omp_flush (void)
4975 {
4976   tree fn = builtin_decl_explicit (BUILT_IN_SYNC_SYNCHRONIZE);
4977   VEC(tree,gc) *vec = make_tree_vector ();
4978   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4979   release_tree_vector (vec);
4980   finish_expr_stmt (stmt);
4981 }
4982
4983 void
4984 finish_omp_taskwait (void)
4985 {
4986   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKWAIT);
4987   VEC(tree,gc) *vec = make_tree_vector ();
4988   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4989   release_tree_vector (vec);
4990   finish_expr_stmt (stmt);
4991 }
4992
4993 void
4994 finish_omp_taskyield (void)
4995 {
4996   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKYIELD);
4997   VEC(tree,gc) *vec = make_tree_vector ();
4998   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4999   release_tree_vector (vec);
5000   finish_expr_stmt (stmt);
5001 }
5002 \f
5003 /* Begin a __transaction_atomic or __transaction_relaxed statement.
5004    If PCOMPOUND is non-null, this is for a function-transaction-block, and we
5005    should create an extra compound stmt.  */
5006
5007 tree
5008 begin_transaction_stmt (location_t loc, tree *pcompound, int flags)
5009 {
5010   tree r;
5011
5012   if (pcompound)
5013     *pcompound = begin_compound_stmt (0);
5014
5015   r = build_stmt (loc, TRANSACTION_EXPR, NULL_TREE);
5016
5017   /* Only add the statement to the function if support enabled.  */
5018   if (flag_tm)
5019     add_stmt (r);
5020   else
5021     error_at (loc, ((flags & TM_STMT_ATTR_RELAXED) != 0
5022                     ? G_("%<__transaction_relaxed%> without "
5023                          "transactional memory support enabled")
5024                     : G_("%<__transaction_atomic%> without "
5025                          "transactional memory support enabled")));
5026
5027   TRANSACTION_EXPR_BODY (r) = push_stmt_list ();
5028   return r;
5029 }
5030
5031 /* End a __transaction_atomic or __transaction_relaxed statement.
5032    If COMPOUND_STMT is non-null, this is for a function-transaction-block,
5033    and we should end the compound.  If NOEX is non-NULL, we wrap the body in
5034    a MUST_NOT_THROW_EXPR with NOEX as condition.  */
5035
5036 void
5037 finish_transaction_stmt (tree stmt, tree compound_stmt, int flags, tree noex)
5038 {
5039   TRANSACTION_EXPR_BODY (stmt) = pop_stmt_list (TRANSACTION_EXPR_BODY (stmt));
5040   TRANSACTION_EXPR_OUTER (stmt) = (flags & TM_STMT_ATTR_OUTER) != 0;
5041   TRANSACTION_EXPR_RELAXED (stmt) = (flags & TM_STMT_ATTR_RELAXED) != 0;
5042   TRANSACTION_EXPR_IS_STMT (stmt) = 1;
5043
5044   /* noexcept specifications are not allowed for function transactions.  */
5045   gcc_assert (!(noex && compound_stmt));
5046   if (noex)
5047     {
5048       tree body = build_must_not_throw_expr (TRANSACTION_EXPR_BODY (stmt),
5049                                              noex);
5050       SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt)));
5051       TREE_SIDE_EFFECTS (body) = 1;
5052       TRANSACTION_EXPR_BODY (stmt) = body;
5053     }
5054
5055   if (compound_stmt)
5056     finish_compound_stmt (compound_stmt);
5057   finish_stmt ();
5058 }
5059
5060 /* Build a __transaction_atomic or __transaction_relaxed expression.  If
5061    NOEX is non-NULL, we wrap the body in a MUST_NOT_THROW_EXPR with NOEX as
5062    condition.  */
5063
5064 tree
5065 build_transaction_expr (location_t loc, tree expr, int flags, tree noex)
5066 {
5067   tree ret;
5068   if (noex)
5069     {
5070       expr = build_must_not_throw_expr (expr, noex);
5071       SET_EXPR_LOCATION (expr, loc);
5072       TREE_SIDE_EFFECTS (expr) = 1;
5073     }
5074   ret = build1 (TRANSACTION_EXPR, TREE_TYPE (expr), expr);
5075   if (flags & TM_STMT_ATTR_RELAXED)
5076         TRANSACTION_EXPR_RELAXED (ret) = 1;
5077   SET_EXPR_LOCATION (ret, loc);
5078   return ret;
5079 }
5080 \f
5081 void
5082 init_cp_semantics (void)
5083 {
5084 }
5085 \f
5086 /* Build a STATIC_ASSERT for a static assertion with the condition
5087    CONDITION and the message text MESSAGE.  LOCATION is the location
5088    of the static assertion in the source code.  When MEMBER_P, this
5089    static assertion is a member of a class.  */
5090 void 
5091 finish_static_assert (tree condition, tree message, location_t location, 
5092                       bool member_p)
5093 {
5094   if (check_for_bare_parameter_packs (condition))
5095     condition = error_mark_node;
5096
5097   if (type_dependent_expression_p (condition) 
5098       || value_dependent_expression_p (condition))
5099     {
5100       /* We're in a template; build a STATIC_ASSERT and put it in
5101          the right place. */
5102       tree assertion;
5103
5104       assertion = make_node (STATIC_ASSERT);
5105       STATIC_ASSERT_CONDITION (assertion) = condition;
5106       STATIC_ASSERT_MESSAGE (assertion) = message;
5107       STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
5108
5109       if (member_p)
5110         maybe_add_class_template_decl_list (current_class_type, 
5111                                             assertion,
5112                                             /*friend_p=*/0);
5113       else
5114         add_stmt (assertion);
5115
5116       return;
5117     }
5118
5119   /* Fold the expression and convert it to a boolean value. */
5120   condition = fold_non_dependent_expr (condition);
5121   condition = cp_convert (boolean_type_node, condition);
5122   condition = maybe_constant_value (condition);
5123
5124   if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
5125     /* Do nothing; the condition is satisfied. */
5126     ;
5127   else 
5128     {
5129       location_t saved_loc = input_location;
5130
5131       input_location = location;
5132       if (TREE_CODE (condition) == INTEGER_CST 
5133           && integer_zerop (condition))
5134         /* Report the error. */
5135         error ("static assertion failed: %s", TREE_STRING_POINTER (message));
5136       else if (condition && condition != error_mark_node)
5137         {
5138           error ("non-constant condition for static assertion");
5139           cxx_constant_value (condition);
5140         }
5141       input_location = saved_loc;
5142     }
5143 }
5144 \f
5145 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
5146    suitable for use as a type-specifier.
5147
5148    ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
5149    id-expression or a class member access, FALSE when it was parsed as
5150    a full expression.  */
5151
5152 tree
5153 finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
5154                       tsubst_flags_t complain)
5155 {
5156   tree type = NULL_TREE;
5157
5158   if (!expr || error_operand_p (expr))
5159     return error_mark_node;
5160
5161   if (TYPE_P (expr)
5162       || TREE_CODE (expr) == TYPE_DECL
5163       || (TREE_CODE (expr) == BIT_NOT_EXPR
5164           && TYPE_P (TREE_OPERAND (expr, 0))))
5165     {
5166       if (complain & tf_error)
5167         error ("argument to decltype must be an expression");
5168       return error_mark_node;
5169     }
5170
5171   /* FIXME instantiation-dependent  */
5172   if (type_dependent_expression_p (expr)
5173       /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
5174          if it isn't dependent, so that we can check access control at
5175          instantiation time, so defer the decltype as well (PR 42277).  */
5176       || (id_expression_or_member_access_p
5177           && processing_template_decl
5178           && TREE_CODE (expr) == COMPONENT_REF))
5179     {
5180       type = cxx_make_type (DECLTYPE_TYPE);
5181       DECLTYPE_TYPE_EXPR (type) = expr;
5182       DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
5183         = id_expression_or_member_access_p;
5184       SET_TYPE_STRUCTURAL_EQUALITY (type);
5185
5186       return type;
5187     }
5188
5189   /* The type denoted by decltype(e) is defined as follows:  */
5190
5191   expr = resolve_nondeduced_context (expr);
5192
5193   if (type_unknown_p (expr))
5194     {
5195       if (complain & tf_error)
5196         error ("decltype cannot resolve address of overloaded function");
5197       return error_mark_node;
5198     }
5199
5200   if (invalid_nonstatic_memfn_p (expr, complain))
5201     return error_mark_node;
5202
5203   /* To get the size of a static data member declared as an array of
5204      unknown bound, we need to instantiate it.  */
5205   if (TREE_CODE (expr) == VAR_DECL
5206       && VAR_HAD_UNKNOWN_BOUND (expr)
5207       && DECL_TEMPLATE_INSTANTIATION (expr))
5208     instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
5209
5210   if (id_expression_or_member_access_p)
5211     {
5212       /* If e is an id-expression or a class member access (5.2.5
5213          [expr.ref]), decltype(e) is defined as the type of the entity
5214          named by e. If there is no such entity, or e names a set of
5215          overloaded functions, the program is ill-formed.  */
5216       if (TREE_CODE (expr) == IDENTIFIER_NODE)
5217         expr = lookup_name (expr);
5218
5219       if (TREE_CODE (expr) == INDIRECT_REF)
5220         /* This can happen when the expression is, e.g., "a.b". Just
5221            look at the underlying operand.  */
5222         expr = TREE_OPERAND (expr, 0);
5223
5224       if (TREE_CODE (expr) == OFFSET_REF
5225           || TREE_CODE (expr) == MEMBER_REF)
5226         /* We're only interested in the field itself. If it is a
5227            BASELINK, we will need to see through it in the next
5228            step.  */
5229         expr = TREE_OPERAND (expr, 1);
5230
5231       if (BASELINK_P (expr))
5232         /* See through BASELINK nodes to the underlying function.  */
5233         expr = BASELINK_FUNCTIONS (expr);
5234
5235       switch (TREE_CODE (expr))
5236         {
5237         case FIELD_DECL:
5238           if (DECL_BIT_FIELD_TYPE (expr))
5239             {
5240               type = DECL_BIT_FIELD_TYPE (expr);
5241               break;
5242             }
5243           /* Fall through for fields that aren't bitfields.  */
5244
5245         case FUNCTION_DECL:
5246         case VAR_DECL:
5247         case CONST_DECL:
5248         case PARM_DECL:
5249         case RESULT_DECL:
5250         case TEMPLATE_PARM_INDEX:
5251           expr = mark_type_use (expr);
5252           type = TREE_TYPE (expr);
5253           break;
5254
5255         case ERROR_MARK:
5256           type = error_mark_node;
5257           break;
5258
5259         case COMPONENT_REF:
5260           mark_type_use (expr);
5261           type = is_bitfield_expr_with_lowered_type (expr);
5262           if (!type)
5263             type = TREE_TYPE (TREE_OPERAND (expr, 1));
5264           break;
5265
5266         case BIT_FIELD_REF:
5267           gcc_unreachable ();
5268
5269         case INTEGER_CST:
5270         case PTRMEM_CST:
5271           /* We can get here when the id-expression refers to an
5272              enumerator or non-type template parameter.  */
5273           type = TREE_TYPE (expr);
5274           break;
5275
5276         default:
5277           gcc_unreachable ();
5278           return error_mark_node;
5279         }
5280     }
5281   else
5282     {
5283       /* Within a lambda-expression:
5284
5285          Every occurrence of decltype((x)) where x is a possibly
5286          parenthesized id-expression that names an entity of
5287          automatic storage duration is treated as if x were
5288          transformed into an access to a corresponding data member
5289          of the closure type that would have been declared if x
5290          were a use of the denoted entity.  */
5291       if (outer_automatic_var_p (expr)
5292           && current_function_decl
5293           && LAMBDA_FUNCTION_P (current_function_decl))
5294         type = capture_decltype (expr);
5295       else if (error_operand_p (expr))
5296         type = error_mark_node;
5297       else if (expr == current_class_ptr)
5298         /* If the expression is just "this", we want the
5299            cv-unqualified pointer for the "this" type.  */
5300         type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
5301       else
5302         {
5303           /* Otherwise, where T is the type of e, if e is an lvalue,
5304              decltype(e) is defined as T&; if an xvalue, T&&; otherwise, T. */
5305           cp_lvalue_kind clk = lvalue_kind (expr);
5306           type = unlowered_expr_type (expr);
5307           gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5308           if (clk != clk_none && !(clk & clk_class))
5309             type = cp_build_reference_type (type, (clk & clk_rvalueref));
5310         }
5311     }
5312
5313   return type;
5314 }
5315
5316 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or 
5317    __has_nothrow_copy, depending on assign_p.  */
5318
5319 static bool
5320 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
5321 {
5322   tree fns;
5323
5324   if (assign_p)
5325     {
5326       int ix;
5327       ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5328       if (ix < 0)
5329         return false;
5330       fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
5331     } 
5332   else if (TYPE_HAS_COPY_CTOR (type))
5333     {
5334       /* If construction of the copy constructor was postponed, create
5335          it now.  */
5336       if (CLASSTYPE_LAZY_COPY_CTOR (type))
5337         lazily_declare_fn (sfk_copy_constructor, type);
5338       if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5339         lazily_declare_fn (sfk_move_constructor, type);
5340       fns = CLASSTYPE_CONSTRUCTORS (type);
5341     }
5342   else
5343     return false;
5344
5345   for (; fns; fns = OVL_NEXT (fns))
5346     {
5347       tree fn = OVL_CURRENT (fns);
5348  
5349       if (assign_p)
5350         {
5351           if (copy_fn_p (fn) == 0)
5352             continue;
5353         }
5354       else if (copy_fn_p (fn) <= 0)
5355         continue;
5356
5357       if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5358         return false;
5359     }
5360
5361   return true;
5362 }
5363
5364 /* Actually evaluates the trait.  */
5365
5366 static bool
5367 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5368 {
5369   enum tree_code type_code1;
5370   tree t;
5371
5372   type_code1 = TREE_CODE (type1);
5373
5374   switch (kind)
5375     {
5376     case CPTK_HAS_NOTHROW_ASSIGN:
5377       type1 = strip_array_types (type1);
5378       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5379               && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5380                   || (CLASS_TYPE_P (type1)
5381                       && classtype_has_nothrow_assign_or_copy_p (type1,
5382                                                                  true))));
5383
5384     case CPTK_HAS_TRIVIAL_ASSIGN:
5385       /* ??? The standard seems to be missing the "or array of such a class
5386          type" wording for this trait.  */
5387       type1 = strip_array_types (type1);
5388       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5389               && (trivial_type_p (type1)
5390                     || (CLASS_TYPE_P (type1)
5391                         && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5392
5393     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5394       type1 = strip_array_types (type1);
5395       return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) 
5396               || (CLASS_TYPE_P (type1)
5397                   && (t = locate_ctor (type1))
5398                   && TYPE_NOTHROW_P (TREE_TYPE (t))));
5399
5400     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5401       type1 = strip_array_types (type1);
5402       return (trivial_type_p (type1)
5403               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5404
5405     case CPTK_HAS_NOTHROW_COPY:
5406       type1 = strip_array_types (type1);
5407       return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5408               || (CLASS_TYPE_P (type1)
5409                   && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5410
5411     case CPTK_HAS_TRIVIAL_COPY:
5412       /* ??? The standard seems to be missing the "or array of such a class
5413          type" wording for this trait.  */
5414       type1 = strip_array_types (type1);
5415       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5416               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5417
5418     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5419       type1 = strip_array_types (type1);
5420       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5421               || (CLASS_TYPE_P (type1)
5422                   && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5423
5424     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5425       return type_has_virtual_destructor (type1);
5426
5427     case CPTK_IS_ABSTRACT:
5428       return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5429
5430     case CPTK_IS_BASE_OF:
5431       return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5432               && DERIVED_FROM_P (type1, type2));
5433
5434     case CPTK_IS_CLASS:
5435       return (NON_UNION_CLASS_TYPE_P (type1));
5436
5437     case CPTK_IS_CONVERTIBLE_TO:
5438       /* TODO  */
5439       return false;
5440
5441     case CPTK_IS_EMPTY:
5442       return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5443
5444     case CPTK_IS_ENUM:
5445       return (type_code1 == ENUMERAL_TYPE);
5446
5447     case CPTK_IS_FINAL:
5448       return (CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1));
5449
5450     case CPTK_IS_LITERAL_TYPE:
5451       return (literal_type_p (type1));
5452
5453     case CPTK_IS_POD:
5454       return (pod_type_p (type1));
5455
5456     case CPTK_IS_POLYMORPHIC:
5457       return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5458
5459     case CPTK_IS_STD_LAYOUT:
5460       return (std_layout_type_p (type1));
5461
5462     case CPTK_IS_TRIVIAL:
5463       return (trivial_type_p (type1));
5464
5465     case CPTK_IS_UNION:
5466       return (type_code1 == UNION_TYPE);
5467
5468     default:
5469       gcc_unreachable ();
5470       return false;
5471     }
5472 }
5473
5474 /* If TYPE is an array of unknown bound, or (possibly cv-qualified)
5475    void, or a complete type, returns it, otherwise NULL_TREE.  */
5476
5477 static tree
5478 check_trait_type (tree type)
5479 {
5480   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5481       && COMPLETE_TYPE_P (TREE_TYPE (type)))
5482     return type;
5483
5484   if (VOID_TYPE_P (type))
5485     return type;
5486
5487   return complete_type_or_else (strip_array_types (type), NULL_TREE);
5488 }
5489
5490 /* Process a trait expression.  */
5491
5492 tree
5493 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5494 {
5495   gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5496               || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5497               || kind == CPTK_HAS_NOTHROW_COPY
5498               || kind == CPTK_HAS_TRIVIAL_ASSIGN
5499               || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5500               || kind == CPTK_HAS_TRIVIAL_COPY
5501               || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5502               || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR          
5503               || kind == CPTK_IS_ABSTRACT
5504               || kind == CPTK_IS_BASE_OF
5505               || kind == CPTK_IS_CLASS
5506               || kind == CPTK_IS_CONVERTIBLE_TO
5507               || kind == CPTK_IS_EMPTY
5508               || kind == CPTK_IS_ENUM
5509               || kind == CPTK_IS_FINAL
5510               || kind == CPTK_IS_LITERAL_TYPE
5511               || kind == CPTK_IS_POD
5512               || kind == CPTK_IS_POLYMORPHIC
5513               || kind == CPTK_IS_STD_LAYOUT
5514               || kind == CPTK_IS_TRIVIAL
5515               || kind == CPTK_IS_UNION);
5516
5517   if (kind == CPTK_IS_CONVERTIBLE_TO)
5518     {
5519       sorry ("__is_convertible_to");
5520       return error_mark_node;
5521     }
5522
5523   if (type1 == error_mark_node
5524       || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5525           && type2 == error_mark_node))
5526     return error_mark_node;
5527
5528   if (processing_template_decl)
5529     {
5530       tree trait_expr = make_node (TRAIT_EXPR);
5531       TREE_TYPE (trait_expr) = boolean_type_node;
5532       TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5533       TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5534       TRAIT_EXPR_KIND (trait_expr) = kind;
5535       return trait_expr;
5536     }
5537
5538   switch (kind)
5539     {
5540     case CPTK_HAS_NOTHROW_ASSIGN:
5541     case CPTK_HAS_TRIVIAL_ASSIGN:
5542     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5543     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5544     case CPTK_HAS_NOTHROW_COPY:
5545     case CPTK_HAS_TRIVIAL_COPY:
5546     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5547     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5548     case CPTK_IS_ABSTRACT:
5549     case CPTK_IS_EMPTY:
5550     case CPTK_IS_FINAL:
5551     case CPTK_IS_LITERAL_TYPE:
5552     case CPTK_IS_POD:
5553     case CPTK_IS_POLYMORPHIC:
5554     case CPTK_IS_STD_LAYOUT:
5555     case CPTK_IS_TRIVIAL:
5556       if (!check_trait_type (type1))
5557         return error_mark_node;
5558       break;
5559
5560     case CPTK_IS_BASE_OF:
5561       if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5562           && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5563           && !complete_type_or_else (type2, NULL_TREE))
5564         /* We already issued an error.  */
5565         return error_mark_node;
5566       break;
5567
5568     case CPTK_IS_CLASS:
5569     case CPTK_IS_ENUM:
5570     case CPTK_IS_UNION:
5571       break;
5572     
5573     case CPTK_IS_CONVERTIBLE_TO:
5574     default:
5575       gcc_unreachable ();
5576     }
5577
5578   return (trait_expr_value (kind, type1, type2)
5579           ? boolean_true_node : boolean_false_node);
5580 }
5581
5582 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5583    which is ignored for C++.  */
5584
5585 void
5586 set_float_const_decimal64 (void)
5587 {
5588 }
5589
5590 void
5591 clear_float_const_decimal64 (void)
5592 {
5593 }
5594
5595 bool
5596 float_const_decimal64_p (void)
5597 {
5598   return 0;
5599 }
5600
5601 \f
5602 /* Return true if T is a literal type.   */
5603
5604 bool
5605 literal_type_p (tree t)
5606 {
5607   if (SCALAR_TYPE_P (t)
5608       || TREE_CODE (t) == REFERENCE_TYPE)
5609     return true;
5610   if (CLASS_TYPE_P (t))
5611     {
5612       t = complete_type (t);
5613       gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
5614       return CLASSTYPE_LITERAL_P (t);
5615     }
5616   if (TREE_CODE (t) == ARRAY_TYPE)
5617     return literal_type_p (strip_array_types (t));
5618   return false;
5619 }
5620
5621 /* If DECL is a variable declared `constexpr', require its type
5622    be literal.  Return the DECL if OK, otherwise NULL.  */
5623
5624 tree
5625 ensure_literal_type_for_constexpr_object (tree decl)
5626 {
5627   tree type = TREE_TYPE (decl);
5628   if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5629       && !processing_template_decl)
5630     {
5631       if (CLASS_TYPE_P (type) && !COMPLETE_TYPE_P (complete_type (type)))
5632         /* Don't complain here, we'll complain about incompleteness
5633            when we try to initialize the variable.  */;
5634       else if (!literal_type_p (type))
5635         {
5636           error ("the type %qT of constexpr variable %qD is not literal",
5637                  type, decl);
5638           explain_non_literal_class (type);
5639           return NULL;
5640         }
5641     }
5642   return decl;
5643 }
5644
5645 /* Representation of entries in the constexpr function definition table.  */
5646
5647 typedef struct GTY(()) constexpr_fundef {
5648   tree decl;
5649   tree body;
5650 } constexpr_fundef;
5651
5652 /* This table holds all constexpr function definitions seen in
5653    the current translation unit.  */
5654
5655 static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
5656
5657 /* Utility function used for managing the constexpr function table.
5658    Return true if the entries pointed to by P and Q are for the
5659    same constexpr function.  */
5660
5661 static inline int
5662 constexpr_fundef_equal (const void *p, const void *q)
5663 {
5664   const constexpr_fundef *lhs = (const constexpr_fundef *) p;
5665   const constexpr_fundef *rhs = (const constexpr_fundef *) q;
5666   return lhs->decl == rhs->decl;
5667 }
5668
5669 /* Utility function used for managing the constexpr function table.
5670    Return a hash value for the entry pointed to by Q.  */
5671
5672 static inline hashval_t
5673 constexpr_fundef_hash (const void *p)
5674 {
5675   const constexpr_fundef *fundef = (const constexpr_fundef *) p;
5676   return DECL_UID (fundef->decl);
5677 }
5678
5679 /* Return a previously saved definition of function FUN.   */
5680
5681 static constexpr_fundef *
5682 retrieve_constexpr_fundef (tree fun)
5683 {
5684   constexpr_fundef fundef = { NULL, NULL };
5685   if (constexpr_fundef_table == NULL)
5686     return NULL;
5687
5688   fundef.decl = fun;
5689   return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
5690 }
5691
5692 /* Check whether the parameter and return types of FUN are valid for a
5693    constexpr function, and complain if COMPLAIN.  */
5694
5695 static bool
5696 is_valid_constexpr_fn (tree fun, bool complain)
5697 {
5698   tree parm = FUNCTION_FIRST_USER_PARM (fun);
5699   bool ret = true;
5700   for (; parm != NULL; parm = TREE_CHAIN (parm))
5701     if (!literal_type_p (TREE_TYPE (parm)))
5702       {
5703         ret = false;
5704         if (complain)
5705           {
5706             error ("invalid type for parameter %d of constexpr "
5707                    "function %q+#D", DECL_PARM_INDEX (parm), fun);
5708             explain_non_literal_class (TREE_TYPE (parm));
5709           }
5710       }
5711
5712   if (!DECL_CONSTRUCTOR_P (fun))
5713     {
5714       tree rettype = TREE_TYPE (TREE_TYPE (fun));
5715       if (!literal_type_p (rettype))
5716         {
5717           ret = false;
5718           if (complain)
5719             {
5720               error ("invalid return type %qT of constexpr function %q+D",
5721                      rettype, fun);
5722               explain_non_literal_class (rettype);
5723             }
5724         }
5725
5726       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5727           && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
5728         {
5729           ret = false;
5730           if (complain)
5731             {
5732               error ("enclosing class of constexpr non-static member "
5733                      "function %q+#D is not a literal type", fun);
5734               explain_non_literal_class (DECL_CONTEXT (fun));
5735             }
5736         }
5737     }
5738   else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
5739     {
5740       ret = false;
5741       if (complain)
5742         error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
5743     }
5744
5745   return ret;
5746 }
5747
5748 /* Subroutine of  build_constexpr_constructor_member_initializers.
5749    The expression tree T represents a data member initialization
5750    in a (constexpr) constructor definition.  Build a pairing of
5751    the data member with its initializer, and prepend that pair
5752    to the existing initialization pair INITS.  */
5753
5754 static bool
5755 build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec)
5756 {
5757   tree member, init;
5758   if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
5759     t = TREE_OPERAND (t, 0);
5760   if (TREE_CODE (t) == EXPR_STMT)
5761     t = TREE_OPERAND (t, 0);
5762   if (t == error_mark_node)
5763     return false;
5764   if (TREE_CODE (t) == STATEMENT_LIST)
5765     {
5766       tree_stmt_iterator i;
5767       for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5768         {
5769           if (! build_data_member_initialization (tsi_stmt (i), vec))
5770             return false;
5771         }
5772       return true;
5773     }
5774   if (TREE_CODE (t) == CLEANUP_STMT)
5775     {
5776       /* We can't see a CLEANUP_STMT in a constructor for a literal class,
5777          but we can in a constexpr constructor for a non-literal class.  Just
5778          ignore it; either all the initialization will be constant, in which
5779          case the cleanup can't run, or it can't be constexpr.
5780          Still recurse into CLEANUP_BODY.  */
5781       return build_data_member_initialization (CLEANUP_BODY (t), vec);
5782     }
5783   if (TREE_CODE (t) == CONVERT_EXPR)
5784     t = TREE_OPERAND (t, 0);
5785   if (TREE_CODE (t) == INIT_EXPR
5786       || TREE_CODE (t) == MODIFY_EXPR)
5787     {
5788       member = TREE_OPERAND (t, 0);
5789       init = unshare_expr (TREE_OPERAND (t, 1));
5790     }
5791   else
5792     {
5793       gcc_assert (TREE_CODE (t) == CALL_EXPR);
5794       member = CALL_EXPR_ARG (t, 0);
5795       /* We don't use build_cplus_new here because it complains about
5796          abstract bases.  Leaving the call unwrapped means that it has the
5797          wrong type, but cxx_eval_constant_expression doesn't care.  */
5798       init = unshare_expr (t);
5799     }
5800   if (TREE_CODE (member) == INDIRECT_REF)
5801     member = TREE_OPERAND (member, 0);
5802   if (TREE_CODE (member) == NOP_EXPR)
5803     {
5804       tree op = member;
5805       STRIP_NOPS (op);
5806       if (TREE_CODE (op) == ADDR_EXPR)
5807         {
5808           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5809                       (TREE_TYPE (TREE_TYPE (op)),
5810                        TREE_TYPE (TREE_TYPE (member))));
5811           /* Initializing a cv-qualified member; we need to look through
5812              the const_cast.  */
5813           member = op;
5814         }
5815       else if (op == current_class_ptr
5816                && (same_type_ignoring_top_level_qualifiers_p
5817                    (TREE_TYPE (TREE_TYPE (member)),
5818                     current_class_type)))
5819         /* Delegating constructor.  */
5820         member = op;
5821       else
5822         {
5823           /* We don't put out anything for an empty base.  */
5824           gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
5825           /* But if the initializer isn't constexpr, leave it in so we
5826              complain later.  */
5827           if (potential_constant_expression (init))
5828             return true;
5829         }
5830     }
5831   if (TREE_CODE (member) == ADDR_EXPR)
5832     member = TREE_OPERAND (member, 0);
5833   if (TREE_CODE (member) == COMPONENT_REF
5834       /* If we're initializing a member of a subaggregate, it's a vtable
5835          pointer.  Leave it as COMPONENT_REF so we remember the path to get
5836          to the vfield.  */
5837       && TREE_CODE (TREE_OPERAND (member, 0)) != COMPONENT_REF)
5838     member = TREE_OPERAND (member, 1);
5839   CONSTRUCTOR_APPEND_ELT (*vec, member, init);
5840   return true;
5841 }
5842
5843 /* Make sure that there are no statements after LAST in the constructor
5844    body represented by LIST.  */
5845
5846 bool
5847 check_constexpr_ctor_body (tree last, tree list)
5848 {
5849   bool ok = true;
5850   if (TREE_CODE (list) == STATEMENT_LIST)
5851     {
5852       tree_stmt_iterator i = tsi_last (list);
5853       for (; !tsi_end_p (i); tsi_prev (&i))
5854         {
5855           tree t = tsi_stmt (i);
5856           if (t == last)
5857             break;
5858           if (TREE_CODE (t) == BIND_EXPR)
5859             {
5860               if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
5861                 return false;
5862               else
5863                 continue;
5864             }
5865           /* We currently allow typedefs and static_assert.
5866              FIXME allow them in the standard, too.  */
5867           if (TREE_CODE (t) != STATIC_ASSERT)
5868             {
5869               ok = false;
5870               break;
5871             }
5872         }
5873     }
5874   else if (list != last
5875            && TREE_CODE (list) != STATIC_ASSERT)
5876     ok = false;
5877   if (!ok)
5878     {
5879       error ("constexpr constructor does not have empty body");
5880       DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
5881     }
5882   return ok;
5883 }
5884
5885 /* Build compile-time evalable representations of member-initializer list
5886    for a constexpr constructor.  */
5887
5888 static tree
5889 build_constexpr_constructor_member_initializers (tree type, tree body)
5890 {
5891   VEC(constructor_elt,gc) *vec = NULL;
5892   bool ok = true;
5893   if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
5894       || TREE_CODE (body) == EH_SPEC_BLOCK)
5895     body = TREE_OPERAND (body, 0);
5896   if (TREE_CODE (body) == STATEMENT_LIST)
5897     body = STATEMENT_LIST_HEAD (body)->stmt;
5898   body = BIND_EXPR_BODY (body);
5899   if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5900     {
5901       body = TREE_OPERAND (body, 0);
5902       if (TREE_CODE (body) == EXPR_STMT)
5903         body = TREE_OPERAND (body, 0);
5904       if (TREE_CODE (body) == INIT_EXPR
5905           && (same_type_ignoring_top_level_qualifiers_p
5906               (TREE_TYPE (TREE_OPERAND (body, 0)),
5907                current_class_type)))
5908         {
5909           /* Trivial copy.  */
5910           return TREE_OPERAND (body, 1);
5911         }
5912       ok = build_data_member_initialization (body, &vec);
5913     }
5914   else if (TREE_CODE (body) == STATEMENT_LIST)
5915     {
5916       tree_stmt_iterator i;
5917       for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5918         {
5919           ok = build_data_member_initialization (tsi_stmt (i), &vec);
5920           if (!ok)
5921             break;
5922         }
5923     }
5924   else if (EXPR_P (body))
5925     ok = build_data_member_initialization (body, &vec);
5926   else
5927     gcc_assert (errorcount > 0);
5928   if (ok)
5929     {
5930       if (VEC_length (constructor_elt, vec) > 0)
5931         {
5932           /* In a delegating constructor, return the target.  */
5933           constructor_elt *ce = VEC_index (constructor_elt, vec, 0);
5934           if (ce->index == current_class_ptr)
5935             {
5936               body = ce->value;
5937               VEC_free (constructor_elt, gc, vec);
5938               return body;
5939             }
5940         }
5941       return build_constructor (type, vec);
5942     }
5943   else
5944     return error_mark_node;
5945 }
5946
5947 /* Subroutine of register_constexpr_fundef.  BODY is the body of a function
5948    declared to be constexpr, or a sub-statement thereof.  Returns the
5949    return value if suitable, error_mark_node for a statement not allowed in
5950    a constexpr function, or NULL_TREE if no return value was found.  */
5951
5952 static tree
5953 constexpr_fn_retval (tree body)
5954 {
5955   switch (TREE_CODE (body))
5956     {
5957     case STATEMENT_LIST:
5958       {
5959         tree_stmt_iterator i;
5960         tree expr = NULL_TREE;
5961         for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5962           {
5963             tree s = constexpr_fn_retval (tsi_stmt (i));
5964             if (s == error_mark_node)
5965               return error_mark_node;
5966             else if (s == NULL_TREE)
5967               /* Keep iterating.  */;
5968             else if (expr)
5969               /* Multiple return statements.  */
5970               return error_mark_node;
5971             else
5972               expr = s;
5973           }
5974         return expr;
5975       }
5976
5977     case RETURN_EXPR:
5978       return unshare_expr (TREE_OPERAND (body, 0));
5979
5980     case DECL_EXPR:
5981       if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL)
5982         return NULL_TREE;
5983       return error_mark_node;
5984
5985     case CLEANUP_POINT_EXPR:
5986       return constexpr_fn_retval (TREE_OPERAND (body, 0));
5987
5988     case USING_STMT:
5989       return NULL_TREE;
5990
5991     default:
5992       return error_mark_node;
5993     }
5994 }
5995
5996 /* Subroutine of register_constexpr_fundef.  BODY is the DECL_SAVED_TREE of
5997    FUN; do the necessary transformations to turn it into a single expression
5998    that we can store in the hash table.  */
5999
6000 static tree
6001 massage_constexpr_body (tree fun, tree body)
6002 {
6003   if (DECL_CONSTRUCTOR_P (fun))
6004     body = build_constexpr_constructor_member_initializers
6005       (DECL_CONTEXT (fun), body);
6006   else
6007     {
6008       if (TREE_CODE (body) == EH_SPEC_BLOCK)
6009         body = EH_SPEC_STMTS (body);
6010       if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
6011         body = TREE_OPERAND (body, 0);
6012       if (TREE_CODE (body) == BIND_EXPR)
6013         body = BIND_EXPR_BODY (body);
6014       body = constexpr_fn_retval (body);
6015     }
6016   return body;
6017 }
6018
6019 /* FUN is a constexpr constructor with massaged body BODY.  Return true
6020    if some bases/fields are uninitialized, and complain if COMPLAIN.  */
6021
6022 static bool
6023 cx_check_missing_mem_inits (tree fun, tree body, bool complain)
6024 {
6025   bool bad;
6026   tree field;
6027   unsigned i, nelts;
6028   tree ctype;
6029
6030   if (TREE_CODE (body) != CONSTRUCTOR)
6031     return false;
6032
6033   nelts = CONSTRUCTOR_NELTS (body);
6034   ctype = DECL_CONTEXT (fun);
6035   field = TYPE_FIELDS (ctype);
6036
6037   if (TREE_CODE (ctype) == UNION_TYPE)
6038     {
6039       if (nelts == 0 && next_initializable_field (field))
6040         {
6041           if (complain)
6042             error ("%<constexpr%> constructor for union %qT must "
6043                    "initialize exactly one non-static data member", ctype);
6044           return true;
6045         }
6046       return false;
6047     }
6048
6049   bad = false;
6050   for (i = 0; i <= nelts; ++i)
6051     {
6052       tree index;
6053       if (i == nelts)
6054         index = NULL_TREE;
6055       else
6056         {
6057           index = CONSTRUCTOR_ELT (body, i)->index;
6058           /* Skip base and vtable inits.  */
6059           if (TREE_CODE (index) != FIELD_DECL)
6060             continue;
6061         }
6062       for (; field != index; field = DECL_CHAIN (field))
6063         {
6064           tree ftype;
6065           if (TREE_CODE (field) != FIELD_DECL
6066               || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field)))
6067             continue;
6068           ftype = strip_array_types (TREE_TYPE (field));
6069           if (type_has_constexpr_default_constructor (ftype))
6070             {
6071               /* It's OK to skip a member with a trivial constexpr ctor.
6072                  A constexpr ctor that isn't trivial should have been
6073                  added in by now.  */
6074               gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
6075                                    || errorcount != 0);
6076               continue;
6077             }
6078           if (!complain)
6079             return true;
6080           error ("uninitialized member %qD in %<constexpr%> constructor",
6081                  field);
6082           bad = true;
6083         }
6084       if (field == NULL_TREE)
6085         break;
6086       field = DECL_CHAIN (field);
6087     }
6088
6089   return bad;
6090 }
6091
6092 /* We are processing the definition of the constexpr function FUN.
6093    Check that its BODY fulfills the propriate requirements and
6094    enter it in the constexpr function definition table.
6095    For constructor BODY is actually the TREE_LIST of the
6096    member-initializer list.  */
6097
6098 tree
6099 register_constexpr_fundef (tree fun, tree body)
6100 {
6101   constexpr_fundef entry;
6102   constexpr_fundef **slot;
6103
6104   if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
6105     return NULL;
6106
6107   body = massage_constexpr_body (fun, body);
6108   if (body == NULL_TREE || body == error_mark_node)
6109     {
6110       if (!DECL_CONSTRUCTOR_P (fun))
6111         error ("body of constexpr function %qD not a return-statement", fun);
6112       return NULL;
6113     }
6114
6115   if (!potential_rvalue_constant_expression (body))
6116     {
6117       if (!DECL_GENERATED_P (fun))
6118         require_potential_rvalue_constant_expression (body);
6119       return NULL;
6120     }
6121
6122   if (DECL_CONSTRUCTOR_P (fun)
6123       && cx_check_missing_mem_inits (fun, body, !DECL_GENERATED_P (fun)))
6124     return NULL;
6125
6126   /* Create the constexpr function table if necessary.  */
6127   if (constexpr_fundef_table == NULL)
6128     constexpr_fundef_table = htab_create_ggc (101,
6129                                               constexpr_fundef_hash,
6130                                               constexpr_fundef_equal,
6131                                               ggc_free);
6132   entry.decl = fun;
6133   entry.body = body;
6134   slot = (constexpr_fundef **)
6135     htab_find_slot (constexpr_fundef_table, &entry, INSERT);
6136
6137   gcc_assert (*slot == NULL);
6138   *slot = ggc_alloc_constexpr_fundef ();
6139   **slot = entry;
6140
6141   return fun;
6142 }
6143
6144 /* FUN is a non-constexpr function called in a context that requires a
6145    constant expression.  If it comes from a constexpr template, explain why
6146    the instantiation isn't constexpr.  */
6147
6148 void
6149 explain_invalid_constexpr_fn (tree fun)
6150 {
6151   static struct pointer_set_t *diagnosed;
6152   tree body;
6153   location_t save_loc;
6154   /* Only diagnose defaulted functions or instantiations.  */
6155   if (!DECL_DEFAULTED_FN (fun)
6156       && !is_instantiation_of_constexpr (fun))
6157     return;
6158   if (diagnosed == NULL)
6159     diagnosed = pointer_set_create ();
6160   if (pointer_set_insert (diagnosed, fun) != 0)
6161     /* Already explained.  */
6162     return;
6163
6164   save_loc = input_location;
6165   input_location = DECL_SOURCE_LOCATION (fun);
6166   inform (0, "%q+D is not usable as a constexpr function because:", fun);
6167   /* First check the declaration.  */
6168   if (is_valid_constexpr_fn (fun, true))
6169     {
6170       /* Then if it's OK, the body.  */
6171       if (DECL_DEFAULTED_FN (fun))
6172         explain_implicit_non_constexpr (fun);
6173       else
6174         {
6175           body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
6176           require_potential_rvalue_constant_expression (body);
6177           if (DECL_CONSTRUCTOR_P (fun))
6178             cx_check_missing_mem_inits (fun, body, true);
6179         }
6180     }
6181   input_location = save_loc;
6182 }
6183
6184 /* Objects of this type represent calls to constexpr functions
6185    along with the bindings of parameters to their arguments, for
6186    the purpose of compile time evaluation.  */
6187
6188 typedef struct GTY(()) constexpr_call {
6189   /* Description of the constexpr function definition.  */
6190   constexpr_fundef *fundef;
6191   /* Parameter bindings enironment.  A TREE_LIST where each TREE_PURPOSE
6192      is a parameter _DECL and the TREE_VALUE is the value of the parameter.
6193      Note: This arrangement is made to accomodate the use of
6194      iterative_hash_template_arg (see pt.c).  If you change this
6195      representation, also change the hash calculation in
6196      cxx_eval_call_expression.  */
6197   tree bindings;
6198   /* Result of the call.
6199        NULL means the call is being evaluated.
6200        error_mark_node means that the evaluation was erroneous;
6201        otherwise, the actuall value of the call.  */
6202   tree result;
6203   /* The hash of this call; we remember it here to avoid having to
6204      recalculate it when expanding the hash table.  */
6205   hashval_t hash;
6206 } constexpr_call;
6207
6208 /* A table of all constexpr calls that have been evaluated by the
6209    compiler in this translation unit.  */
6210
6211 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
6212
6213 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
6214                                           bool, bool, bool *);
6215
6216 /* Compute a hash value for a constexpr call representation.  */
6217
6218 static hashval_t
6219 constexpr_call_hash (const void *p)
6220 {
6221   const constexpr_call *info = (const constexpr_call *) p;
6222   return info->hash;
6223 }
6224
6225 /* Return 1 if the objects pointed to by P and Q represent calls
6226    to the same constexpr function with the same arguments.
6227    Otherwise, return 0.  */
6228
6229 static int
6230 constexpr_call_equal (const void *p, const void *q)
6231 {
6232   const constexpr_call *lhs = (const constexpr_call *) p;
6233   const constexpr_call *rhs = (const constexpr_call *) q;
6234   tree lhs_bindings;
6235   tree rhs_bindings;
6236   if (lhs == rhs)
6237     return 1;
6238   if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
6239     return 0;
6240   lhs_bindings = lhs->bindings;
6241   rhs_bindings = rhs->bindings;
6242   while (lhs_bindings != NULL && rhs_bindings != NULL)
6243     {
6244       tree lhs_arg = TREE_VALUE (lhs_bindings);
6245       tree rhs_arg = TREE_VALUE (rhs_bindings);
6246       gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
6247       if (!cp_tree_equal (lhs_arg, rhs_arg))
6248         return 0;
6249       lhs_bindings = TREE_CHAIN (lhs_bindings);
6250       rhs_bindings = TREE_CHAIN (rhs_bindings);
6251     }
6252   return lhs_bindings == rhs_bindings;
6253 }
6254
6255 /* Initialize the constexpr call table, if needed.  */
6256
6257 static void
6258 maybe_initialize_constexpr_call_table (void)
6259 {
6260   if (constexpr_call_table == NULL)
6261     constexpr_call_table = htab_create_ggc (101,
6262                                             constexpr_call_hash,
6263                                             constexpr_call_equal,
6264                                             ggc_free);
6265 }
6266
6267 /* Return true if T designates the implied `this' parameter.  */
6268
6269 static inline bool
6270 is_this_parameter (tree t)
6271 {
6272   return t == current_class_ptr;
6273 }
6274
6275 /* We have an expression tree T that represents a call, either CALL_EXPR
6276    or AGGR_INIT_EXPR.  If the call is lexically to a named function,
6277    retrun the _DECL for that function.  */
6278
6279 static tree
6280 get_function_named_in_call (tree t)
6281 {
6282   tree fun = NULL;
6283   switch (TREE_CODE (t))
6284     {
6285     case CALL_EXPR:
6286       fun = CALL_EXPR_FN (t);
6287       break;
6288
6289     case AGGR_INIT_EXPR:
6290       fun = AGGR_INIT_EXPR_FN (t);
6291       break;
6292
6293     default:
6294       gcc_unreachable();
6295       break;
6296     }
6297   if (TREE_CODE (fun) == ADDR_EXPR
6298       && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
6299     fun = TREE_OPERAND (fun, 0);
6300   return fun;
6301 }
6302
6303 /* We have an expression tree T that represents a call, either CALL_EXPR
6304    or AGGR_INIT_EXPR.  Return the Nth argument.  */
6305
6306 static inline tree
6307 get_nth_callarg (tree t, int n)
6308 {
6309   switch (TREE_CODE (t))
6310     {
6311     case CALL_EXPR:
6312       return CALL_EXPR_ARG (t, n);
6313
6314     case AGGR_INIT_EXPR:
6315       return AGGR_INIT_EXPR_ARG (t, n);
6316
6317     default:
6318       gcc_unreachable ();
6319       return NULL;
6320     }
6321 }
6322
6323 /* Look up the binding of the function parameter T in a constexpr
6324    function call context CALL.  */
6325
6326 static tree
6327 lookup_parameter_binding (const constexpr_call *call, tree t)
6328 {
6329   tree b = purpose_member (t, call->bindings);
6330   return TREE_VALUE (b);
6331 }
6332
6333 /* Attempt to evaluate T which represents a call to a builtin function.
6334    We assume here that all builtin functions evaluate to scalar types
6335    represented by _CST nodes.  */
6336
6337 static tree
6338 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
6339                                 bool allow_non_constant, bool addr,
6340                                 bool *non_constant_p)
6341 {
6342   const int nargs = call_expr_nargs (t);
6343   tree *args = (tree *) alloca (nargs * sizeof (tree));
6344   tree new_call;
6345   int i;
6346   for (i = 0; i < nargs; ++i)
6347     {
6348       args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
6349                                               allow_non_constant, addr,
6350                                               non_constant_p);
6351       if (allow_non_constant && *non_constant_p)
6352         return t;
6353     }
6354   if (*non_constant_p)
6355     return t;
6356   new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
6357                                    CALL_EXPR_FN (t), nargs, args);
6358   return fold (new_call);
6359 }
6360
6361 /* TEMP is the constant value of a temporary object of type TYPE.  Adjust
6362    the type of the value to match.  */
6363
6364 static tree
6365 adjust_temp_type (tree type, tree temp)
6366 {
6367   if (TREE_TYPE (temp) == type)
6368     return temp;
6369   /* Avoid wrapping an aggregate value in a NOP_EXPR.  */
6370   if (TREE_CODE (temp) == CONSTRUCTOR)
6371     return build_constructor (type, CONSTRUCTOR_ELTS (temp));
6372   gcc_assert (SCALAR_TYPE_P (type));
6373   return cp_fold_convert (type, temp);
6374 }
6375
6376 /* Subroutine of cxx_eval_call_expression.
6377    We are processing a call expression (either CALL_EXPR or
6378    AGGR_INIT_EXPR) in the call context of OLD_CALL.  Evaluate
6379    all arguments and bind their values to correspondings
6380    parameters, making up the NEW_CALL context.  */
6381
6382 static void
6383 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
6384                              constexpr_call *new_call,
6385                              bool allow_non_constant,
6386                              bool *non_constant_p)
6387 {
6388   const int nargs = call_expr_nargs (t);
6389   tree fun = new_call->fundef->decl;
6390   tree parms = DECL_ARGUMENTS (fun);
6391   int i;
6392   for (i = 0; i < nargs; ++i)
6393     {
6394       tree x, arg;
6395       tree type = parms ? TREE_TYPE (parms) : void_type_node;
6396       /* For member function, the first argument is a pointer to the implied
6397          object.  And for an object contruction, don't bind `this' before
6398          it is fully constructed.  */
6399       if (i == 0 && DECL_CONSTRUCTOR_P (fun))
6400         goto next;
6401       x = get_nth_callarg (t, i);
6402       arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
6403                                           TREE_CODE (type) == REFERENCE_TYPE,
6404                                           non_constant_p);
6405       /* Don't VERIFY_CONSTANT here.  */
6406       if (*non_constant_p && allow_non_constant)
6407         return;
6408       /* Just discard ellipsis args after checking their constantitude.  */
6409       if (!parms)
6410         continue;
6411       if (*non_constant_p)
6412         /* Don't try to adjust the type of non-constant args.  */
6413         goto next;
6414
6415       /* Make sure the binding has the same type as the parm.  */
6416       if (TREE_CODE (type) != REFERENCE_TYPE)
6417         arg = adjust_temp_type (type, arg);
6418       new_call->bindings = tree_cons (parms, arg, new_call->bindings);
6419     next:
6420       parms = TREE_CHAIN (parms);
6421     }
6422 }
6423
6424 /* Variables and functions to manage constexpr call expansion context.
6425    These do not need to be marked for PCH or GC.  */
6426
6427 /* FIXME remember and print actual constant arguments.  */
6428 static VEC(tree,heap) *call_stack = NULL;
6429 static int call_stack_tick;
6430 static int last_cx_error_tick;
6431
6432 static bool
6433 push_cx_call_context (tree call)
6434 {
6435   ++call_stack_tick;
6436   if (!EXPR_HAS_LOCATION (call))
6437     SET_EXPR_LOCATION (call, input_location);
6438   VEC_safe_push (tree, heap, call_stack, call);
6439   if (VEC_length (tree, call_stack) > (unsigned) max_constexpr_depth)
6440     return false;
6441   return true;
6442 }
6443
6444 static void
6445 pop_cx_call_context (void)
6446 {
6447   ++call_stack_tick;
6448   VEC_pop (tree, call_stack);
6449 }
6450
6451 VEC(tree,heap) *
6452 cx_error_context (void)
6453 {
6454   VEC(tree,heap) *r = NULL;
6455   if (call_stack_tick != last_cx_error_tick
6456       && !VEC_empty (tree, call_stack))
6457     r = call_stack;
6458   last_cx_error_tick = call_stack_tick;
6459   return r;
6460 }
6461
6462 /* Subroutine of cxx_eval_constant_expression.
6463    Evaluate the call expression tree T in the context of OLD_CALL expression
6464    evaluation.  */
6465
6466 static tree
6467 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
6468                           bool allow_non_constant, bool addr,
6469                           bool *non_constant_p)
6470 {
6471   location_t loc = EXPR_LOC_OR_HERE (t);
6472   tree fun = get_function_named_in_call (t);
6473   tree result;
6474   constexpr_call new_call = { NULL, NULL, NULL, 0 };
6475   constexpr_call **slot;
6476   constexpr_call *entry;
6477   bool depth_ok;
6478
6479   if (TREE_CODE (fun) != FUNCTION_DECL)
6480     {
6481       /* Might be a constexpr function pointer.  */
6482       fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
6483                                           /*addr*/false, non_constant_p);
6484       if (TREE_CODE (fun) == ADDR_EXPR)
6485         fun = TREE_OPERAND (fun, 0);
6486     }
6487   if (TREE_CODE (fun) != FUNCTION_DECL)
6488     {
6489       if (!allow_non_constant && !*non_constant_p)
6490         error_at (loc, "expression %qE does not designate a constexpr "
6491                   "function", fun);
6492       *non_constant_p = true;
6493       return t;
6494     }
6495   if (DECL_CLONED_FUNCTION_P (fun))
6496     fun = DECL_CLONED_FUNCTION (fun);
6497   if (is_builtin_fn (fun))
6498     return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
6499                                            addr, non_constant_p);
6500   if (!DECL_DECLARED_CONSTEXPR_P (fun))
6501     {
6502       if (!allow_non_constant)
6503         {
6504           error_at (loc, "call to non-constexpr function %qD", fun);
6505           explain_invalid_constexpr_fn (fun);
6506         }
6507       *non_constant_p = true;
6508       return t;
6509     }
6510
6511   /* Shortcut trivial copy constructor/op=.  */
6512   if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
6513     {
6514       tree arg = convert_from_reference (get_nth_callarg (t, 1));
6515       return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
6516                                            addr, non_constant_p);
6517     }
6518
6519   /* If in direct recursive call, optimize definition search.  */
6520   if (old_call != NULL && old_call->fundef->decl == fun)
6521     new_call.fundef = old_call->fundef;
6522   else
6523     {
6524       new_call.fundef = retrieve_constexpr_fundef (fun);
6525       if (new_call.fundef == NULL || new_call.fundef->body == NULL)
6526         {
6527           if (!allow_non_constant)
6528             {
6529               if (DECL_INITIAL (fun))
6530                 {
6531                   /* The definition of fun was somehow unsuitable.  */
6532                   error_at (loc, "%qD called in a constant expression", fun);
6533                   explain_invalid_constexpr_fn (fun);
6534                 }
6535               else
6536                 error_at (loc, "%qD used before its definition", fun);
6537             }
6538           *non_constant_p = true;
6539           return t;
6540         }
6541     }
6542   cxx_bind_parameters_in_call (old_call, t, &new_call,
6543                                allow_non_constant, non_constant_p);
6544   if (*non_constant_p)
6545     return t;
6546
6547   depth_ok = push_cx_call_context (t);
6548
6549   new_call.hash
6550     = iterative_hash_template_arg (new_call.bindings,
6551                                    constexpr_fundef_hash (new_call.fundef));
6552
6553   /* If we have seen this call before, we are done.  */
6554   maybe_initialize_constexpr_call_table ();
6555   slot = (constexpr_call **)
6556     htab_find_slot (constexpr_call_table, &new_call, INSERT);
6557   entry = *slot;
6558   if (entry == NULL)
6559     {
6560       /* We need to keep a pointer to the entry, not just the slot, as the
6561          slot can move in the call to cxx_eval_builtin_function_call.  */
6562       *slot = entry = ggc_alloc_constexpr_call ();
6563       *entry = new_call;
6564     }
6565   /* Calls which are in progress have their result set to NULL
6566      so that we can detect circular dependencies.  */
6567   else if (entry->result == NULL)
6568     {
6569       if (!allow_non_constant)
6570         error ("call has circular dependency");
6571       *non_constant_p = true;
6572       entry->result = result = error_mark_node;
6573     }
6574
6575   if (!depth_ok)
6576     {
6577       if (!allow_non_constant)
6578         error ("constexpr evaluation depth exceeds maximum of %d (use "
6579                "-fconstexpr-depth= to increase the maximum)",
6580                max_constexpr_depth);
6581       *non_constant_p = true;
6582       entry->result = result = error_mark_node;
6583     }
6584   else
6585     {
6586       result = entry->result;
6587       if (!result || result == error_mark_node)
6588         result = (cxx_eval_constant_expression
6589                   (&new_call, new_call.fundef->body,
6590                    allow_non_constant, addr,
6591                    non_constant_p));
6592       if (result == error_mark_node)
6593         *non_constant_p = true;
6594       if (*non_constant_p)
6595         entry->result = result = error_mark_node;
6596       else
6597         {
6598           /* If this was a call to initialize an object, set the type of
6599              the CONSTRUCTOR to the type of that object.  */
6600           if (DECL_CONSTRUCTOR_P (fun))
6601             {
6602               tree ob_arg = get_nth_callarg (t, 0);
6603               STRIP_NOPS (ob_arg);
6604               gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
6605                           && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
6606               result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
6607                                          result);
6608             }
6609           entry->result = result;
6610         }
6611     }
6612
6613   pop_cx_call_context ();
6614   return unshare_expr (result);
6615 }
6616
6617 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase.  */
6618
6619 bool
6620 reduced_constant_expression_p (tree t)
6621 {
6622   if (TREE_OVERFLOW_P (t))
6623     /* Integer overflow makes this not a constant expression.  */
6624     return false;
6625   /* FIXME are we calling this too much?  */
6626   return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6627 }
6628
6629 /* Some expressions may have constant operands but are not constant
6630    themselves, such as 1/0.  Call this function (or rather, the macro
6631    following it) to check for that condition.
6632
6633    We only call this in places that require an arithmetic constant, not in
6634    places where we might have a non-constant expression that can be a
6635    component of a constant expression, such as the address of a constexpr
6636    variable that might be dereferenced later.  */
6637
6638 static bool
6639 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p)
6640 {
6641   if (!*non_constant_p && !reduced_constant_expression_p (t))
6642     {
6643       if (!allow_non_constant)
6644         {
6645           /* If T was already folded to a _CST with TREE_OVERFLOW set,
6646              printing the folded constant isn't helpful.  */
6647           if (TREE_OVERFLOW_P (t))
6648             {
6649               permerror (input_location, "overflow in constant expression");
6650               /* If we're being permissive (and are in an enforcing
6651                  context), consider this constant.  */
6652               if (flag_permissive)
6653                 return false;
6654             }
6655           else
6656             error ("%q+E is not a constant expression", t);
6657         }
6658       *non_constant_p = true;
6659     }
6660   return *non_constant_p;
6661 }
6662 #define VERIFY_CONSTANT(X)                                              \
6663 do {                                                                    \
6664   if (verify_constant ((X), allow_non_constant, non_constant_p))        \
6665     return t;                                                           \
6666  } while (0)
6667
6668 /* Subroutine of cxx_eval_constant_expression.
6669    Attempt to reduce the unary expression tree T to a compile time value.
6670    If successful, return the value.  Otherwise issue a diagnostic
6671    and return error_mark_node.  */
6672
6673 static tree
6674 cxx_eval_unary_expression (const constexpr_call *call, tree t,
6675                            bool allow_non_constant, bool addr,
6676                            bool *non_constant_p)
6677 {
6678   tree r;
6679   tree orig_arg = TREE_OPERAND (t, 0);
6680   tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6681                                            addr, non_constant_p);
6682   VERIFY_CONSTANT (arg);
6683   if (arg == orig_arg)
6684     return t;
6685   r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6686   VERIFY_CONSTANT (r);
6687   return r;
6688 }
6689
6690 /* Subroutine of cxx_eval_constant_expression.
6691    Like cxx_eval_unary_expression, except for binary expressions.  */
6692
6693 static tree
6694 cxx_eval_binary_expression (const constexpr_call *call, tree t,
6695                             bool allow_non_constant, bool addr,
6696                             bool *non_constant_p)
6697 {
6698   tree r;
6699   tree orig_lhs = TREE_OPERAND (t, 0);
6700   tree orig_rhs = TREE_OPERAND (t, 1);
6701   tree lhs, rhs;
6702   lhs = cxx_eval_constant_expression (call, orig_lhs,
6703                                       allow_non_constant, addr,
6704                                       non_constant_p);
6705   VERIFY_CONSTANT (lhs);
6706   rhs = cxx_eval_constant_expression (call, orig_rhs,
6707                                       allow_non_constant, addr,
6708                                       non_constant_p);
6709   VERIFY_CONSTANT (rhs);
6710   if (lhs == orig_lhs && rhs == orig_rhs)
6711     return t;
6712   r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6713   VERIFY_CONSTANT (r);
6714   return r;
6715 }
6716
6717 /* Subroutine of cxx_eval_constant_expression.
6718    Attempt to evaluate condition expressions.  Dead branches are not
6719    looked into.  */
6720
6721 static tree
6722 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6723                                  bool allow_non_constant, bool addr,
6724                                  bool *non_constant_p)
6725 {
6726   tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6727                                            allow_non_constant, addr,
6728                                            non_constant_p);
6729   VERIFY_CONSTANT (val);
6730   /* Don't VERIFY_CONSTANT the other operands.  */
6731   if (integer_zerop (val))
6732     return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6733                                          allow_non_constant, addr,
6734                                          non_constant_p);
6735   return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6736                                        allow_non_constant, addr,
6737                                        non_constant_p);
6738 }
6739
6740 /* Subroutine of cxx_eval_constant_expression.
6741    Attempt to reduce a reference to an array slot.  */
6742
6743 static tree
6744 cxx_eval_array_reference (const constexpr_call *call, tree t,
6745                           bool allow_non_constant, bool addr,
6746                           bool *non_constant_p)
6747 {
6748   tree oldary = TREE_OPERAND (t, 0);
6749   tree ary = cxx_eval_constant_expression (call, oldary,
6750                                            allow_non_constant, addr,
6751                                            non_constant_p);
6752   tree index, oldidx;
6753   HOST_WIDE_INT i;
6754   tree elem_type;
6755   unsigned len, elem_nchars = 1;
6756   if (*non_constant_p)
6757     return t;
6758   oldidx = TREE_OPERAND (t, 1);
6759   index = cxx_eval_constant_expression (call, oldidx,
6760                                         allow_non_constant, false,
6761                                         non_constant_p);
6762   VERIFY_CONSTANT (index);
6763   if (addr && ary == oldary && index == oldidx)
6764     return t;
6765   else if (addr)
6766     return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6767   elem_type = TREE_TYPE (TREE_TYPE (ary));
6768   if (TREE_CODE (ary) == CONSTRUCTOR)
6769     len = CONSTRUCTOR_NELTS (ary);
6770   else if (TREE_CODE (ary) == STRING_CST)
6771     {
6772       elem_nchars = (TYPE_PRECISION (elem_type)
6773                      / TYPE_PRECISION (char_type_node));
6774       len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
6775     }
6776   else
6777     {
6778       /* We can't do anything with other tree codes, so use
6779          VERIFY_CONSTANT to complain and fail.  */
6780       VERIFY_CONSTANT (ary);
6781       gcc_unreachable ();
6782     }
6783   if (compare_tree_int (index, len) >= 0)
6784     {
6785       if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
6786         {
6787           /* If it's within the array bounds but doesn't have an explicit
6788              initializer, it's value-initialized.  */
6789           tree val = build_value_init (elem_type, tf_warning_or_error);
6790           return cxx_eval_constant_expression (call, val,
6791                                                allow_non_constant, addr,
6792                                                non_constant_p);
6793         }
6794
6795       if (!allow_non_constant)
6796         error ("array subscript out of bound");
6797       *non_constant_p = true;
6798       return t;
6799     }
6800   i = tree_low_cst (index, 0);
6801   if (TREE_CODE (ary) == CONSTRUCTOR)
6802     return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
6803   else if (elem_nchars == 1)
6804     return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6805                           TREE_STRING_POINTER (ary)[i]);
6806   else
6807     {
6808       tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
6809       return native_interpret_expr (type, (const unsigned char *)
6810                                           TREE_STRING_POINTER (ary)
6811                                           + i * elem_nchars, elem_nchars);
6812     }
6813   /* Don't VERIFY_CONSTANT here.  */
6814 }
6815
6816 /* Subroutine of cxx_eval_constant_expression.
6817    Attempt to reduce a field access of a value of class type.  */
6818
6819 static tree
6820 cxx_eval_component_reference (const constexpr_call *call, tree t,
6821                               bool allow_non_constant, bool addr,
6822                               bool *non_constant_p)
6823 {
6824   unsigned HOST_WIDE_INT i;
6825   tree field;
6826   tree value;
6827   tree part = TREE_OPERAND (t, 1);
6828   tree orig_whole = TREE_OPERAND (t, 0);
6829   tree whole = cxx_eval_constant_expression (call, orig_whole,
6830                                              allow_non_constant, addr,
6831                                              non_constant_p);
6832   if (whole == orig_whole)
6833     return t;
6834   if (addr)
6835     return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6836                         whole, part, NULL_TREE);
6837   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6838      CONSTRUCTOR.  */
6839   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6840     {
6841       if (!allow_non_constant)
6842         error ("%qE is not a constant expression", orig_whole);
6843       *non_constant_p = true;
6844     }
6845   if (DECL_MUTABLE_P (part))
6846     {
6847       if (!allow_non_constant)
6848         error ("mutable %qD is not usable in a constant expression", part);
6849       *non_constant_p = true;
6850     }
6851   if (*non_constant_p)
6852     return t;
6853   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6854     {
6855       if (field == part)
6856         return value;
6857     }
6858   if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
6859       && CONSTRUCTOR_NELTS (whole) > 0)
6860     {
6861       /* DR 1188 says we don't have to deal with this.  */
6862       if (!allow_non_constant)
6863         error ("accessing %qD member instead of initialized %qD member in "
6864                "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6865       *non_constant_p = true;
6866       return t;
6867     }
6868
6869   /* If there's no explicit init for this field, it's value-initialized.  */
6870   value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
6871   return cxx_eval_constant_expression (call, value,
6872                                        allow_non_constant, addr,
6873                                        non_constant_p);
6874 }
6875
6876 /* Subroutine of cxx_eval_constant_expression.
6877    Attempt to reduce a field access of a value of class type that is
6878    expressed as a BIT_FIELD_REF.  */
6879
6880 static tree
6881 cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
6882                         bool allow_non_constant, bool addr,
6883                         bool *non_constant_p)
6884 {
6885   tree orig_whole = TREE_OPERAND (t, 0);
6886   tree retval, fldval, utype, mask;
6887   bool fld_seen = false;
6888   HOST_WIDE_INT istart, isize;
6889   tree whole = cxx_eval_constant_expression (call, orig_whole,
6890                                              allow_non_constant, addr,
6891                                              non_constant_p);
6892   tree start, field, value;
6893   unsigned HOST_WIDE_INT i;
6894
6895   if (whole == orig_whole)
6896     return t;
6897   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6898      CONSTRUCTOR.  */
6899   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6900     {
6901       if (!allow_non_constant)
6902         error ("%qE is not a constant expression", orig_whole);
6903       *non_constant_p = true;
6904     }
6905   if (*non_constant_p)
6906     return t;
6907
6908   start = TREE_OPERAND (t, 2);
6909   istart = tree_low_cst (start, 0);
6910   isize = tree_low_cst (TREE_OPERAND (t, 1), 0);
6911   utype = TREE_TYPE (t);
6912   if (!TYPE_UNSIGNED (utype))
6913     utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
6914   retval = build_int_cst (utype, 0);
6915   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6916     {
6917       tree bitpos = bit_position (field);
6918       if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
6919         return value;
6920       if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
6921           && TREE_CODE (value) == INTEGER_CST
6922           && host_integerp (bitpos, 0)
6923           && host_integerp (DECL_SIZE (field), 0))
6924         {
6925           HOST_WIDE_INT bit = tree_low_cst (bitpos, 0);
6926           HOST_WIDE_INT sz = tree_low_cst (DECL_SIZE (field), 0);
6927           HOST_WIDE_INT shift;
6928           if (bit >= istart && bit + sz <= istart + isize)
6929             {
6930               fldval = fold_convert (utype, value);
6931               mask = build_int_cst_type (utype, -1);
6932               mask = fold_build2 (LSHIFT_EXPR, utype, mask,
6933                                   size_int (TYPE_PRECISION (utype) - sz));
6934               mask = fold_build2 (RSHIFT_EXPR, utype, mask,
6935                                   size_int (TYPE_PRECISION (utype) - sz));
6936               fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
6937               shift = bit - istart;
6938               if (BYTES_BIG_ENDIAN)
6939                 shift = TYPE_PRECISION (utype) - shift - sz;
6940               fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
6941                                     size_int (shift));
6942               retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
6943               fld_seen = true;
6944             }
6945         }
6946     }
6947   if (fld_seen)
6948     return fold_convert (TREE_TYPE (t), retval);
6949   gcc_unreachable ();
6950   return error_mark_node;
6951 }
6952
6953 /* Subroutine of cxx_eval_constant_expression.
6954    Evaluate a short-circuited logical expression T in the context
6955    of a given constexpr CALL.  BAILOUT_VALUE is the value for
6956    early return.  CONTINUE_VALUE is used here purely for
6957    sanity check purposes.  */
6958
6959 static tree
6960 cxx_eval_logical_expression (const constexpr_call *call, tree t,
6961                              tree bailout_value, tree continue_value,
6962                              bool allow_non_constant, bool addr,
6963                              bool *non_constant_p)
6964 {
6965   tree r;
6966   tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6967                                            allow_non_constant, addr,
6968                                            non_constant_p);
6969   VERIFY_CONSTANT (lhs);
6970   if (tree_int_cst_equal (lhs, bailout_value))
6971     return lhs;
6972   gcc_assert (tree_int_cst_equal (lhs, continue_value));
6973   r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6974                                     allow_non_constant, addr, non_constant_p);
6975   VERIFY_CONSTANT (r);
6976   return r;
6977 }
6978
6979 /* REF is a COMPONENT_REF designating a particular field.  V is a vector of
6980    CONSTRUCTOR elements to initialize (part of) an object containing that
6981    field.  Return a pointer to the constructor_elt corresponding to the
6982    initialization of the field.  */
6983
6984 static constructor_elt *
6985 base_field_constructor_elt (VEC(constructor_elt,gc) *v, tree ref)
6986 {
6987   tree aggr = TREE_OPERAND (ref, 0);
6988   tree field = TREE_OPERAND (ref, 1);
6989   HOST_WIDE_INT i;
6990   constructor_elt *ce;
6991
6992   gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
6993
6994   if (TREE_CODE (aggr) == COMPONENT_REF)
6995     {
6996       constructor_elt *base_ce
6997         = base_field_constructor_elt (v, aggr);
6998       v = CONSTRUCTOR_ELTS (base_ce->value);
6999     }
7000
7001   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7002     if (ce->index == field)
7003       return ce;
7004
7005   gcc_unreachable ();
7006   return NULL;
7007 }
7008
7009 /* Subroutine of cxx_eval_constant_expression.
7010    The expression tree T denotes a C-style array or a C-style
7011    aggregate.  Reduce it to a constant expression.  */
7012
7013 static tree
7014 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
7015                          bool allow_non_constant, bool addr,
7016                          bool *non_constant_p)
7017 {
7018   VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
7019   VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc,
7020                                           VEC_length (constructor_elt, v));
7021   constructor_elt *ce;
7022   HOST_WIDE_INT i;
7023   bool changed = false;
7024   gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
7025   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7026     {
7027       tree elt = cxx_eval_constant_expression (call, ce->value,
7028                                                allow_non_constant, addr,
7029                                                non_constant_p);
7030       /* Don't VERIFY_CONSTANT here.  */
7031       if (allow_non_constant && *non_constant_p)
7032         goto fail;
7033       if (elt != ce->value)
7034         changed = true;
7035       if (TREE_CODE (ce->index) == COMPONENT_REF)
7036         {
7037           /* This is an initialization of a vfield inside a base
7038              subaggregate that we already initialized; push this
7039              initialization into the previous initialization.  */
7040           constructor_elt *inner = base_field_constructor_elt (n, ce->index);
7041           inner->value = elt;
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   gcc_assert (POINTER_TYPE_P (subtype));
7206
7207   if (TREE_CODE (sub) == ADDR_EXPR)
7208     {
7209       tree op = TREE_OPERAND (sub, 0);
7210       tree optype = TREE_TYPE (op);
7211
7212       /* *&CONST_DECL -> to the value of the const decl.  */
7213       if (TREE_CODE (op) == CONST_DECL)
7214         return DECL_INITIAL (op);
7215       /* *&p => p;  make sure to handle *&"str"[cst] here.  */
7216       if (same_type_ignoring_top_level_qualifiers_p (optype, type))
7217         {
7218           tree fop = fold_read_from_constant_string (op);
7219           if (fop)
7220             return fop;
7221           else
7222             return op;
7223         }
7224       /* *(foo *)&fooarray => fooarray[0] */
7225       else if (TREE_CODE (optype) == ARRAY_TYPE
7226                && (same_type_ignoring_top_level_qualifiers_p
7227                    (type, TREE_TYPE (optype))))
7228         {
7229           tree type_domain = TYPE_DOMAIN (optype);
7230           tree min_val = size_zero_node;
7231           if (type_domain && TYPE_MIN_VALUE (type_domain))
7232             min_val = TYPE_MIN_VALUE (type_domain);
7233           return build4_loc (loc, ARRAY_REF, type, op, min_val,
7234                              NULL_TREE, NULL_TREE);
7235         }
7236       /* *(foo *)&complexfoo => __real__ complexfoo */
7237       else if (TREE_CODE (optype) == COMPLEX_TYPE
7238                && (same_type_ignoring_top_level_qualifiers_p
7239                    (type, TREE_TYPE (optype))))
7240         return fold_build1_loc (loc, REALPART_EXPR, type, op);
7241       /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
7242       else if (TREE_CODE (optype) == VECTOR_TYPE
7243                && (same_type_ignoring_top_level_qualifiers_p
7244                    (type, TREE_TYPE (optype))))
7245         {
7246           tree part_width = TYPE_SIZE (type);
7247           tree index = bitsize_int (0);
7248           return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
7249         }
7250       /* Also handle conversion to an empty base class, which
7251          is represented with a NOP_EXPR.  */
7252       else if (is_empty_class (type)
7253                && CLASS_TYPE_P (optype)
7254                && DERIVED_FROM_P (type, optype))
7255         {
7256           *empty_base = true;
7257           return op;
7258         }
7259       /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
7260       else if (RECORD_OR_UNION_TYPE_P (optype))
7261         {
7262           tree field = TYPE_FIELDS (optype);
7263           for (; field; field = DECL_CHAIN (field))
7264             if (TREE_CODE (field) == FIELD_DECL
7265                 && integer_zerop (byte_position (field))
7266                 && (same_type_ignoring_top_level_qualifiers_p
7267                     (TREE_TYPE (field), type)))
7268               {
7269                 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
7270                 break;
7271               }
7272         }
7273     }
7274   else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
7275            && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
7276     {
7277       tree op00 = TREE_OPERAND (sub, 0);
7278       tree op01 = TREE_OPERAND (sub, 1);
7279
7280       STRIP_NOPS (op00);
7281       if (TREE_CODE (op00) == ADDR_EXPR)
7282         {
7283           tree op00type;
7284           op00 = TREE_OPERAND (op00, 0);
7285           op00type = TREE_TYPE (op00);
7286
7287           /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
7288           if (TREE_CODE (op00type) == VECTOR_TYPE
7289               && (same_type_ignoring_top_level_qualifiers_p
7290                   (type, TREE_TYPE (op00type))))
7291             {
7292               HOST_WIDE_INT offset = tree_low_cst (op01, 0);
7293               tree part_width = TYPE_SIZE (type);
7294               unsigned HOST_WIDE_INT part_widthi = tree_low_cst (part_width, 0)/BITS_PER_UNIT;
7295               unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
7296               tree index = bitsize_int (indexi);
7297
7298               if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
7299                 return fold_build3_loc (loc,
7300                                         BIT_FIELD_REF, type, op00,
7301                                         part_width, index);
7302
7303             }
7304           /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
7305           else if (TREE_CODE (op00type) == COMPLEX_TYPE
7306                    && (same_type_ignoring_top_level_qualifiers_p
7307                        (type, TREE_TYPE (op00type))))
7308             {
7309               tree size = TYPE_SIZE_UNIT (type);
7310               if (tree_int_cst_equal (size, op01))
7311                 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
7312             }
7313           /* ((foo *)&fooarray)[1] => fooarray[1] */
7314           else if (TREE_CODE (op00type) == ARRAY_TYPE
7315                    && (same_type_ignoring_top_level_qualifiers_p
7316                        (type, TREE_TYPE (op00type))))
7317             {
7318               tree type_domain = TYPE_DOMAIN (op00type);
7319               tree min_val = size_zero_node;
7320               if (type_domain && TYPE_MIN_VALUE (type_domain))
7321                 min_val = TYPE_MIN_VALUE (type_domain);
7322               op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
7323                                      TYPE_SIZE_UNIT (type));
7324               op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
7325               return build4_loc (loc, ARRAY_REF, type, op00, op01,
7326                                  NULL_TREE, NULL_TREE);
7327             }
7328           /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
7329           else if (RECORD_OR_UNION_TYPE_P (op00type))
7330             {
7331               tree field = TYPE_FIELDS (op00type);
7332               for (; field; field = DECL_CHAIN (field))
7333                 if (TREE_CODE (field) == FIELD_DECL
7334                     && tree_int_cst_equal (byte_position (field), op01)
7335                     && (same_type_ignoring_top_level_qualifiers_p
7336                         (TREE_TYPE (field), type)))
7337                   {
7338                     return fold_build3 (COMPONENT_REF, type, op00,
7339                                      field, NULL_TREE);
7340                     break;
7341                   }
7342             }
7343         }
7344     }
7345   /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
7346   else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
7347            && (same_type_ignoring_top_level_qualifiers_p
7348                (type, TREE_TYPE (TREE_TYPE (subtype)))))
7349     {
7350       tree type_domain;
7351       tree min_val = size_zero_node;
7352       sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
7353       if (!sub)
7354         sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
7355       type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
7356       if (type_domain && TYPE_MIN_VALUE (type_domain))
7357         min_val = TYPE_MIN_VALUE (type_domain);
7358       return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
7359                          NULL_TREE);
7360     }
7361
7362   return NULL_TREE;
7363 }
7364
7365 static tree
7366 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
7367                        bool allow_non_constant, bool addr,
7368                        bool *non_constant_p)
7369 {
7370   tree orig_op0 = TREE_OPERAND (t, 0);
7371   tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
7372                                            /*addr*/false, non_constant_p);
7373   bool empty_base = false;
7374   tree r;
7375
7376   /* Don't VERIFY_CONSTANT here.  */
7377   if (*non_constant_p)
7378     return t;
7379
7380   r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
7381                              &empty_base);
7382
7383   if (r)
7384     r = cxx_eval_constant_expression (call, r, allow_non_constant,
7385                                       addr, non_constant_p);
7386   else
7387     {
7388       tree sub = op0;
7389       STRIP_NOPS (sub);
7390       if (TREE_CODE (sub) == POINTER_PLUS_EXPR)
7391         {
7392           sub = TREE_OPERAND (sub, 0);
7393           STRIP_NOPS (sub);
7394         }
7395       if (TREE_CODE (sub) == ADDR_EXPR)
7396         {
7397           /* We couldn't fold to a constant value.  Make sure it's not
7398              something we should have been able to fold.  */
7399           gcc_assert (!same_type_ignoring_top_level_qualifiers_p
7400                       (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
7401           /* DR 1188 says we don't have to deal with this.  */
7402           if (!allow_non_constant)
7403             error ("accessing value of %qE through a %qT glvalue in a "
7404                    "constant expression", build_fold_indirect_ref (sub),
7405                    TREE_TYPE (t));
7406           *non_constant_p = true;
7407           return t;
7408         }
7409     }
7410
7411   /* If we're pulling out the value of an empty base, make sure
7412      that the whole object is constant and then return an empty
7413      CONSTRUCTOR.  */
7414   if (empty_base)
7415     {
7416       VERIFY_CONSTANT (r);
7417       r = build_constructor (TREE_TYPE (t), NULL);
7418       TREE_CONSTANT (r) = true;
7419     }
7420
7421   if (r == NULL_TREE)
7422     return t;
7423   return r;
7424 }
7425
7426 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
7427    Shared between potential_constant_expression and
7428    cxx_eval_constant_expression.  */
7429
7430 static void
7431 non_const_var_error (tree r)
7432 {
7433   tree type = TREE_TYPE (r);
7434   error ("the value of %qD is not usable in a constant "
7435          "expression", r);
7436   /* Avoid error cascade.  */
7437   if (DECL_INITIAL (r) == error_mark_node)
7438     return;
7439   if (DECL_DECLARED_CONSTEXPR_P (r))
7440     inform (DECL_SOURCE_LOCATION (r),
7441             "%qD used in its own initializer", r);
7442   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7443     {
7444       if (!CP_TYPE_CONST_P (type))
7445         inform (DECL_SOURCE_LOCATION (r),
7446                 "%q#D is not const", r);
7447       else if (CP_TYPE_VOLATILE_P (type))
7448         inform (DECL_SOURCE_LOCATION (r),
7449                 "%q#D is volatile", r);
7450       else if (!DECL_INITIAL (r)
7451                || !TREE_CONSTANT (DECL_INITIAL (r)))
7452         inform (DECL_SOURCE_LOCATION (r),
7453                 "%qD was not initialized with a constant "
7454                 "expression", r);
7455       else
7456         gcc_unreachable ();
7457     }
7458   else
7459     {
7460       if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
7461         inform (DECL_SOURCE_LOCATION (r),
7462                 "%qD was not declared %<constexpr%>", r);
7463       else
7464         inform (DECL_SOURCE_LOCATION (r),
7465                 "%qD does not have integral or enumeration type",
7466                 r);
7467     }
7468 }
7469
7470 /* Attempt to reduce the expression T to a constant value.
7471    On failure, issue diagnostic and return error_mark_node.  */
7472 /* FIXME unify with c_fully_fold */
7473
7474 static tree
7475 cxx_eval_constant_expression (const constexpr_call *call, tree t,
7476                               bool allow_non_constant, bool addr,
7477                               bool *non_constant_p)
7478 {
7479   tree r = t;
7480
7481   if (t == error_mark_node)
7482     {
7483       *non_constant_p = true;
7484       return t;
7485     }
7486   if (CONSTANT_CLASS_P (t))
7487     {
7488       if (TREE_CODE (t) == PTRMEM_CST)
7489         t = cplus_expand_constant (t);
7490       return t;
7491     }
7492   if (TREE_CODE (t) != NOP_EXPR
7493       && reduced_constant_expression_p (t))
7494     return fold (t);
7495
7496   switch (TREE_CODE (t))
7497     {
7498     case VAR_DECL:
7499       if (addr)
7500         return t;
7501       /* else fall through. */
7502     case CONST_DECL:
7503       r = integral_constant_value (t);
7504       if (TREE_CODE (r) == TARGET_EXPR
7505           && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
7506         r = TARGET_EXPR_INITIAL (r);
7507       if (DECL_P (r))
7508         {
7509           if (!allow_non_constant)
7510             non_const_var_error (r);
7511           *non_constant_p = true;
7512         }
7513       break;
7514
7515     case FUNCTION_DECL:
7516     case TEMPLATE_DECL:
7517     case LABEL_DECL:
7518       return t;
7519
7520     case PARM_DECL:
7521       if (call && DECL_CONTEXT (t) == call->fundef->decl)
7522         {
7523           if (DECL_ARTIFICIAL (t) && DECL_CONSTRUCTOR_P (DECL_CONTEXT (t)))
7524             {
7525               if (!allow_non_constant)
7526                 sorry ("use of the value of the object being constructed "
7527                        "in a constant expression");
7528               *non_constant_p = true;
7529             }
7530           else
7531             r = lookup_parameter_binding (call, t);
7532         }
7533       else if (addr)
7534         /* Defer in case this is only used for its type.  */;
7535       else
7536         {
7537           if (!allow_non_constant)
7538             error ("%qE is not a constant expression", t);
7539           *non_constant_p = true;
7540         }
7541       break;
7542
7543     case CALL_EXPR:
7544     case AGGR_INIT_EXPR:
7545       r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
7546                                     non_constant_p);
7547       break;
7548
7549     case TARGET_EXPR:
7550       if (!literal_type_p (TREE_TYPE (t)))
7551         {
7552           if (!allow_non_constant)
7553             {
7554               error ("temporary of non-literal type %qT in a "
7555                      "constant expression", TREE_TYPE (t));
7556               explain_non_literal_class (TREE_TYPE (t));
7557             }
7558           *non_constant_p = true;
7559           break;
7560         }
7561       /* else fall through.  */
7562     case INIT_EXPR:
7563       /* Pass false for 'addr' because these codes indicate
7564          initialization of a temporary.  */
7565       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7566                                         allow_non_constant, false,
7567                                         non_constant_p);
7568       if (!*non_constant_p)
7569         /* Adjust the type of the result to the type of the temporary.  */
7570         r = adjust_temp_type (TREE_TYPE (t), r);
7571       break;
7572
7573     case SCOPE_REF:
7574       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7575                                         allow_non_constant, addr,
7576                                         non_constant_p);
7577       break;
7578
7579     case RETURN_EXPR:
7580     case NON_LVALUE_EXPR:
7581     case TRY_CATCH_EXPR:
7582     case CLEANUP_POINT_EXPR:
7583     case MUST_NOT_THROW_EXPR:
7584     case SAVE_EXPR:
7585       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7586                                         allow_non_constant, addr,
7587                                         non_constant_p);
7588       break;
7589
7590       /* These differ from cxx_eval_unary_expression in that this doesn't
7591          check for a constant operand or result; an address can be
7592          constant without its operand being, and vice versa.  */
7593     case INDIRECT_REF:
7594       r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
7595                                  non_constant_p);
7596       break;
7597
7598     case ADDR_EXPR:
7599       {
7600         tree oldop = TREE_OPERAND (t, 0);
7601         tree op = cxx_eval_constant_expression (call, oldop,
7602                                                 allow_non_constant,
7603                                                 /*addr*/true,
7604                                                 non_constant_p);
7605         /* Don't VERIFY_CONSTANT here.  */
7606         if (*non_constant_p)
7607           return t;
7608         /* This function does more aggressive folding than fold itself.  */
7609         r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
7610         if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
7611           return t;
7612         break;
7613       }
7614
7615     case REALPART_EXPR:
7616     case IMAGPART_EXPR:
7617     case CONJ_EXPR:
7618     case FIX_TRUNC_EXPR:
7619     case FLOAT_EXPR:
7620     case NEGATE_EXPR:
7621     case ABS_EXPR:
7622     case BIT_NOT_EXPR:
7623     case TRUTH_NOT_EXPR:
7624     case FIXED_CONVERT_EXPR:
7625       r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
7626                                      non_constant_p);
7627       break;
7628
7629     case COMPOUND_EXPR:
7630       {
7631         /* check_return_expr sometimes wraps a TARGET_EXPR in a
7632            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
7633            introduced by build_call_a.  */
7634         tree op0 = TREE_OPERAND (t, 0);
7635         tree op1 = TREE_OPERAND (t, 1);
7636         STRIP_NOPS (op1);
7637         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7638             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7639           r = cxx_eval_constant_expression (call, op0, allow_non_constant,
7640                                             addr, non_constant_p);
7641         else
7642           {
7643             /* Check that the LHS is constant and then discard it.  */
7644             cxx_eval_constant_expression (call, op0, allow_non_constant,
7645                                           false, non_constant_p);
7646             r = cxx_eval_constant_expression (call, op1, allow_non_constant,
7647                                               addr, non_constant_p);
7648           }
7649       }
7650       break;
7651
7652     case POINTER_PLUS_EXPR:
7653     case PLUS_EXPR:
7654     case MINUS_EXPR:
7655     case MULT_EXPR:
7656     case TRUNC_DIV_EXPR:
7657     case CEIL_DIV_EXPR:
7658     case FLOOR_DIV_EXPR:
7659     case ROUND_DIV_EXPR:
7660     case TRUNC_MOD_EXPR:
7661     case CEIL_MOD_EXPR:
7662     case ROUND_MOD_EXPR:
7663     case RDIV_EXPR:
7664     case EXACT_DIV_EXPR:
7665     case MIN_EXPR:
7666     case MAX_EXPR:
7667     case LSHIFT_EXPR:
7668     case RSHIFT_EXPR:
7669     case LROTATE_EXPR:
7670     case RROTATE_EXPR:
7671     case BIT_IOR_EXPR:
7672     case BIT_XOR_EXPR:
7673     case BIT_AND_EXPR:
7674     case TRUTH_XOR_EXPR:
7675     case LT_EXPR:
7676     case LE_EXPR:
7677     case GT_EXPR:
7678     case GE_EXPR:
7679     case EQ_EXPR:
7680     case NE_EXPR:
7681     case UNORDERED_EXPR:
7682     case ORDERED_EXPR:
7683     case UNLT_EXPR:
7684     case UNLE_EXPR:
7685     case UNGT_EXPR:
7686     case UNGE_EXPR:
7687     case UNEQ_EXPR:
7688     case RANGE_EXPR:
7689     case COMPLEX_EXPR:
7690       r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
7691                                       non_constant_p);
7692       break;
7693
7694       /* fold can introduce non-IF versions of these; still treat them as
7695          short-circuiting.  */
7696     case TRUTH_AND_EXPR:
7697     case TRUTH_ANDIF_EXPR:
7698       r = cxx_eval_logical_expression (call, t, boolean_false_node,
7699                                        boolean_true_node,
7700                                        allow_non_constant, addr,
7701                                        non_constant_p);
7702       break;
7703
7704     case TRUTH_OR_EXPR:
7705     case TRUTH_ORIF_EXPR:
7706       r = cxx_eval_logical_expression (call, t, boolean_true_node,
7707                                        boolean_false_node,
7708                                        allow_non_constant, addr,
7709                                        non_constant_p);
7710       break;
7711
7712     case ARRAY_REF:
7713       r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
7714                                     non_constant_p);
7715       break;
7716
7717     case COMPONENT_REF:
7718       r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
7719                                         non_constant_p);
7720       break;
7721
7722     case BIT_FIELD_REF:
7723       r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
7724                                   non_constant_p);
7725       break;
7726
7727     case COND_EXPR:
7728     case VEC_COND_EXPR:
7729       r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
7730                                            non_constant_p);
7731       break;
7732
7733     case CONSTRUCTOR:
7734       r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
7735                                    non_constant_p);
7736       break;
7737
7738     case VEC_INIT_EXPR:
7739       /* We can get this in a defaulted constructor for a class with a
7740          non-static data member of array type.  Either the initializer will
7741          be NULL, meaning default-initialization, or it will be an lvalue
7742          or xvalue of the same type, meaning direct-initialization from the
7743          corresponding member.  */
7744       r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
7745                              non_constant_p);
7746       break;
7747
7748     case CONVERT_EXPR:
7749     case VIEW_CONVERT_EXPR:
7750     case NOP_EXPR:
7751       {
7752         tree oldop = TREE_OPERAND (t, 0);
7753         tree op = oldop;
7754         tree to = TREE_TYPE (t);
7755         op = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7756                                            allow_non_constant, addr,
7757                                            non_constant_p);
7758         if (*non_constant_p)
7759           return t;
7760         if (op == oldop)
7761           /* We didn't fold at the top so we could check for ptr-int
7762              conversion.  */
7763           return fold (t);
7764         r = fold_build1 (TREE_CODE (t), to, op);
7765         /* Conversion of an out-of-range value has implementation-defined
7766            behavior; the language considers it different from arithmetic
7767            overflow, which is undefined.  */
7768         if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
7769           TREE_OVERFLOW (r) = false;
7770       }
7771       break;
7772
7773     case EMPTY_CLASS_EXPR:
7774       /* This is good enough for a function argument that might not get
7775          used, and they can't do anything with it, so just return it.  */
7776       return t;
7777
7778     case LAMBDA_EXPR:
7779     case PREINCREMENT_EXPR:
7780     case POSTINCREMENT_EXPR:
7781     case PREDECREMENT_EXPR:
7782     case POSTDECREMENT_EXPR:
7783     case NEW_EXPR:
7784     case VEC_NEW_EXPR:
7785     case DELETE_EXPR:
7786     case VEC_DELETE_EXPR:
7787     case THROW_EXPR:
7788     case MODIFY_EXPR:
7789     case MODOP_EXPR:
7790       /* GCC internal stuff.  */
7791     case VA_ARG_EXPR:
7792     case OBJ_TYPE_REF:
7793     case WITH_CLEANUP_EXPR:
7794     case STATEMENT_LIST:
7795     case BIND_EXPR:
7796     case NON_DEPENDENT_EXPR:
7797     case BASELINK:
7798     case EXPR_STMT:
7799     case OFFSET_REF:
7800       if (!allow_non_constant)
7801         error_at (EXPR_LOC_OR_HERE (t),
7802                   "expression %qE is not a constant-expression", t);
7803       *non_constant_p = true;
7804       break;
7805
7806     default:
7807       internal_error ("unexpected expression %qE of kind %s", t,
7808                       tree_code_name[TREE_CODE (t)]);
7809       *non_constant_p = true;
7810       break;
7811     }
7812
7813   if (r == error_mark_node)
7814     *non_constant_p = true;
7815
7816   if (*non_constant_p)
7817     return t;
7818   else
7819     return r;
7820 }
7821
7822 static tree
7823 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
7824 {
7825   bool non_constant_p = false;
7826   tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
7827                                          false, &non_constant_p);
7828
7829   verify_constant (r, allow_non_constant, &non_constant_p);
7830
7831   if (TREE_CODE (t) != CONSTRUCTOR
7832       && cp_has_mutable_p (TREE_TYPE (t)))
7833     {
7834       /* We allow a mutable type if the original expression was a
7835          CONSTRUCTOR so that we can do aggregate initialization of
7836          constexpr variables.  */
7837       if (!allow_non_constant)
7838         error ("%qT cannot be the type of a complete constant expression "
7839                "because it has mutable sub-objects", TREE_TYPE (t));
7840       non_constant_p = true;
7841     }
7842
7843   /* Technically we should check this for all subexpressions, but that
7844      runs into problems with our internal representation of pointer
7845      subtraction and the 5.19 rules are still in flux.  */
7846   if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
7847       && ARITHMETIC_TYPE_P (TREE_TYPE (r))
7848       && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
7849     {
7850       if (!allow_non_constant)
7851         error ("conversion from pointer type %qT "
7852                "to arithmetic type %qT in a constant-expression",
7853                TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
7854       non_constant_p = true;
7855     }
7856
7857   if (non_constant_p && !allow_non_constant)
7858     return error_mark_node;
7859   else if (non_constant_p && TREE_CONSTANT (t))
7860     {
7861       /* This isn't actually constant, so unset TREE_CONSTANT.  */
7862       if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
7863         r = copy_node (t);
7864       else
7865         r = build_nop (TREE_TYPE (t), t);
7866       TREE_CONSTANT (r) = false;
7867       return r;
7868     }
7869   else if (non_constant_p || r == t)
7870     return t;
7871   else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
7872     {
7873       if (TREE_CODE (t) == TARGET_EXPR
7874           && TARGET_EXPR_INITIAL (t) == r)
7875         return t;
7876       else
7877         {
7878           r = get_target_expr (r);
7879           TREE_CONSTANT (r) = true;
7880           return r;
7881         }
7882     }
7883   else
7884     return r;
7885 }
7886
7887 /* Returns true if T is a valid subexpression of a constant expression,
7888    even if it isn't itself a constant expression.  */
7889
7890 bool
7891 is_sub_constant_expr (tree t)
7892 {
7893   bool non_constant_p = false;
7894   cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
7895   return !non_constant_p;
7896 }
7897
7898 /* If T represents a constant expression returns its reduced value.
7899    Otherwise return error_mark_node.  If T is dependent, then
7900    return NULL.  */
7901
7902 tree
7903 cxx_constant_value (tree t)
7904 {
7905   return cxx_eval_outermost_constant_expr (t, false);
7906 }
7907
7908 /* If T is a constant expression, returns its reduced value.
7909    Otherwise, if T does not have TREE_CONSTANT set, returns T.
7910    Otherwise, returns a version of T without TREE_CONSTANT.  */
7911
7912 tree
7913 maybe_constant_value (tree t)
7914 {
7915   tree r;
7916
7917   if (type_dependent_expression_p (t)
7918       || type_unknown_p (t)
7919       || BRACE_ENCLOSED_INITIALIZER_P (t)
7920       || !potential_constant_expression (t)
7921       || value_dependent_expression_p (t))
7922     {
7923       if (TREE_OVERFLOW_P (t))
7924         {
7925           t = build_nop (TREE_TYPE (t), t);
7926           TREE_CONSTANT (t) = false;
7927         }
7928       return t;
7929     }
7930
7931   r = cxx_eval_outermost_constant_expr (t, true);
7932 #ifdef ENABLE_CHECKING
7933   /* cp_tree_equal looks through NOPs, so allow them.  */
7934   gcc_assert (r == t
7935               || CONVERT_EXPR_P (t)
7936               || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
7937               || !cp_tree_equal (r, t));
7938 #endif
7939   return r;
7940 }
7941
7942 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
7943    than wrapped in a TARGET_EXPR.  */
7944
7945 tree
7946 maybe_constant_init (tree t)
7947 {
7948   t = maybe_constant_value (t);
7949   if (TREE_CODE (t) == TARGET_EXPR)
7950     {
7951       tree init = TARGET_EXPR_INITIAL (t);
7952       if (TREE_CODE (init) == CONSTRUCTOR
7953           && TREE_CONSTANT (init))
7954         t = init;
7955     }
7956   return t;
7957 }
7958
7959 #if 0
7960 /* FIXME see ADDR_EXPR section in potential_constant_expression_1.  */
7961 /* Return true if the object referred to by REF has automatic or thread
7962    local storage.  */
7963
7964 enum { ck_ok, ck_bad, ck_unknown };
7965 static int
7966 check_automatic_or_tls (tree ref)
7967 {
7968   enum machine_mode mode;
7969   HOST_WIDE_INT bitsize, bitpos;
7970   tree offset;
7971   int volatilep = 0, unsignedp = 0;
7972   tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
7973                                    &mode, &unsignedp, &volatilep, false);
7974   duration_kind dk;
7975
7976   /* If there isn't a decl in the middle, we don't know the linkage here,
7977      and this isn't a constant expression anyway.  */
7978   if (!DECL_P (decl))
7979     return ck_unknown;
7980   dk = decl_storage_duration (decl);
7981   return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
7982 }
7983 #endif
7984
7985 /* Return true if T denotes a potentially constant expression.  Issue
7986    diagnostic as appropriate under control of FLAGS.  If WANT_RVAL is true,
7987    an lvalue-rvalue conversion is implied.
7988
7989    C++0x [expr.const] used to say
7990
7991    6 An expression is a potential constant expression if it is
7992      a constant expression where all occurences of function
7993      parameters are replaced by arbitrary constant expressions
7994      of the appropriate type.
7995
7996    2  A conditional expression is a constant expression unless it
7997       involves one of the following as a potentially evaluated
7998       subexpression (3.2), but subexpressions of logical AND (5.14),
7999       logical OR (5.15), and conditional (5.16) operations that are
8000       not evaluated are not considered.   */
8001
8002 static bool
8003 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
8004 {
8005   enum { any = false, rval = true };
8006   int i;
8007   tree tmp;
8008
8009   /* C++98 has different rules for the form of a constant expression that
8010      are enforced in the parser, so we can assume that anything that gets
8011      this far is suitable.  */
8012   if (cxx_dialect < cxx0x)
8013     return true;
8014
8015   if (t == error_mark_node)
8016     return false;
8017   if (t == NULL_TREE)
8018     return true;
8019   if (TREE_THIS_VOLATILE (t))
8020     {
8021       if (flags & tf_error)
8022         error ("expression %qE has side-effects", t);
8023       return false;
8024     }
8025   if (CONSTANT_CLASS_P (t))
8026     {
8027       if (TREE_OVERFLOW (t))
8028         {
8029           if (flags & tf_error)
8030             {
8031               permerror (EXPR_LOC_OR_HERE (t),
8032                          "overflow in constant expression");
8033               if (flag_permissive)
8034                 return true;
8035             }
8036           return false;
8037         }
8038       return true;
8039     }
8040
8041   switch (TREE_CODE (t))
8042     {
8043     case FUNCTION_DECL:
8044     case BASELINK:
8045     case TEMPLATE_DECL:
8046     case OVERLOAD:
8047     case TEMPLATE_ID_EXPR:
8048     case LABEL_DECL:
8049     case CONST_DECL:
8050     case SIZEOF_EXPR:
8051     case ALIGNOF_EXPR:
8052     case OFFSETOF_EXPR:
8053     case NOEXCEPT_EXPR:
8054     case TEMPLATE_PARM_INDEX:
8055     case TRAIT_EXPR:
8056     case IDENTIFIER_NODE:
8057     case USERDEF_LITERAL:
8058       /* We can see a FIELD_DECL in a pointer-to-member expression.  */
8059     case FIELD_DECL:
8060     case PARM_DECL:
8061     case USING_DECL:
8062       return true;
8063
8064     case AGGR_INIT_EXPR:
8065     case CALL_EXPR:
8066       /* -- an invocation of a function other than a constexpr function
8067             or a constexpr constructor.  */
8068       {
8069         tree fun = get_function_named_in_call (t);
8070         const int nargs = call_expr_nargs (t);
8071         i = 0;
8072
8073         if (is_overloaded_fn (fun))
8074           {
8075             if (TREE_CODE (fun) == FUNCTION_DECL)
8076               {
8077                 if (builtin_valid_in_constant_expr_p (fun))
8078                   return true;
8079                 if (!DECL_DECLARED_CONSTEXPR_P (fun)
8080                     /* Allow any built-in function; if the expansion
8081                        isn't constant, we'll deal with that then.  */
8082                     && !is_builtin_fn (fun))
8083                   {
8084                     if (flags & tf_error)
8085                       {
8086                         error_at (EXPR_LOC_OR_HERE (t),
8087                                   "call to non-constexpr function %qD", fun);
8088                         explain_invalid_constexpr_fn (fun);
8089                       }
8090                     return false;
8091                   }
8092                 /* A call to a non-static member function takes the address
8093                    of the object as the first argument.  But in a constant
8094                    expression the address will be folded away, so look
8095                    through it now.  */
8096                 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
8097                     && !DECL_CONSTRUCTOR_P (fun))
8098                   {
8099                     tree x = get_nth_callarg (t, 0);
8100                     if (is_this_parameter (x))
8101                       {
8102                         if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8103                           {
8104                             if (flags & tf_error)
8105                               sorry ("calling a member function of the "
8106                                      "object being constructed in a constant "
8107                                      "expression");
8108                             return false;
8109                           }
8110                         /* Otherwise OK.  */;
8111                       }
8112                     else if (!potential_constant_expression_1 (x, rval, flags))
8113                       return false;
8114                     i = 1;
8115                   }
8116               }
8117             else
8118               fun = get_first_fn (fun);
8119             /* Skip initial arguments to base constructors.  */
8120             if (DECL_BASE_CONSTRUCTOR_P (fun))
8121               i = num_artificial_parms_for (fun);
8122             fun = DECL_ORIGIN (fun);
8123           }
8124         else
8125           {
8126             if (potential_constant_expression_1 (fun, rval, flags))
8127               /* Might end up being a constant function pointer.  */;
8128             else
8129               return false;
8130           }
8131         for (; i < nargs; ++i)
8132           {
8133             tree x = get_nth_callarg (t, i);
8134             if (!potential_constant_expression_1 (x, rval, flags))
8135               return false;
8136           }
8137         return true;
8138       }
8139
8140     case NON_LVALUE_EXPR:
8141       /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
8142             -- an lvalue of integral type that refers to a non-volatile
8143                const variable or static data member initialized with
8144                constant expressions, or
8145
8146             -- an lvalue of literal type that refers to non-volatile
8147                object defined with constexpr, or that refers to a
8148                sub-object of such an object;  */
8149       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8150
8151     case VAR_DECL:
8152       if (want_rval && !decl_constant_var_p (t)
8153           && !dependent_type_p (TREE_TYPE (t)))
8154         {
8155           if (flags & tf_error)
8156             non_const_var_error (t);
8157           return false;
8158         }
8159       return true;
8160
8161     case NOP_EXPR:
8162     case CONVERT_EXPR:
8163     case VIEW_CONVERT_EXPR:
8164       /* -- a reinterpret_cast.  FIXME not implemented, and this rule
8165          may change to something more specific to type-punning (DR 1312).  */
8166       {
8167         tree from = TREE_OPERAND (t, 0);
8168         return (potential_constant_expression_1
8169                 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
8170       }
8171
8172     case ADDR_EXPR:
8173       /* -- a unary operator & that is applied to an lvalue that
8174             designates an object with thread or automatic storage
8175             duration;  */
8176       t = TREE_OPERAND (t, 0);
8177 #if 0
8178       /* FIXME adjust when issue 1197 is fully resolved.  For now don't do
8179          any checking here, as we might dereference the pointer later.  If
8180          we remove this code, also remove check_automatic_or_tls.  */
8181       i = check_automatic_or_tls (t);
8182       if (i == ck_ok)
8183         return true;
8184       if (i == ck_bad)
8185         {
8186           if (flags & tf_error)
8187             error ("address-of an object %qE with thread local or "
8188                    "automatic storage is not a constant expression", t);
8189           return false;
8190         }
8191 #endif
8192       return potential_constant_expression_1 (t, any, flags);
8193
8194     case COMPONENT_REF:
8195     case BIT_FIELD_REF:
8196     case ARROW_EXPR:
8197     case OFFSET_REF:
8198       /* -- a class member access unless its postfix-expression is
8199             of literal type or of pointer to literal type.  */
8200       /* This test would be redundant, as it follows from the
8201          postfix-expression being a potential constant expression.  */
8202       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8203                                               want_rval, flags);
8204
8205     case EXPR_PACK_EXPANSION:
8206       return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
8207                                               want_rval, flags);
8208
8209     case INDIRECT_REF:
8210       {
8211         tree x = TREE_OPERAND (t, 0);
8212         STRIP_NOPS (x);
8213         if (is_this_parameter (x))
8214           {
8215             if (want_rval && DECL_CONTEXT (x)
8216                 && DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
8217               {
8218                 if (flags & tf_error)
8219                   sorry ("use of the value of the object being constructed "
8220                          "in a constant expression");
8221                 return false;
8222               }
8223             return true;
8224           }
8225         return potential_constant_expression_1 (x, rval, flags);
8226       }
8227
8228     case LAMBDA_EXPR:
8229     case DYNAMIC_CAST_EXPR:
8230     case PSEUDO_DTOR_EXPR:
8231     case PREINCREMENT_EXPR:
8232     case POSTINCREMENT_EXPR:
8233     case PREDECREMENT_EXPR:
8234     case POSTDECREMENT_EXPR:
8235     case NEW_EXPR:
8236     case VEC_NEW_EXPR:
8237     case DELETE_EXPR:
8238     case VEC_DELETE_EXPR:
8239     case THROW_EXPR:
8240     case MODIFY_EXPR:
8241     case MODOP_EXPR:
8242       /* GCC internal stuff.  */
8243     case VA_ARG_EXPR:
8244     case OBJ_TYPE_REF:
8245     case WITH_CLEANUP_EXPR:
8246     case CLEANUP_POINT_EXPR:
8247     case MUST_NOT_THROW_EXPR:
8248     case TRY_CATCH_EXPR:
8249     case STATEMENT_LIST:
8250       /* Don't bother trying to define a subset of statement-expressions to
8251          be constant-expressions, at least for now.  */
8252     case STMT_EXPR:
8253     case EXPR_STMT:
8254     case BIND_EXPR:
8255     case TRANSACTION_EXPR:
8256     case IF_STMT:
8257     case DO_STMT:
8258     case FOR_STMT:
8259     case WHILE_STMT:
8260       if (flags & tf_error)
8261         error ("expression %qE is not a constant-expression", t);
8262       return false;
8263
8264     case TYPEID_EXPR:
8265       /* -- a typeid expression whose operand is of polymorphic
8266             class type;  */
8267       {
8268         tree e = TREE_OPERAND (t, 0);
8269         if (!TYPE_P (e) && !type_dependent_expression_p (e)
8270             && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
8271           {
8272             if (flags & tf_error)
8273               error ("typeid-expression is not a constant expression "
8274                      "because %qE is of polymorphic type", e);
8275             return false;
8276           }
8277         return true;
8278       }
8279
8280     case MINUS_EXPR:
8281       /* -- a subtraction where both operands are pointers.   */
8282       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8283           && TYPE_PTR_P (TREE_OPERAND (t, 1)))
8284         {
8285           if (flags & tf_error)
8286             error ("difference of two pointer expressions is not "
8287                    "a constant expression");
8288           return false;
8289         }
8290       want_rval = true;
8291       goto binary;
8292
8293     case LT_EXPR:
8294     case LE_EXPR:
8295     case GT_EXPR:
8296     case GE_EXPR:
8297     case EQ_EXPR:
8298     case NE_EXPR:
8299       /* -- a relational or equality operator where at least
8300             one of the operands is a pointer.  */
8301       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
8302           || TYPE_PTR_P (TREE_OPERAND (t, 1)))
8303         {
8304           if (flags & tf_error)
8305             error ("pointer comparison expression is not a "
8306                    "constant expression");
8307           return false;
8308         }
8309       want_rval = true;
8310       goto binary;
8311
8312     case BIT_NOT_EXPR:
8313       /* A destructor.  */
8314       if (TYPE_P (TREE_OPERAND (t, 0)))
8315         return true;
8316       /* else fall through.  */
8317
8318     case REALPART_EXPR:
8319     case IMAGPART_EXPR:
8320     case CONJ_EXPR:
8321     case SAVE_EXPR:
8322     case FIX_TRUNC_EXPR:
8323     case FLOAT_EXPR:
8324     case NEGATE_EXPR:
8325     case ABS_EXPR:
8326     case TRUTH_NOT_EXPR:
8327     case FIXED_CONVERT_EXPR:
8328     case UNARY_PLUS_EXPR:
8329       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
8330                                               flags);
8331
8332     case CAST_EXPR:
8333     case CONST_CAST_EXPR:
8334     case STATIC_CAST_EXPR:
8335     case REINTERPRET_CAST_EXPR:
8336     case IMPLICIT_CONV_EXPR:
8337       return (potential_constant_expression_1
8338               (TREE_OPERAND (t, 0),
8339                TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
8340
8341     case PAREN_EXPR:
8342     case NON_DEPENDENT_EXPR:
8343       /* For convenience.  */
8344     case RETURN_EXPR:
8345       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
8346                                               want_rval, flags);
8347
8348     case SCOPE_REF:
8349       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8350                                               want_rval, flags);
8351
8352     case TARGET_EXPR:
8353       if (!literal_type_p (TREE_TYPE (t)))
8354         {
8355           if (flags & tf_error)
8356             {
8357               error ("temporary of non-literal type %qT in a "
8358                      "constant expression", TREE_TYPE (t));
8359               explain_non_literal_class (TREE_TYPE (t));
8360             }
8361           return false;
8362         }
8363     case INIT_EXPR:
8364       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8365                                               rval, flags);
8366
8367     case CONSTRUCTOR:
8368       {
8369         VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
8370         constructor_elt *ce;
8371         for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
8372           if (!potential_constant_expression_1 (ce->value, want_rval, flags))
8373             return false;
8374         return true;
8375       }
8376
8377     case TREE_LIST:
8378       {
8379         gcc_assert (TREE_PURPOSE (t) == NULL_TREE
8380                     || DECL_P (TREE_PURPOSE (t)));
8381         if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
8382                                               flags))
8383           return false;
8384         if (TREE_CHAIN (t) == NULL_TREE)
8385           return true;
8386         return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
8387                                                 flags);
8388       }
8389
8390     case TRUNC_DIV_EXPR:
8391     case CEIL_DIV_EXPR:
8392     case FLOOR_DIV_EXPR:
8393     case ROUND_DIV_EXPR:
8394     case TRUNC_MOD_EXPR:
8395     case CEIL_MOD_EXPR:
8396     case ROUND_MOD_EXPR:
8397       {
8398         tree denom = TREE_OPERAND (t, 1);
8399         /* We can't call maybe_constant_value on an expression
8400            that hasn't been through fold_non_dependent_expr yet.  */
8401         if (!processing_template_decl)
8402           denom = maybe_constant_value (denom);
8403         if (integer_zerop (denom))
8404           {
8405             if (flags & tf_error)
8406               error ("division by zero is not a constant-expression");
8407             return false;
8408           }
8409         else
8410           {
8411             want_rval = true;
8412             goto binary;
8413           }
8414       }
8415
8416     case COMPOUND_EXPR:
8417       {
8418         /* check_return_expr sometimes wraps a TARGET_EXPR in a
8419            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
8420            introduced by build_call_a.  */
8421         tree op0 = TREE_OPERAND (t, 0);
8422         tree op1 = TREE_OPERAND (t, 1);
8423         STRIP_NOPS (op1);
8424         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
8425             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
8426           return potential_constant_expression_1 (op0, want_rval, flags);
8427         else
8428           goto binary;
8429       }
8430
8431       /* If the first operand is the non-short-circuit constant, look at
8432          the second operand; otherwise we only care about the first one for
8433          potentiality.  */
8434     case TRUTH_AND_EXPR:
8435     case TRUTH_ANDIF_EXPR:
8436       tmp = boolean_true_node;
8437       goto truth;
8438     case TRUTH_OR_EXPR:
8439     case TRUTH_ORIF_EXPR:
8440       tmp = boolean_false_node;
8441     truth:
8442       if (TREE_OPERAND (t, 0) == tmp)
8443         return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
8444       else
8445         return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8446
8447     case PLUS_EXPR:
8448     case MULT_EXPR:
8449     case POINTER_PLUS_EXPR:
8450     case RDIV_EXPR:
8451     case EXACT_DIV_EXPR:
8452     case MIN_EXPR:
8453     case MAX_EXPR:
8454     case LSHIFT_EXPR:
8455     case RSHIFT_EXPR:
8456     case LROTATE_EXPR:
8457     case RROTATE_EXPR:
8458     case BIT_IOR_EXPR:
8459     case BIT_XOR_EXPR:
8460     case BIT_AND_EXPR:
8461     case TRUTH_XOR_EXPR:
8462     case UNORDERED_EXPR:
8463     case ORDERED_EXPR:
8464     case UNLT_EXPR:
8465     case UNLE_EXPR:
8466     case UNGT_EXPR:
8467     case UNGE_EXPR:
8468     case UNEQ_EXPR:
8469     case RANGE_EXPR:
8470     case COMPLEX_EXPR:
8471       want_rval = true;
8472       /* Fall through.  */
8473     case ARRAY_REF:
8474     case ARRAY_RANGE_REF:
8475     case MEMBER_REF:
8476     case DOTSTAR_EXPR:
8477     binary:
8478       for (i = 0; i < 2; ++i)
8479         if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8480                                               want_rval, flags))
8481           return false;
8482       return true;
8483
8484     case FMA_EXPR:
8485      for (i = 0; i < 3; ++i)
8486       if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8487                                             true, flags))
8488         return false;
8489      return true;
8490
8491     case COND_EXPR:
8492     case VEC_COND_EXPR:
8493       /* If the condition is a known constant, we know which of the legs we
8494          care about; otherwise we only require that the condition and
8495          either of the legs be potentially constant.  */
8496       tmp = TREE_OPERAND (t, 0);
8497       if (!potential_constant_expression_1 (tmp, rval, flags))
8498         return false;
8499       else if (integer_zerop (tmp))
8500         return potential_constant_expression_1 (TREE_OPERAND (t, 2),
8501                                                 want_rval, flags);
8502       else if (TREE_CODE (tmp) == INTEGER_CST)
8503         return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8504                                                 want_rval, flags);
8505       for (i = 1; i < 3; ++i)
8506         if (potential_constant_expression_1 (TREE_OPERAND (t, i),
8507                                              want_rval, tf_none))
8508           return true;
8509       if (flags & tf_error)
8510         error ("expression %qE is not a constant-expression", t);
8511       return false;
8512
8513     case VEC_INIT_EXPR:
8514       if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
8515         return true;
8516       if (flags & tf_error)
8517         {
8518           error ("non-constant array initialization");
8519           diagnose_non_constexpr_vec_init (t);
8520         }
8521       return false;
8522
8523     default:
8524       sorry ("unexpected AST of kind %s", tree_code_name[TREE_CODE (t)]);
8525       gcc_unreachable();
8526       return false;
8527     }
8528 }
8529
8530 /* The main entry point to the above.  */
8531
8532 bool
8533 potential_constant_expression (tree t)
8534 {
8535   return potential_constant_expression_1 (t, false, tf_none);
8536 }
8537
8538 /* As above, but require a constant rvalue.  */
8539
8540 bool
8541 potential_rvalue_constant_expression (tree t)
8542 {
8543   return potential_constant_expression_1 (t, true, tf_none);
8544 }
8545
8546 /* Like above, but complain about non-constant expressions.  */
8547
8548 bool
8549 require_potential_constant_expression (tree t)
8550 {
8551   return potential_constant_expression_1 (t, false, tf_warning_or_error);
8552 }
8553
8554 /* Cross product of the above.  */
8555
8556 bool
8557 require_potential_rvalue_constant_expression (tree t)
8558 {
8559   return potential_constant_expression_1 (t, true, tf_warning_or_error);
8560 }
8561 \f
8562 /* Constructor for a lambda expression.  */
8563
8564 tree
8565 build_lambda_expr (void)
8566 {
8567   tree lambda = make_node (LAMBDA_EXPR);
8568   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
8569   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
8570   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
8571   LAMBDA_EXPR_PENDING_PROXIES      (lambda) = NULL;
8572   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
8573   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
8574   return lambda;
8575 }
8576
8577 /* Create the closure object for a LAMBDA_EXPR.  */
8578
8579 tree
8580 build_lambda_object (tree lambda_expr)
8581 {
8582   /* Build aggregate constructor call.
8583      - cp_parser_braced_list
8584      - cp_parser_functional_cast  */
8585   VEC(constructor_elt,gc) *elts = NULL;
8586   tree node, expr, type;
8587   location_t saved_loc;
8588
8589   if (processing_template_decl)
8590     return lambda_expr;
8591
8592   /* Make sure any error messages refer to the lambda-introducer.  */
8593   saved_loc = input_location;
8594   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
8595
8596   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8597        node;
8598        node = TREE_CHAIN (node))
8599     {
8600       tree field = TREE_PURPOSE (node);
8601       tree val = TREE_VALUE (node);
8602
8603       if (field == error_mark_node)
8604         {
8605           expr = error_mark_node;
8606           goto out;
8607         }
8608
8609       if (DECL_P (val))
8610         mark_used (val);
8611
8612       /* Mere mortals can't copy arrays with aggregate initialization, so
8613          do some magic to make it work here.  */
8614       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
8615         val = build_array_copy (val);
8616       else if (DECL_NORMAL_CAPTURE_P (field)
8617                && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
8618         {
8619           /* "the entities that are captured by copy are used to
8620              direct-initialize each corresponding non-static data
8621              member of the resulting closure object."
8622
8623              There's normally no way to express direct-initialization
8624              from an element of a CONSTRUCTOR, so we build up a special
8625              TARGET_EXPR to bypass the usual copy-initialization.  */
8626           val = force_rvalue (val, tf_warning_or_error);
8627           if (TREE_CODE (val) == TARGET_EXPR)
8628             TARGET_EXPR_DIRECT_INIT_P (val) = true;
8629         }
8630
8631       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
8632     }
8633
8634   expr = build_constructor (init_list_type_node, elts);
8635   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
8636
8637   /* N2927: "[The closure] class type is not an aggregate."
8638      But we briefly treat it as an aggregate to make this simpler.  */
8639   type = LAMBDA_EXPR_CLOSURE (lambda_expr);
8640   CLASSTYPE_NON_AGGREGATE (type) = 0;
8641   expr = finish_compound_literal (type, expr, tf_warning_or_error);
8642   CLASSTYPE_NON_AGGREGATE (type) = 1;
8643
8644  out:
8645   input_location = saved_loc;
8646   return expr;
8647 }
8648
8649 /* Return an initialized RECORD_TYPE for LAMBDA.
8650    LAMBDA must have its explicit captures already.  */
8651
8652 tree
8653 begin_lambda_type (tree lambda)
8654 {
8655   tree type;
8656
8657   {
8658     /* Unique name.  This is just like an unnamed class, but we cannot use
8659        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
8660     tree name;
8661     name = make_lambda_name ();
8662
8663     /* Create the new RECORD_TYPE for this lambda.  */
8664     type = xref_tag (/*tag_code=*/record_type,
8665                      name,
8666                      /*scope=*/ts_within_enclosing_non_class,
8667                      /*template_header_p=*/false);
8668   }
8669
8670   /* Designate it as a struct so that we can use aggregate initialization.  */
8671   CLASSTYPE_DECLARED_CLASS (type) = false;
8672
8673   /* Clear base types.  */
8674   xref_basetypes (type, /*bases=*/NULL_TREE);
8675
8676   /* Start the class.  */
8677   type = begin_class_definition (type, /*attributes=*/NULL_TREE);
8678   if (type == error_mark_node)
8679     return error_mark_node;
8680
8681   /* Cross-reference the expression and the type.  */
8682   LAMBDA_EXPR_CLOSURE (lambda) = type;
8683   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
8684
8685   return type;
8686 }
8687
8688 /* Returns the type to use for the return type of the operator() of a
8689    closure class.  */
8690
8691 tree
8692 lambda_return_type (tree expr)
8693 {
8694   tree type;
8695   if (type_unknown_p (expr)
8696       || BRACE_ENCLOSED_INITIALIZER_P (expr))
8697     {
8698       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
8699       return void_type_node;
8700     }
8701   if (type_dependent_expression_p (expr))
8702     type = dependent_lambda_return_type_node;
8703   else
8704     type = cv_unqualified (type_decays_to (unlowered_expr_type (expr)));
8705   return type;
8706 }
8707
8708 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
8709    closure type.  */
8710
8711 tree
8712 lambda_function (tree lambda)
8713 {
8714   tree type;
8715   if (TREE_CODE (lambda) == LAMBDA_EXPR)
8716     type = LAMBDA_EXPR_CLOSURE (lambda);
8717   else
8718     type = lambda;
8719   gcc_assert (LAMBDA_TYPE_P (type));
8720   /* Don't let debug_tree cause instantiation.  */
8721   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
8722       && !COMPLETE_OR_OPEN_TYPE_P (type))
8723     return NULL_TREE;
8724   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
8725                           /*protect=*/0, /*want_type=*/false,
8726                           tf_warning_or_error);
8727   if (lambda)
8728     lambda = BASELINK_FUNCTIONS (lambda);
8729   return lambda;
8730 }
8731
8732 /* Returns the type to use for the FIELD_DECL corresponding to the
8733    capture of EXPR.
8734    The caller should add REFERENCE_TYPE for capture by reference.  */
8735
8736 tree
8737 lambda_capture_field_type (tree expr)
8738 {
8739   tree type;
8740   if (type_dependent_expression_p (expr))
8741     {
8742       type = cxx_make_type (DECLTYPE_TYPE);
8743       DECLTYPE_TYPE_EXPR (type) = expr;
8744       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
8745       SET_TYPE_STRUCTURAL_EQUALITY (type);
8746     }
8747   else
8748     type = non_reference (unlowered_expr_type (expr));
8749   return type;
8750 }
8751
8752 /* Recompute the return type for LAMBDA with body of the form:
8753      { return EXPR ; }  */
8754
8755 void
8756 apply_lambda_return_type (tree lambda, tree return_type)
8757 {
8758   tree fco = lambda_function (lambda);
8759   tree result;
8760
8761   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
8762
8763   if (return_type == error_mark_node)
8764     return;
8765   if (TREE_TYPE (TREE_TYPE (fco)) == return_type)
8766     return;
8767
8768   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
8769      TREE_TYPE (METHOD_TYPE)   == return-type  */
8770   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
8771
8772   result = DECL_RESULT (fco);
8773   if (result == NULL_TREE)
8774     return;
8775
8776   /* We already have a DECL_RESULT from start_preparsed_function.
8777      Now we need to redo the work it and allocate_struct_function
8778      did to reflect the new type.  */
8779   gcc_assert (current_function_decl == fco);
8780   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
8781                        TYPE_MAIN_VARIANT (return_type));
8782   DECL_ARTIFICIAL (result) = 1;
8783   DECL_IGNORED_P (result) = 1;
8784   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
8785                                result);
8786
8787   DECL_RESULT (fco) = result;
8788
8789   if (!processing_template_decl && aggregate_value_p (result, fco))
8790     {
8791 #ifdef PCC_STATIC_STRUCT_RETURN
8792       cfun->returns_pcc_struct = 1;
8793 #endif
8794       cfun->returns_struct = 1;
8795     }
8796
8797 }
8798
8799 /* DECL is a local variable or parameter from the surrounding scope of a
8800    lambda-expression.  Returns the decltype for a use of the capture field
8801    for DECL even if it hasn't been captured yet.  */
8802
8803 static tree
8804 capture_decltype (tree decl)
8805 {
8806   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8807   /* FIXME do lookup instead of list walk? */
8808   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
8809   tree type;
8810
8811   if (cap)
8812     type = TREE_TYPE (TREE_PURPOSE (cap));
8813   else
8814     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
8815       {
8816       case CPLD_NONE:
8817         error ("%qD is not captured", decl);
8818         return error_mark_node;
8819
8820       case CPLD_COPY:
8821         type = TREE_TYPE (decl);
8822         if (TREE_CODE (type) == REFERENCE_TYPE
8823             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
8824           type = TREE_TYPE (type);
8825         break;
8826
8827       case CPLD_REFERENCE:
8828         type = TREE_TYPE (decl);
8829         if (TREE_CODE (type) != REFERENCE_TYPE)
8830           type = build_reference_type (TREE_TYPE (decl));
8831         break;
8832
8833       default:
8834         gcc_unreachable ();
8835       }
8836
8837   if (TREE_CODE (type) != REFERENCE_TYPE)
8838     {
8839       if (!LAMBDA_EXPR_MUTABLE_P (lam))
8840         type = cp_build_qualified_type (type, (cp_type_quals (type)
8841                                                |TYPE_QUAL_CONST));
8842       type = build_reference_type (type);
8843     }
8844   return type;
8845 }
8846
8847 /* Returns true iff DECL is a lambda capture proxy variable created by
8848    build_capture_proxy.  */
8849
8850 bool
8851 is_capture_proxy (tree decl)
8852 {
8853   return (TREE_CODE (decl) == VAR_DECL
8854           && DECL_HAS_VALUE_EXPR_P (decl)
8855           && !DECL_ANON_UNION_VAR_P (decl)
8856           && LAMBDA_FUNCTION_P (DECL_CONTEXT (decl)));
8857 }
8858
8859 /* Returns true iff DECL is a capture proxy for a normal capture
8860    (i.e. without explicit initializer).  */
8861
8862 bool
8863 is_normal_capture_proxy (tree decl)
8864 {
8865   tree val;
8866
8867   if (!is_capture_proxy (decl))
8868     /* It's not a capture proxy.  */
8869     return false;
8870
8871   /* It is a capture proxy, is it a normal capture?  */
8872   val = DECL_VALUE_EXPR (decl);
8873   gcc_assert (TREE_CODE (val) == COMPONENT_REF);
8874   val = TREE_OPERAND (val, 1);
8875   return DECL_NORMAL_CAPTURE_P (val);
8876 }
8877
8878 /* VAR is a capture proxy created by build_capture_proxy; add it to the
8879    current function, which is the operator() for the appropriate lambda.  */
8880
8881 void
8882 insert_capture_proxy (tree var)
8883 {
8884   cp_binding_level *b;
8885   int skip;
8886   tree stmt_list;
8887
8888   /* Put the capture proxy in the extra body block so that it won't clash
8889      with a later local variable.  */
8890   b = current_binding_level;
8891   for (skip = 0; ; ++skip)
8892     {
8893       cp_binding_level *n = b->level_chain;
8894       if (n->kind == sk_function_parms)
8895         break;
8896       b = n;
8897     }
8898   pushdecl_with_scope (var, b, false);
8899
8900   /* And put a DECL_EXPR in the STATEMENT_LIST for the same block.  */
8901   var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
8902   stmt_list = VEC_index (tree, stmt_list_stack,
8903                          VEC_length (tree, stmt_list_stack) - 1 - skip);
8904   gcc_assert (stmt_list);
8905   append_to_statement_list_force (var, &stmt_list);
8906 }
8907
8908 /* We've just finished processing a lambda; if the containing scope is also
8909    a lambda, insert any capture proxies that were created while processing
8910    the nested lambda.  */
8911
8912 void
8913 insert_pending_capture_proxies (void)
8914 {
8915   tree lam;
8916   VEC(tree,gc) *proxies;
8917   unsigned i;
8918
8919   if (!current_function_decl || !LAMBDA_FUNCTION_P (current_function_decl))
8920     return;
8921
8922   lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8923   proxies = LAMBDA_EXPR_PENDING_PROXIES (lam);
8924   for (i = 0; i < VEC_length (tree, proxies); ++i)
8925     {
8926       tree var = VEC_index (tree, proxies, i);
8927       insert_capture_proxy (var);
8928     }
8929   release_tree_vector (LAMBDA_EXPR_PENDING_PROXIES (lam));
8930   LAMBDA_EXPR_PENDING_PROXIES (lam) = NULL;
8931 }
8932
8933 /* Given REF, a COMPONENT_REF designating a field in the lambda closure,
8934    return the type we want the proxy to have: the type of the field itself,
8935    with added const-qualification if the lambda isn't mutable and the
8936    capture is by value.  */
8937
8938 tree
8939 lambda_proxy_type (tree ref)
8940 {
8941   tree type;
8942   if (REFERENCE_REF_P (ref))
8943     ref = TREE_OPERAND (ref, 0);
8944   type = TREE_TYPE (ref);
8945   if (!dependent_type_p (type))
8946     return type;
8947   type = cxx_make_type (DECLTYPE_TYPE);
8948   DECLTYPE_TYPE_EXPR (type) = ref;
8949   DECLTYPE_FOR_LAMBDA_PROXY (type) = true;
8950   SET_TYPE_STRUCTURAL_EQUALITY (type);
8951   return type;
8952 }
8953
8954 /* MEMBER is a capture field in a lambda closure class.  Now that we're
8955    inside the operator(), build a placeholder var for future lookups and
8956    debugging.  */
8957
8958 tree
8959 build_capture_proxy (tree member)
8960 {
8961   tree var, object, fn, closure, name, lam, type;
8962
8963   closure = DECL_CONTEXT (member);
8964   fn = lambda_function (closure);
8965   lam = CLASSTYPE_LAMBDA_EXPR (closure);
8966
8967   /* The proxy variable forwards to the capture field.  */
8968   object = build_fold_indirect_ref (DECL_ARGUMENTS (fn));
8969   object = finish_non_static_data_member (member, object, NULL_TREE);
8970   if (REFERENCE_REF_P (object))
8971     object = TREE_OPERAND (object, 0);
8972
8973   /* Remove the __ inserted by add_capture.  */
8974   name = get_identifier (IDENTIFIER_POINTER (DECL_NAME (member)) + 2);
8975
8976   type = lambda_proxy_type (object);
8977   var = build_decl (input_location, VAR_DECL, name, type);
8978   SET_DECL_VALUE_EXPR (var, object);
8979   DECL_HAS_VALUE_EXPR_P (var) = 1;
8980   DECL_ARTIFICIAL (var) = 1;
8981   TREE_USED (var) = 1;
8982   DECL_CONTEXT (var) = fn;
8983
8984   if (name == this_identifier)
8985     {
8986       gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (lam) == member);
8987       LAMBDA_EXPR_THIS_CAPTURE (lam) = var;
8988     }
8989
8990   if (fn == current_function_decl)
8991     insert_capture_proxy (var);
8992   else
8993     VEC_safe_push (tree, gc, LAMBDA_EXPR_PENDING_PROXIES (lam), var);
8994
8995   return var;
8996 }
8997
8998 /* From an ID and INITIALIZER, create a capture (by reference if
8999    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
9000    and return it.  */
9001
9002 tree
9003 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
9004              bool explicit_init_p)
9005 {
9006   char *buf;
9007   tree type, member, name;
9008
9009   type = lambda_capture_field_type (initializer);
9010   if (by_reference_p)
9011     {
9012       type = build_reference_type (type);
9013       if (!real_lvalue_p (initializer))
9014         error ("cannot capture %qE by reference", initializer);
9015     }
9016   else
9017     /* Capture by copy requires a complete type.  */
9018     type = complete_type (type);
9019
9020   /* Add __ to the beginning of the field name so that user code
9021      won't find the field with name lookup.  We can't just leave the name
9022      unset because template instantiation uses the name to find
9023      instantiated fields.  */
9024   buf = (char *) alloca (IDENTIFIER_LENGTH (id) + 3);
9025   buf[1] = buf[0] = '_';
9026   memcpy (buf + 2, IDENTIFIER_POINTER (id),
9027           IDENTIFIER_LENGTH (id) + 1);
9028   name = get_identifier (buf);
9029
9030   /* If TREE_TYPE isn't set, we're still in the introducer, so check
9031      for duplicates.  */
9032   if (!LAMBDA_EXPR_CLOSURE (lambda))
9033     {
9034       if (IDENTIFIER_MARKED (name))
9035         {
9036           pedwarn (input_location, 0,
9037                    "already captured %qD in lambda expression", id);
9038           return NULL_TREE;
9039         }
9040       IDENTIFIER_MARKED (name) = true;
9041     }
9042
9043   /* Make member variable.  */
9044   member = build_lang_decl (FIELD_DECL, name, type);
9045
9046   if (!explicit_init_p)
9047     /* Normal captures are invisible to name lookup but uses are replaced
9048        with references to the capture field; we implement this by only
9049        really making them invisible in unevaluated context; see
9050        qualify_lookup.  For now, let's make explicitly initialized captures
9051        always visible.  */
9052     DECL_NORMAL_CAPTURE_P (member) = true;
9053
9054   if (id == this_identifier)
9055     LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
9056
9057   /* Add it to the appropriate closure class if we've started it.  */
9058   if (current_class_type
9059       && current_class_type == LAMBDA_EXPR_CLOSURE (lambda))
9060     finish_member_declaration (member);
9061
9062   LAMBDA_EXPR_CAPTURE_LIST (lambda)
9063     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
9064
9065   if (LAMBDA_EXPR_CLOSURE (lambda))
9066     return build_capture_proxy (member);
9067   /* For explicit captures we haven't started the function yet, so we wait
9068      and build the proxy from cp_parser_lambda_body.  */
9069   return NULL_TREE;
9070 }
9071
9072 /* Register all the capture members on the list CAPTURES, which is the
9073    LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
9074
9075 void
9076 register_capture_members (tree captures)
9077 {
9078   if (captures == NULL_TREE)
9079     return;
9080
9081   register_capture_members (TREE_CHAIN (captures));
9082   /* We set this in add_capture to avoid duplicates.  */
9083   IDENTIFIER_MARKED (DECL_NAME (TREE_PURPOSE (captures))) = false;
9084   finish_member_declaration (TREE_PURPOSE (captures));
9085 }
9086
9087 /* Similar to add_capture, except this works on a stack of nested lambdas.
9088    BY_REFERENCE_P in this case is derived from the default capture mode.
9089    Returns the capture for the lambda at the bottom of the stack.  */
9090
9091 tree
9092 add_default_capture (tree lambda_stack, tree id, tree initializer)
9093 {
9094   bool this_capture_p = (id == this_identifier);
9095
9096   tree var = NULL_TREE;
9097
9098   tree saved_class_type = current_class_type;
9099
9100   tree node;
9101
9102   for (node = lambda_stack;
9103        node;
9104        node = TREE_CHAIN (node))
9105     {
9106       tree lambda = TREE_VALUE (node);
9107
9108       current_class_type = LAMBDA_EXPR_CLOSURE (lambda);
9109       var = add_capture (lambda,
9110                             id,
9111                             initializer,
9112                             /*by_reference_p=*/
9113                             (!this_capture_p
9114                              && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
9115                                  == CPLD_REFERENCE)),
9116                             /*explicit_init_p=*/false);
9117       initializer = convert_from_reference (var);
9118     }
9119
9120   current_class_type = saved_class_type;
9121
9122   return var;
9123 }
9124
9125 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
9126    INDIRECT_REF, possibly adding it through default capturing.  */
9127
9128 tree
9129 lambda_expr_this_capture (tree lambda)
9130 {
9131   tree result;
9132
9133   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9134
9135   /* Try to default capture 'this' if we can.  */
9136   if (!this_capture
9137       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
9138     {
9139       tree containing_function = TYPE_CONTEXT (LAMBDA_EXPR_CLOSURE (lambda));
9140       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
9141       tree init = NULL_TREE;
9142
9143       /* If we are in a lambda function, we can move out until we hit:
9144            1. a non-lambda function,
9145            2. a lambda function capturing 'this', or
9146            3. a non-default capturing lambda function.  */
9147       while (LAMBDA_FUNCTION_P (containing_function))
9148         {
9149           tree lambda
9150             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
9151
9152           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
9153             {
9154               /* An outer lambda has already captured 'this'.  */
9155               init = LAMBDA_EXPR_THIS_CAPTURE (lambda);
9156               break;
9157             }
9158
9159           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
9160             /* An outer lambda won't let us capture 'this'.  */
9161             break;
9162
9163           lambda_stack = tree_cons (NULL_TREE,
9164                                     lambda,
9165                                     lambda_stack);
9166
9167           containing_function = decl_function_context (containing_function);
9168         }
9169
9170       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
9171           && !LAMBDA_FUNCTION_P (containing_function))
9172         /* First parameter is 'this'.  */
9173         init = DECL_ARGUMENTS (containing_function);
9174
9175       if (init)
9176         this_capture = add_default_capture (lambda_stack,
9177                                             /*id=*/this_identifier,
9178                                             init);
9179     }
9180
9181   if (!this_capture)
9182     {
9183       error ("%<this%> was not captured for this lambda function");
9184       result = error_mark_node;
9185     }
9186   else
9187     {
9188       /* To make sure that current_class_ref is for the lambda.  */
9189       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref))
9190                   == LAMBDA_EXPR_CLOSURE (lambda));
9191
9192       result = this_capture;
9193
9194       /* If 'this' is captured, each use of 'this' is transformed into an
9195          access to the corresponding unnamed data member of the closure
9196          type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
9197          ensures that the transformed expression is an rvalue. ] */
9198       result = rvalue (result);
9199     }
9200
9201   return result;
9202 }
9203
9204 /* Returns the method basetype of the innermost non-lambda function, or
9205    NULL_TREE if none.  */
9206
9207 tree
9208 nonlambda_method_basetype (void)
9209 {
9210   tree fn, type;
9211   if (!current_class_ref)
9212     return NULL_TREE;
9213
9214   type = current_class_type;
9215   if (!LAMBDA_TYPE_P (type))
9216     return type;
9217
9218   /* Find the nearest enclosing non-lambda function.  */
9219   fn = TYPE_NAME (type);
9220   do
9221     fn = decl_function_context (fn);
9222   while (fn && LAMBDA_FUNCTION_P (fn));
9223
9224   if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9225     return NULL_TREE;
9226
9227   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
9228 }
9229
9230 /* If the closure TYPE has a static op(), also add a conversion to function
9231    pointer.  */
9232
9233 void
9234 maybe_add_lambda_conv_op (tree type)
9235 {
9236   bool nested = (current_function_decl != NULL_TREE);
9237   tree callop = lambda_function (type);
9238   tree rettype, name, fntype, fn, body, compound_stmt;
9239   tree thistype, stattype, statfn, convfn, call, arg;
9240   VEC (tree, gc) *argvec;
9241
9242   if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
9243     return;
9244
9245   if (processing_template_decl)
9246     return;
9247
9248   stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
9249                                   FUNCTION_ARG_CHAIN (callop));
9250
9251   /* First build up the conversion op.  */
9252
9253   rettype = build_pointer_type (stattype);
9254   name = mangle_conv_op_name_for_type (rettype);
9255   thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
9256   fntype = build_method_type_directly (thistype, rettype, void_list_node);
9257   fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
9258   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
9259
9260   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
9261       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
9262     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
9263
9264   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
9265   grokclassfn (type, fn, NO_SPECIAL);
9266   set_linkage_according_to_type (type, fn);
9267   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
9268   DECL_IN_AGGR_P (fn) = 1;
9269   DECL_ARTIFICIAL (fn) = 1;
9270   DECL_NOT_REALLY_EXTERN (fn) = 1;
9271   DECL_DECLARED_INLINE_P (fn) = 1;
9272   DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
9273   if (nested)
9274     DECL_INTERFACE_KNOWN (fn) = 1;
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   if (nested)
9306     DECL_INTERFACE_KNOWN (fn) = 1;
9307
9308   add_method (type, fn, NULL_TREE);
9309
9310   if (nested)
9311     push_function_context ();
9312   else
9313     /* Still increment function_depth so that we don't GC in the
9314        middle of an expression.  */
9315     ++function_depth;
9316
9317   /* Generate the body of the thunk.  */
9318
9319   start_preparsed_function (statfn, NULL_TREE,
9320                             SF_PRE_PARSED | SF_INCLASS_INLINE);
9321   if (DECL_ONE_ONLY (statfn))
9322     {
9323       /* Put the thunk in the same comdat group as the call op.  */
9324       cgraph_add_to_same_comdat_group (cgraph_get_create_node (statfn),
9325                                        cgraph_get_create_node (callop));
9326     }
9327   body = begin_function_body ();
9328   compound_stmt = begin_compound_stmt (0);
9329
9330   arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
9331                 null_pointer_node);
9332   argvec = make_tree_vector ();
9333   VEC_quick_push (tree, argvec, arg);
9334   for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
9335     {
9336       mark_exp_read (arg);
9337       VEC_safe_push (tree, gc, argvec, arg);
9338     }
9339   call = build_call_a (callop, VEC_length (tree, argvec),
9340                        VEC_address (tree, argvec));
9341   CALL_FROM_THUNK_P (call) = 1;
9342   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
9343     call = build_cplus_new (TREE_TYPE (call), call, tf_warning_or_error);
9344   call = convert_from_reference (call);
9345   finish_return_stmt (call);
9346
9347   finish_compound_stmt (compound_stmt);
9348   finish_function_body (body);
9349
9350   expand_or_defer_fn (finish_function (2));
9351
9352   /* Generate the body of the conversion op.  */
9353
9354   start_preparsed_function (convfn, NULL_TREE,
9355                             SF_PRE_PARSED | SF_INCLASS_INLINE);
9356   body = begin_function_body ();
9357   compound_stmt = begin_compound_stmt (0);
9358
9359   finish_return_stmt (decay_conversion (statfn));
9360
9361   finish_compound_stmt (compound_stmt);
9362   finish_function_body (body);
9363
9364   expand_or_defer_fn (finish_function (2));
9365
9366   if (nested)
9367     pop_function_context ();
9368   else
9369     --function_depth;
9370 }
9371
9372 /* Returns true iff VAL is a lambda-related declaration which should
9373    be ignored by unqualified lookup.  */
9374
9375 bool
9376 is_lambda_ignored_entity (tree val)
9377 {
9378   /* In unevaluated context, look past normal capture proxies.  */
9379   if (cp_unevaluated_operand && is_normal_capture_proxy (val))
9380     return true;
9381
9382   /* Always ignore lambda fields, their names are only for debugging.  */
9383   if (TREE_CODE (val) == FIELD_DECL
9384       && CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (val)))
9385     return true;
9386
9387   /* None of the lookups that use qualify_lookup want the op() from the
9388      lambda; they want the one from the enclosing class.  */
9389   if (TREE_CODE (val) == FUNCTION_DECL && LAMBDA_FUNCTION_P (val))
9390     return true;
9391
9392   return false;
9393 }
9394
9395 #include "gt-cp-semantics.h"