OSDN Git Service

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