OSDN Git Service

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