OSDN Git Service

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