OSDN Git Service

PR c++/49369
[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 static tree thisify_lambda_field (tree);
58
59
60 /* Deferred Access Checking Overview
61    ---------------------------------
62
63    Most C++ expressions and declarations require access checking
64    to be performed during parsing.  However, in several cases,
65    this has to be treated differently.
66
67    For member declarations, access checking has to be deferred
68    until more information about the declaration is known.  For
69    example:
70
71      class A {
72          typedef int X;
73        public:
74          X f();
75      };
76
77      A::X A::f();
78      A::X g();
79
80    When we are parsing the function return type `A::X', we don't
81    really know if this is allowed until we parse the function name.
82
83    Furthermore, some contexts require that access checking is
84    never performed at all.  These include class heads, and template
85    instantiations.
86
87    Typical use of access checking functions is described here:
88
89    1. When we enter a context that requires certain access checking
90       mode, the function `push_deferring_access_checks' is called with
91       DEFERRING argument specifying the desired mode.  Access checking
92       may be performed immediately (dk_no_deferred), deferred
93       (dk_deferred), or not performed (dk_no_check).
94
95    2. When a declaration such as a type, or a variable, is encountered,
96       the function `perform_or_defer_access_check' is called.  It
97       maintains a VEC of all deferred checks.
98
99    3. The global `current_class_type' or `current_function_decl' is then
100       setup by the parser.  `enforce_access' relies on these information
101       to check access.
102
103    4. Upon exiting the context mentioned in step 1,
104       `perform_deferred_access_checks' is called to check all declaration
105       stored in the VEC. `pop_deferring_access_checks' is then
106       called to restore the previous access checking mode.
107
108       In case of parsing error, we simply call `pop_deferring_access_checks'
109       without `perform_deferred_access_checks'.  */
110
111 typedef struct GTY(()) deferred_access {
112   /* A VEC representing name-lookups for which we have deferred
113      checking access controls.  We cannot check the accessibility of
114      names used in a decl-specifier-seq until we know what is being
115      declared because code like:
116
117        class A {
118          class B {};
119          B* f();
120        }
121
122        A::B* A::f() { return 0; }
123
124      is valid, even though `A::B' is not generally accessible.  */
125   VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
126
127   /* The current mode of access checks.  */
128   enum deferring_kind deferring_access_checks_kind;
129
130 } deferred_access;
131 DEF_VEC_O (deferred_access);
132 DEF_VEC_ALLOC_O (deferred_access,gc);
133
134 /* Data for deferred access checking.  */
135 static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
136 static GTY(()) unsigned deferred_access_no_check;
137
138 /* Save the current deferred access states and start deferred
139    access checking iff DEFER_P is true.  */
140
141 void
142 push_deferring_access_checks (deferring_kind deferring)
143 {
144   /* For context like template instantiation, access checking
145      disabling applies to all nested context.  */
146   if (deferred_access_no_check || deferring == dk_no_check)
147     deferred_access_no_check++;
148   else
149     {
150       deferred_access *ptr;
151
152       ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
153       ptr->deferred_access_checks = NULL;
154       ptr->deferring_access_checks_kind = deferring;
155     }
156 }
157
158 /* Resume deferring access checks again after we stopped doing
159    this previously.  */
160
161 void
162 resume_deferring_access_checks (void)
163 {
164   if (!deferred_access_no_check)
165     VEC_last (deferred_access, deferred_access_stack)
166       ->deferring_access_checks_kind = dk_deferred;
167 }
168
169 /* Stop deferring access checks.  */
170
171 void
172 stop_deferring_access_checks (void)
173 {
174   if (!deferred_access_no_check)
175     VEC_last (deferred_access, deferred_access_stack)
176       ->deferring_access_checks_kind = dk_no_deferred;
177 }
178
179 /* Discard the current deferred access checks and restore the
180    previous states.  */
181
182 void
183 pop_deferring_access_checks (void)
184 {
185   if (deferred_access_no_check)
186     deferred_access_no_check--;
187   else
188     VEC_pop (deferred_access, deferred_access_stack);
189 }
190
191 /* Returns a TREE_LIST representing the deferred checks.
192    The TREE_PURPOSE of each node is the type through which the
193    access occurred; the TREE_VALUE is the declaration named.
194    */
195
196 VEC (deferred_access_check,gc)*
197 get_deferred_access_checks (void)
198 {
199   if (deferred_access_no_check)
200     return NULL;
201   else
202     return (VEC_last (deferred_access, deferred_access_stack)
203             ->deferred_access_checks);
204 }
205
206 /* Take current deferred checks and combine with the
207    previous states if we also defer checks previously.
208    Otherwise perform checks now.  */
209
210 void
211 pop_to_parent_deferring_access_checks (void)
212 {
213   if (deferred_access_no_check)
214     deferred_access_no_check--;
215   else
216     {
217       VEC (deferred_access_check,gc) *checks;
218       deferred_access *ptr;
219
220       checks = (VEC_last (deferred_access, deferred_access_stack)
221                 ->deferred_access_checks);
222
223       VEC_pop (deferred_access, deferred_access_stack);
224       ptr = VEC_last (deferred_access, deferred_access_stack);
225       if (ptr->deferring_access_checks_kind == dk_no_deferred)
226         {
227           /* Check access.  */
228           perform_access_checks (checks);
229         }
230       else
231         {
232           /* Merge with parent.  */
233           int i, j;
234           deferred_access_check *chk, *probe;
235
236           FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
237             {
238               FOR_EACH_VEC_ELT (deferred_access_check,
239                                 ptr->deferred_access_checks, j, probe)
240                 {
241                   if (probe->binfo == chk->binfo &&
242                       probe->decl == chk->decl &&
243                       probe->diag_decl == chk->diag_decl)
244                     goto found;
245                 }
246               /* Insert into parent's checks.  */
247               VEC_safe_push (deferred_access_check, gc,
248                              ptr->deferred_access_checks, chk);
249             found:;
250             }
251         }
252     }
253 }
254
255 /* Perform the access checks in CHECKS.  The TREE_PURPOSE of each node
256    is the BINFO indicating the qualifying scope used to access the
257    DECL node stored in the TREE_VALUE of the node.  */
258
259 void
260 perform_access_checks (VEC (deferred_access_check,gc)* checks)
261 {
262   int i;
263   deferred_access_check *chk;
264
265   if (!checks)
266     return;
267
268   FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
269     enforce_access (chk->binfo, chk->decl, chk->diag_decl);
270 }
271
272 /* Perform the deferred access checks.
273
274    After performing the checks, we still have to keep the list
275    `deferred_access_stack->deferred_access_checks' since we may want
276    to check access for them again later in a different context.
277    For example:
278
279      class A {
280        typedef int X;
281        static X a;
282      };
283      A::X A::a, x;      // No error for `A::a', error for `x'
284
285    We have to perform deferred access of `A::X', first with `A::a',
286    next with `x'.  */
287
288 void
289 perform_deferred_access_checks (void)
290 {
291   perform_access_checks (get_deferred_access_checks ());
292 }
293
294 /* Defer checking the accessibility of DECL, when looked up in
295    BINFO. DIAG_DECL is the declaration to use to print diagnostics.  */
296
297 void
298 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
299 {
300   int i;
301   deferred_access *ptr;
302   deferred_access_check *chk;
303   deferred_access_check *new_access;
304
305
306   /* Exit if we are in a context that no access checking is performed.
307      */
308   if (deferred_access_no_check)
309     return;
310
311   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
312
313   ptr = VEC_last (deferred_access, deferred_access_stack);
314
315   /* If we are not supposed to defer access checks, just check now.  */
316   if (ptr->deferring_access_checks_kind == dk_no_deferred)
317     {
318       enforce_access (binfo, decl, diag_decl);
319       return;
320     }
321
322   /* See if we are already going to perform this check.  */
323   FOR_EACH_VEC_ELT  (deferred_access_check,
324                      ptr->deferred_access_checks, i, chk)
325     {
326       if (chk->decl == decl && chk->binfo == binfo &&
327           chk->diag_decl == diag_decl)
328         {
329           return;
330         }
331     }
332   /* If not, record the check.  */
333   new_access =
334     VEC_safe_push (deferred_access_check, gc,
335                    ptr->deferred_access_checks, 0);
336   new_access->binfo = binfo;
337   new_access->decl = decl;
338   new_access->diag_decl = diag_decl;
339 }
340
341 /* Used by build_over_call in LOOKUP_SPECULATIVE mode: return whether DECL
342    is accessible in BINFO, and possibly complain if not.  If we're not
343    checking access, everything is accessible.  */
344
345 bool
346 speculative_access_check (tree binfo, tree decl, tree diag_decl,
347                           bool complain)
348 {
349   if (deferred_access_no_check)
350     return true;
351
352   /* If we're checking for implicit delete, we don't want access
353      control errors.  */
354   if (!accessible_p (binfo, decl, true))
355     {
356       /* Unless we're under maybe_explain_implicit_delete.  */
357       if (complain)
358         enforce_access (binfo, decl, diag_decl);
359       return false;
360     }
361
362   return true;
363 }
364
365 /* Returns nonzero if the current statement is a full expression,
366    i.e. temporaries created during that statement should be destroyed
367    at the end of the statement.  */
368
369 int
370 stmts_are_full_exprs_p (void)
371 {
372   return current_stmt_tree ()->stmts_are_full_exprs_p;
373 }
374
375 /* T is a statement.  Add it to the statement-tree.  This is the C++
376    version.  The C/ObjC frontends have a slightly different version of
377    this function.  */
378
379 tree
380 add_stmt (tree t)
381 {
382   enum tree_code code = TREE_CODE (t);
383
384   if (EXPR_P (t) && code != LABEL_EXPR)
385     {
386       if (!EXPR_HAS_LOCATION (t))
387         SET_EXPR_LOCATION (t, input_location);
388
389       /* When we expand a statement-tree, we must know whether or not the
390          statements are full-expressions.  We record that fact here.  */
391       STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
392     }
393
394   /* Add T to the statement-tree.  Non-side-effect statements need to be
395      recorded during statement expressions.  */
396   gcc_checking_assert (!VEC_empty (tree, stmt_list_stack));
397   append_to_statement_list_force (t, &cur_stmt_list);
398
399   return t;
400 }
401
402 /* Returns the stmt_tree to which statements are currently being added.  */
403
404 stmt_tree
405 current_stmt_tree (void)
406 {
407   return (cfun
408           ? &cfun->language->base.x_stmt_tree
409           : &scope_chain->x_stmt_tree);
410 }
411
412 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR.  */
413
414 static tree
415 maybe_cleanup_point_expr (tree expr)
416 {
417   if (!processing_template_decl && stmts_are_full_exprs_p ())
418     expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
419   return expr;
420 }
421
422 /* Like maybe_cleanup_point_expr except have the type of the new expression be
423    void so we don't need to create a temporary variable to hold the inner
424    expression.  The reason why we do this is because the original type might be
425    an aggregate and we cannot create a temporary variable for that type.  */
426
427 static tree
428 maybe_cleanup_point_expr_void (tree expr)
429 {
430   if (!processing_template_decl && stmts_are_full_exprs_p ())
431     expr = fold_build_cleanup_point_expr (void_type_node, expr);
432   return expr;
433 }
434
435
436
437 /* Create a declaration statement for the declaration given by the DECL.  */
438
439 void
440 add_decl_expr (tree decl)
441 {
442   tree r = build_stmt (input_location, DECL_EXPR, decl);
443   if (DECL_INITIAL (decl)
444       || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
445     r = maybe_cleanup_point_expr_void (r);
446   add_stmt (r);
447 }
448
449 /* Finish a scope.  */
450
451 tree
452 do_poplevel (tree stmt_list)
453 {
454   tree block = NULL;
455
456   if (stmts_are_full_exprs_p ())
457     block = poplevel (kept_level_p (), 1, 0);
458
459   stmt_list = pop_stmt_list (stmt_list);
460
461   if (!processing_template_decl)
462     {
463       stmt_list = c_build_bind_expr (input_location, block, stmt_list);
464       /* ??? See c_end_compound_stmt re statement expressions.  */
465     }
466
467   return stmt_list;
468 }
469
470 /* Begin a new scope.  */
471
472 static tree
473 do_pushlevel (scope_kind sk)
474 {
475   tree ret = push_stmt_list ();
476   if (stmts_are_full_exprs_p ())
477     begin_scope (sk, NULL);
478   return ret;
479 }
480
481 /* Queue a cleanup.  CLEANUP is an expression/statement to be executed
482    when the current scope is exited.  EH_ONLY is true when this is not
483    meant to apply to normal control flow transfer.  */
484
485 void
486 push_cleanup (tree decl, tree cleanup, bool eh_only)
487 {
488   tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
489   CLEANUP_EH_ONLY (stmt) = eh_only;
490   add_stmt (stmt);
491   CLEANUP_BODY (stmt) = push_stmt_list ();
492 }
493
494 /* Begin a conditional that might contain a declaration.  When generating
495    normal code, we want the declaration to appear before the statement
496    containing the conditional.  When generating template code, we want the
497    conditional to be rendered as the raw DECL_EXPR.  */
498
499 static void
500 begin_cond (tree *cond_p)
501 {
502   if (processing_template_decl)
503     *cond_p = push_stmt_list ();
504 }
505
506 /* Finish such a conditional.  */
507
508 static void
509 finish_cond (tree *cond_p, tree expr)
510 {
511   if (processing_template_decl)
512     {
513       tree cond = pop_stmt_list (*cond_p);
514       if (TREE_CODE (cond) == DECL_EXPR)
515         expr = cond;
516
517       if (check_for_bare_parameter_packs (expr))
518         *cond_p = error_mark_node;
519     }
520   *cond_p = expr;
521 }
522
523 /* If *COND_P specifies a conditional with a declaration, transform the
524    loop such that
525             while (A x = 42) { }
526             for (; A x = 42;) { }
527    becomes
528             while (true) { A x = 42; if (!x) break; }
529             for (;;) { A x = 42; if (!x) break; }
530    The statement list for BODY will be empty if the conditional did
531    not declare anything.  */
532
533 static void
534 simplify_loop_decl_cond (tree *cond_p, tree body)
535 {
536   tree cond, if_stmt;
537
538   if (!TREE_SIDE_EFFECTS (body))
539     return;
540
541   cond = *cond_p;
542   *cond_p = boolean_true_node;
543
544   if_stmt = begin_if_stmt ();
545   cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
546   finish_if_stmt_cond (cond, if_stmt);
547   finish_break_stmt ();
548   finish_then_clause (if_stmt);
549   finish_if_stmt (if_stmt);
550 }
551
552 /* Finish a goto-statement.  */
553
554 tree
555 finish_goto_stmt (tree destination)
556 {
557   if (TREE_CODE (destination) == IDENTIFIER_NODE)
558     destination = lookup_label (destination);
559
560   /* We warn about unused labels with -Wunused.  That means we have to
561      mark the used labels as used.  */
562   if (TREE_CODE (destination) == LABEL_DECL)
563     TREE_USED (destination) = 1;
564   else
565     {
566       destination = mark_rvalue_use (destination);
567       if (!processing_template_decl)
568         {
569           destination = cp_convert (ptr_type_node, destination);
570           if (error_operand_p (destination))
571             return NULL_TREE;
572         }
573     }
574
575   check_goto (destination);
576
577   return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
578 }
579
580 /* COND is the condition-expression for an if, while, etc.,
581    statement.  Convert it to a boolean value, if appropriate.
582    In addition, verify sequence points if -Wsequence-point is enabled.  */
583
584 static tree
585 maybe_convert_cond (tree cond)
586 {
587   /* Empty conditions remain empty.  */
588   if (!cond)
589     return NULL_TREE;
590
591   /* Wait until we instantiate templates before doing conversion.  */
592   if (processing_template_decl)
593     return cond;
594
595   if (warn_sequence_point)
596     verify_sequence_points (cond);
597
598   /* Do the conversion.  */
599   cond = convert_from_reference (cond);
600
601   if (TREE_CODE (cond) == MODIFY_EXPR
602       && !TREE_NO_WARNING (cond)
603       && warn_parentheses)
604     {
605       warning (OPT_Wparentheses,
606                "suggest parentheses around assignment used as truth value");
607       TREE_NO_WARNING (cond) = 1;
608     }
609
610   return condition_conversion (cond);
611 }
612
613 /* Finish an expression-statement, whose EXPRESSION is as indicated.  */
614
615 tree
616 finish_expr_stmt (tree expr)
617 {
618   tree r = NULL_TREE;
619
620   if (expr != NULL_TREE)
621     {
622       if (!processing_template_decl)
623         {
624           if (warn_sequence_point)
625             verify_sequence_points (expr);
626           expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
627         }
628       else if (!type_dependent_expression_p (expr))
629         convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT, 
630                          tf_warning_or_error);
631
632       if (check_for_bare_parameter_packs (expr))
633         expr = error_mark_node;
634
635       /* Simplification of inner statement expressions, compound exprs,
636          etc can result in us already having an EXPR_STMT.  */
637       if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
638         {
639           if (TREE_CODE (expr) != EXPR_STMT)
640             expr = build_stmt (input_location, EXPR_STMT, expr);
641           expr = maybe_cleanup_point_expr_void (expr);
642         }
643
644       r = add_stmt (expr);
645     }
646
647   finish_stmt ();
648
649   return r;
650 }
651
652
653 /* Begin an if-statement.  Returns a newly created IF_STMT if
654    appropriate.  */
655
656 tree
657 begin_if_stmt (void)
658 {
659   tree r, scope;
660   scope = do_pushlevel (sk_cond);
661   r = build_stmt (input_location, IF_STMT, NULL_TREE,
662                   NULL_TREE, NULL_TREE, scope);
663   begin_cond (&IF_COND (r));
664   return r;
665 }
666
667 /* Process the COND of an if-statement, which may be given by
668    IF_STMT.  */
669
670 void
671 finish_if_stmt_cond (tree cond, tree if_stmt)
672 {
673   finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
674   add_stmt (if_stmt);
675   THEN_CLAUSE (if_stmt) = push_stmt_list ();
676 }
677
678 /* Finish the then-clause of an if-statement, which may be given by
679    IF_STMT.  */
680
681 tree
682 finish_then_clause (tree if_stmt)
683 {
684   THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
685   return if_stmt;
686 }
687
688 /* Begin the else-clause of an if-statement.  */
689
690 void
691 begin_else_clause (tree if_stmt)
692 {
693   ELSE_CLAUSE (if_stmt) = push_stmt_list ();
694 }
695
696 /* Finish the else-clause of an if-statement, which may be given by
697    IF_STMT.  */
698
699 void
700 finish_else_clause (tree if_stmt)
701 {
702   ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
703 }
704
705 /* Finish an if-statement.  */
706
707 void
708 finish_if_stmt (tree if_stmt)
709 {
710   tree scope = IF_SCOPE (if_stmt);
711   IF_SCOPE (if_stmt) = NULL;
712   add_stmt (do_poplevel (scope));
713   finish_stmt ();
714 }
715
716 /* Begin a while-statement.  Returns a newly created WHILE_STMT if
717    appropriate.  */
718
719 tree
720 begin_while_stmt (void)
721 {
722   tree r;
723   r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
724   add_stmt (r);
725   WHILE_BODY (r) = do_pushlevel (sk_block);
726   begin_cond (&WHILE_COND (r));
727   return r;
728 }
729
730 /* Process the COND of a while-statement, which may be given by
731    WHILE_STMT.  */
732
733 void
734 finish_while_stmt_cond (tree cond, tree while_stmt)
735 {
736   finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
737   simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
738 }
739
740 /* Finish a while-statement, which may be given by WHILE_STMT.  */
741
742 void
743 finish_while_stmt (tree while_stmt)
744 {
745   WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
746   finish_stmt ();
747 }
748
749 /* Begin a do-statement.  Returns a newly created DO_STMT if
750    appropriate.  */
751
752 tree
753 begin_do_stmt (void)
754 {
755   tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
756   add_stmt (r);
757   DO_BODY (r) = push_stmt_list ();
758   return r;
759 }
760
761 /* Finish the body of a do-statement, which may be given by DO_STMT.  */
762
763 void
764 finish_do_body (tree do_stmt)
765 {
766   tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
767
768   if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
769     body = STATEMENT_LIST_TAIL (body)->stmt;
770
771   if (IS_EMPTY_STMT (body))
772     warning (OPT_Wempty_body,
773             "suggest explicit braces around empty body in %<do%> statement");
774 }
775
776 /* Finish a do-statement, which may be given by DO_STMT, and whose
777    COND is as indicated.  */
778
779 void
780 finish_do_stmt (tree cond, tree do_stmt)
781 {
782   cond = maybe_convert_cond (cond);
783   DO_COND (do_stmt) = cond;
784   finish_stmt ();
785 }
786
787 /* Finish a return-statement.  The EXPRESSION returned, if any, is as
788    indicated.  */
789
790 tree
791 finish_return_stmt (tree expr)
792 {
793   tree r;
794   bool no_warning;
795
796   expr = check_return_expr (expr, &no_warning);
797
798   if (flag_openmp && !check_omp_return ())
799     return error_mark_node;
800   if (!processing_template_decl)
801     {
802       if (warn_sequence_point)
803         verify_sequence_points (expr);
804       
805       if (DECL_DESTRUCTOR_P (current_function_decl)
806           || (DECL_CONSTRUCTOR_P (current_function_decl)
807               && targetm.cxx.cdtor_returns_this ()))
808         {
809           /* Similarly, all destructors must run destructors for
810              base-classes before returning.  So, all returns in a
811              destructor get sent to the DTOR_LABEL; finish_function emits
812              code to return a value there.  */
813           return finish_goto_stmt (cdtor_label);
814         }
815     }
816
817   r = build_stmt (input_location, RETURN_EXPR, expr);
818   TREE_NO_WARNING (r) |= no_warning;
819   r = maybe_cleanup_point_expr_void (r);
820   r = add_stmt (r);
821   finish_stmt ();
822
823   return r;
824 }
825
826 /* Begin the scope of a for-statement or a range-for-statement.
827    Both the returned trees are to be used in a call to
828    begin_for_stmt or begin_range_for_stmt.  */
829
830 tree
831 begin_for_scope (tree *init)
832 {
833   tree scope = NULL_TREE;
834   if (flag_new_for_scope > 0)
835     scope = do_pushlevel (sk_for);
836
837   if (processing_template_decl)
838     *init = push_stmt_list ();
839   else
840     *init = NULL_TREE;
841
842   return scope;
843 }
844
845 /* Begin a for-statement.  Returns a new FOR_STMT.
846    SCOPE and INIT should be the return of begin_for_scope,
847    or both NULL_TREE  */
848
849 tree
850 begin_for_stmt (tree scope, tree init)
851 {
852   tree r;
853
854   r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
855                   NULL_TREE, NULL_TREE, NULL_TREE);
856
857   if (scope == NULL_TREE)
858     {
859       gcc_assert (!init || !(flag_new_for_scope > 0));
860       if (!init)
861         scope = begin_for_scope (&init);
862     }
863   FOR_INIT_STMT (r) = init;
864   FOR_SCOPE (r) = scope;
865
866   return r;
867 }
868
869 /* Finish the for-init-statement of a for-statement, which may be
870    given by FOR_STMT.  */
871
872 void
873 finish_for_init_stmt (tree for_stmt)
874 {
875   if (processing_template_decl)
876     FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
877   add_stmt (for_stmt);
878   FOR_BODY (for_stmt) = do_pushlevel (sk_block);
879   begin_cond (&FOR_COND (for_stmt));
880 }
881
882 /* Finish the COND of a for-statement, which may be given by
883    FOR_STMT.  */
884
885 void
886 finish_for_cond (tree cond, tree for_stmt)
887 {
888   finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
889   simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
890 }
891
892 /* Finish the increment-EXPRESSION in a for-statement, which may be
893    given by FOR_STMT.  */
894
895 void
896 finish_for_expr (tree expr, tree for_stmt)
897 {
898   if (!expr)
899     return;
900   /* If EXPR is an overloaded function, issue an error; there is no
901      context available to use to perform overload resolution.  */
902   if (type_unknown_p (expr))
903     {
904       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
905       expr = error_mark_node;
906     }
907   if (!processing_template_decl)
908     {
909       if (warn_sequence_point)
910         verify_sequence_points (expr);
911       expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
912                               tf_warning_or_error);
913     }
914   else if (!type_dependent_expression_p (expr))
915     convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
916                      tf_warning_or_error);
917   expr = maybe_cleanup_point_expr_void (expr);
918   if (check_for_bare_parameter_packs (expr))
919     expr = error_mark_node;
920   FOR_EXPR (for_stmt) = expr;
921 }
922
923 /* Finish the body of a for-statement, which may be given by
924    FOR_STMT.  The increment-EXPR for the loop must be
925    provided.
926    It can also finish RANGE_FOR_STMT. */
927
928 void
929 finish_for_stmt (tree for_stmt)
930 {
931   if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
932     RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
933   else
934     FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
935
936   /* Pop the scope for the body of the loop.  */
937   if (flag_new_for_scope > 0)
938     {
939       tree scope;
940       tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT
941                          ? &RANGE_FOR_SCOPE (for_stmt)
942                          : &FOR_SCOPE (for_stmt));
943       scope = *scope_ptr;
944       *scope_ptr = NULL;
945       add_stmt (do_poplevel (scope));
946     }
947
948   finish_stmt ();
949 }
950
951 /* Begin a range-for-statement.  Returns a new RANGE_FOR_STMT.
952    SCOPE and INIT should be the return of begin_for_scope,
953    or both NULL_TREE  .
954    To finish it call finish_for_stmt(). */
955
956 tree
957 begin_range_for_stmt (tree scope, tree init)
958 {
959   tree r;
960
961   r = build_stmt (input_location, RANGE_FOR_STMT,
962                   NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
963
964   if (scope == NULL_TREE)
965     {
966       gcc_assert (!init || !(flag_new_for_scope > 0));
967       if (!init)
968         scope = begin_for_scope (&init);
969     }
970
971   /* RANGE_FOR_STMTs do not use nor save the init tree, so we
972      pop it now.  */
973   if (init)
974     pop_stmt_list (init);
975   RANGE_FOR_SCOPE (r) = scope;
976
977   return r;
978 }
979
980 /* Finish the head of a range-based for statement, which may
981    be given by RANGE_FOR_STMT. DECL must be the declaration
982    and EXPR must be the loop expression. */
983
984 void
985 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
986 {
987   RANGE_FOR_DECL (range_for_stmt) = decl;
988   RANGE_FOR_EXPR (range_for_stmt) = expr;
989   add_stmt (range_for_stmt);
990   RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
991 }
992
993 /* Finish a break-statement.  */
994
995 tree
996 finish_break_stmt (void)
997 {
998   return add_stmt (build_stmt (input_location, BREAK_STMT));
999 }
1000
1001 /* Finish a continue-statement.  */
1002
1003 tree
1004 finish_continue_stmt (void)
1005 {
1006   return add_stmt (build_stmt (input_location, CONTINUE_STMT));
1007 }
1008
1009 /* Begin a switch-statement.  Returns a new SWITCH_STMT if
1010    appropriate.  */
1011
1012 tree
1013 begin_switch_stmt (void)
1014 {
1015   tree r, scope;
1016
1017   scope = do_pushlevel (sk_cond);
1018   r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE, scope);
1019
1020   begin_cond (&SWITCH_STMT_COND (r));
1021
1022   return r;
1023 }
1024
1025 /* Finish the cond of a switch-statement.  */
1026
1027 void
1028 finish_switch_cond (tree cond, tree switch_stmt)
1029 {
1030   tree orig_type = NULL;
1031   if (!processing_template_decl)
1032     {
1033       /* Convert the condition to an integer or enumeration type.  */
1034       cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
1035       if (cond == NULL_TREE)
1036         {
1037           error ("switch quantity not an integer");
1038           cond = error_mark_node;
1039         }
1040       orig_type = TREE_TYPE (cond);
1041       if (cond != error_mark_node)
1042         {
1043           /* [stmt.switch]
1044
1045              Integral promotions are performed.  */
1046           cond = perform_integral_promotions (cond);
1047           cond = maybe_cleanup_point_expr (cond);
1048         }
1049     }
1050   if (check_for_bare_parameter_packs (cond))
1051     cond = error_mark_node;
1052   else if (!processing_template_decl && warn_sequence_point)
1053     verify_sequence_points (cond);
1054
1055   finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
1056   SWITCH_STMT_TYPE (switch_stmt) = orig_type;
1057   add_stmt (switch_stmt);
1058   push_switch (switch_stmt);
1059   SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1060 }
1061
1062 /* Finish the body of a switch-statement, which may be given by
1063    SWITCH_STMT.  The COND to switch on is indicated.  */
1064
1065 void
1066 finish_switch_stmt (tree switch_stmt)
1067 {
1068   tree scope;
1069
1070   SWITCH_STMT_BODY (switch_stmt) =
1071     pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1072   pop_switch ();
1073   finish_stmt ();
1074
1075   scope = SWITCH_STMT_SCOPE (switch_stmt);
1076   SWITCH_STMT_SCOPE (switch_stmt) = NULL;
1077   add_stmt (do_poplevel (scope));
1078 }
1079
1080 /* Begin a try-block.  Returns a newly-created TRY_BLOCK if
1081    appropriate.  */
1082
1083 tree
1084 begin_try_block (void)
1085 {
1086   tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1087   add_stmt (r);
1088   TRY_STMTS (r) = push_stmt_list ();
1089   return r;
1090 }
1091
1092 /* Likewise, for a function-try-block.  The block returned in
1093    *COMPOUND_STMT is an artificial outer scope, containing the
1094    function-try-block.  */
1095
1096 tree
1097 begin_function_try_block (tree *compound_stmt)
1098 {
1099   tree r;
1100   /* This outer scope does not exist in the C++ standard, but we need
1101      a place to put __FUNCTION__ and similar variables.  */
1102   *compound_stmt = begin_compound_stmt (0);
1103   r = begin_try_block ();
1104   FN_TRY_BLOCK_P (r) = 1;
1105   return r;
1106 }
1107
1108 /* Finish a try-block, which may be given by TRY_BLOCK.  */
1109
1110 void
1111 finish_try_block (tree try_block)
1112 {
1113   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1114   TRY_HANDLERS (try_block) = push_stmt_list ();
1115 }
1116
1117 /* Finish the body of a cleanup try-block, which may be given by
1118    TRY_BLOCK.  */
1119
1120 void
1121 finish_cleanup_try_block (tree try_block)
1122 {
1123   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1124 }
1125
1126 /* Finish an implicitly generated try-block, with a cleanup is given
1127    by CLEANUP.  */
1128
1129 void
1130 finish_cleanup (tree cleanup, tree try_block)
1131 {
1132   TRY_HANDLERS (try_block) = cleanup;
1133   CLEANUP_P (try_block) = 1;
1134 }
1135
1136 /* Likewise, for a function-try-block.  */
1137
1138 void
1139 finish_function_try_block (tree try_block)
1140 {
1141   finish_try_block (try_block);
1142   /* FIXME : something queer about CTOR_INITIALIZER somehow following
1143      the try block, but moving it inside.  */
1144   in_function_try_handler = 1;
1145 }
1146
1147 /* Finish a handler-sequence for a try-block, which may be given by
1148    TRY_BLOCK.  */
1149
1150 void
1151 finish_handler_sequence (tree try_block)
1152 {
1153   TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1154   check_handlers (TRY_HANDLERS (try_block));
1155 }
1156
1157 /* Finish the handler-seq for a function-try-block, given by
1158    TRY_BLOCK.  COMPOUND_STMT is the outer block created by
1159    begin_function_try_block.  */
1160
1161 void
1162 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1163 {
1164   in_function_try_handler = 0;
1165   finish_handler_sequence (try_block);
1166   finish_compound_stmt (compound_stmt);
1167 }
1168
1169 /* Begin a handler.  Returns a HANDLER if appropriate.  */
1170
1171 tree
1172 begin_handler (void)
1173 {
1174   tree r;
1175
1176   r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1177   add_stmt (r);
1178
1179   /* Create a binding level for the eh_info and the exception object
1180      cleanup.  */
1181   HANDLER_BODY (r) = do_pushlevel (sk_catch);
1182
1183   return r;
1184 }
1185
1186 /* Finish the handler-parameters for a handler, which may be given by
1187    HANDLER.  DECL is the declaration for the catch parameter, or NULL
1188    if this is a `catch (...)' clause.  */
1189
1190 void
1191 finish_handler_parms (tree decl, tree handler)
1192 {
1193   tree type = NULL_TREE;
1194   if (processing_template_decl)
1195     {
1196       if (decl)
1197         {
1198           decl = pushdecl (decl);
1199           decl = push_template_decl (decl);
1200           HANDLER_PARMS (handler) = decl;
1201           type = TREE_TYPE (decl);
1202         }
1203     }
1204   else
1205     type = expand_start_catch_block (decl);
1206   HANDLER_TYPE (handler) = type;
1207   if (!processing_template_decl && type)
1208     mark_used (eh_type_info (type));
1209 }
1210
1211 /* Finish a handler, which may be given by HANDLER.  The BLOCKs are
1212    the return value from the matching call to finish_handler_parms.  */
1213
1214 void
1215 finish_handler (tree handler)
1216 {
1217   if (!processing_template_decl)
1218     expand_end_catch_block ();
1219   HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1220 }
1221
1222 /* Begin a compound statement.  FLAGS contains some bits that control the
1223    behavior and context.  If BCS_NO_SCOPE is set, the compound statement
1224    does not define a scope.  If BCS_FN_BODY is set, this is the outermost
1225    block of a function.  If BCS_TRY_BLOCK is set, this is the block
1226    created on behalf of a TRY statement.  Returns a token to be passed to
1227    finish_compound_stmt.  */
1228
1229 tree
1230 begin_compound_stmt (unsigned int flags)
1231 {
1232   tree r;
1233
1234   if (flags & BCS_NO_SCOPE)
1235     {
1236       r = push_stmt_list ();
1237       STATEMENT_LIST_NO_SCOPE (r) = 1;
1238
1239       /* Normally, we try hard to keep the BLOCK for a statement-expression.
1240          But, if it's a statement-expression with a scopeless block, there's
1241          nothing to keep, and we don't want to accidentally keep a block
1242          *inside* the scopeless block.  */
1243       keep_next_level (false);
1244     }
1245   else
1246     r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1247
1248   /* When processing a template, we need to remember where the braces were,
1249      so that we can set up identical scopes when instantiating the template
1250      later.  BIND_EXPR is a handy candidate for this.
1251      Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1252      result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1253      processing templates.  */
1254   if (processing_template_decl)
1255     {
1256       r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1257       BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1258       BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1259       TREE_SIDE_EFFECTS (r) = 1;
1260     }
1261
1262   return r;
1263 }
1264
1265 /* Finish a compound-statement, which is given by STMT.  */
1266
1267 void
1268 finish_compound_stmt (tree stmt)
1269 {
1270   if (TREE_CODE (stmt) == BIND_EXPR)
1271     {
1272       tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1273       /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1274          discard the BIND_EXPR so it can be merged with the containing
1275          STATEMENT_LIST.  */
1276       if (TREE_CODE (body) == STATEMENT_LIST
1277           && STATEMENT_LIST_HEAD (body) == NULL
1278           && !BIND_EXPR_BODY_BLOCK (stmt)
1279           && !BIND_EXPR_TRY_BLOCK (stmt))
1280         stmt = body;
1281       else
1282         BIND_EXPR_BODY (stmt) = body;
1283     }
1284   else if (STATEMENT_LIST_NO_SCOPE (stmt))
1285     stmt = pop_stmt_list (stmt);
1286   else
1287     {
1288       /* Destroy any ObjC "super" receivers that may have been
1289          created.  */
1290       objc_clear_super_receiver ();
1291
1292       stmt = do_poplevel (stmt);
1293     }
1294
1295   /* ??? See c_end_compound_stmt wrt statement expressions.  */
1296   add_stmt (stmt);
1297   finish_stmt ();
1298 }
1299
1300 /* Finish an asm-statement, whose components are a STRING, some
1301    OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1302    LABELS.  Also note whether the asm-statement should be
1303    considered volatile.  */
1304
1305 tree
1306 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1307                  tree input_operands, tree clobbers, tree labels)
1308 {
1309   tree r;
1310   tree t;
1311   int ninputs = list_length (input_operands);
1312   int noutputs = list_length (output_operands);
1313
1314   if (!processing_template_decl)
1315     {
1316       const char *constraint;
1317       const char **oconstraints;
1318       bool allows_mem, allows_reg, is_inout;
1319       tree operand;
1320       int i;
1321
1322       oconstraints = XALLOCAVEC (const char *, noutputs);
1323
1324       string = resolve_asm_operand_names (string, output_operands,
1325                                           input_operands, labels);
1326
1327       for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1328         {
1329           operand = TREE_VALUE (t);
1330
1331           /* ??? Really, this should not be here.  Users should be using a
1332              proper lvalue, dammit.  But there's a long history of using
1333              casts in the output operands.  In cases like longlong.h, this
1334              becomes a primitive form of typechecking -- if the cast can be
1335              removed, then the output operand had a type of the proper width;
1336              otherwise we'll get an error.  Gross, but ...  */
1337           STRIP_NOPS (operand);
1338
1339           operand = mark_lvalue_use (operand);
1340
1341           if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1342             operand = error_mark_node;
1343
1344           if (operand != error_mark_node
1345               && (TREE_READONLY (operand)
1346                   || CP_TYPE_CONST_P (TREE_TYPE (operand))
1347                   /* Functions are not modifiable, even though they are
1348                      lvalues.  */
1349                   || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1350                   || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1351                   /* If it's an aggregate and any field is const, then it is
1352                      effectively const.  */
1353                   || (CLASS_TYPE_P (TREE_TYPE (operand))
1354                       && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1355             cxx_readonly_error (operand, lv_asm);
1356
1357           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1358           oconstraints[i] = constraint;
1359
1360           if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1361                                        &allows_mem, &allows_reg, &is_inout))
1362             {
1363               /* If the operand is going to end up in memory,
1364                  mark it addressable.  */
1365               if (!allows_reg && !cxx_mark_addressable (operand))
1366                 operand = error_mark_node;
1367             }
1368           else
1369             operand = error_mark_node;
1370
1371           TREE_VALUE (t) = operand;
1372         }
1373
1374       for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1375         {
1376           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1377           operand = decay_conversion (TREE_VALUE (t));
1378
1379           /* If the type of the operand hasn't been determined (e.g.,
1380              because it involves an overloaded function), then issue
1381              an error message.  There's no context available to
1382              resolve the overloading.  */
1383           if (TREE_TYPE (operand) == unknown_type_node)
1384             {
1385               error ("type of asm operand %qE could not be determined",
1386                      TREE_VALUE (t));
1387               operand = error_mark_node;
1388             }
1389
1390           if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1391                                       oconstraints, &allows_mem, &allows_reg))
1392             {
1393               /* If the operand is going to end up in memory,
1394                  mark it addressable.  */
1395               if (!allows_reg && allows_mem)
1396                 {
1397                   /* Strip the nops as we allow this case.  FIXME, this really
1398                      should be rejected or made deprecated.  */
1399                   STRIP_NOPS (operand);
1400                   if (!cxx_mark_addressable (operand))
1401                     operand = error_mark_node;
1402                 }
1403             }
1404           else
1405             operand = error_mark_node;
1406
1407           TREE_VALUE (t) = operand;
1408         }
1409     }
1410
1411   r = build_stmt (input_location, ASM_EXPR, string,
1412                   output_operands, input_operands,
1413                   clobbers, labels);
1414   ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1415   r = maybe_cleanup_point_expr_void (r);
1416   return add_stmt (r);
1417 }
1418
1419 /* Finish a label with the indicated NAME.  Returns the new label.  */
1420
1421 tree
1422 finish_label_stmt (tree name)
1423 {
1424   tree decl = define_label (input_location, name);
1425
1426   if (decl == error_mark_node)
1427     return error_mark_node;
1428
1429   add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1430
1431   return decl;
1432 }
1433
1434 /* Finish a series of declarations for local labels.  G++ allows users
1435    to declare "local" labels, i.e., labels with scope.  This extension
1436    is useful when writing code involving statement-expressions.  */
1437
1438 void
1439 finish_label_decl (tree name)
1440 {
1441   if (!at_function_scope_p ())
1442     {
1443       error ("__label__ declarations are only allowed in function scopes");
1444       return;
1445     }
1446
1447   add_decl_expr (declare_local_label (name));
1448 }
1449
1450 /* When DECL goes out of scope, make sure that CLEANUP is executed.  */
1451
1452 void
1453 finish_decl_cleanup (tree decl, tree cleanup)
1454 {
1455   push_cleanup (decl, cleanup, false);
1456 }
1457
1458 /* If the current scope exits with an exception, run CLEANUP.  */
1459
1460 void
1461 finish_eh_cleanup (tree cleanup)
1462 {
1463   push_cleanup (NULL, cleanup, true);
1464 }
1465
1466 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1467    order they were written by the user.  Each node is as for
1468    emit_mem_initializers.  */
1469
1470 void
1471 finish_mem_initializers (tree mem_inits)
1472 {
1473   /* Reorder the MEM_INITS so that they are in the order they appeared
1474      in the source program.  */
1475   mem_inits = nreverse (mem_inits);
1476
1477   if (processing_template_decl)
1478     {
1479       tree mem;
1480
1481       for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1482         {
1483           /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1484              check for bare parameter packs in the TREE_VALUE, because
1485              any parameter packs in the TREE_VALUE have already been
1486              bound as part of the TREE_PURPOSE.  See
1487              make_pack_expansion for more information.  */
1488           if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1489               && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1490             TREE_VALUE (mem) = error_mark_node;
1491         }
1492
1493       add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1494     }
1495   else
1496     emit_mem_initializers (mem_inits);
1497 }
1498
1499 /* Finish a parenthesized expression EXPR.  */
1500
1501 tree
1502 finish_parenthesized_expr (tree expr)
1503 {
1504   if (EXPR_P (expr))
1505     /* This inhibits warnings in c_common_truthvalue_conversion.  */
1506     TREE_NO_WARNING (expr) = 1;
1507
1508   if (TREE_CODE (expr) == OFFSET_REF)
1509     /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1510        enclosed in parentheses.  */
1511     PTRMEM_OK_P (expr) = 0;
1512
1513   if (TREE_CODE (expr) == STRING_CST)
1514     PAREN_STRING_LITERAL_P (expr) = 1;
1515
1516   return expr;
1517 }
1518
1519 /* Finish a reference to a non-static data member (DECL) that is not
1520    preceded by `.' or `->'.  */
1521
1522 tree
1523 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1524 {
1525   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1526
1527   if (!object)
1528     {
1529       tree scope = qualifying_scope;
1530       if (scope == NULL_TREE)
1531         scope = context_for_name_lookup (decl);
1532       object = maybe_dummy_object (scope, NULL);
1533     }
1534
1535   if (object == error_mark_node)
1536     return error_mark_node;
1537
1538   /* DR 613: Can use non-static data members without an associated
1539      object in sizeof/decltype/alignof.  */
1540   if (is_dummy_object (object) && cp_unevaluated_operand == 0
1541       && (!processing_template_decl || !current_class_ref))
1542     {
1543       if (current_function_decl
1544           && DECL_STATIC_FUNCTION_P (current_function_decl))
1545         error ("invalid use of member %q+D in static member function", decl);
1546       else
1547         error ("invalid use of non-static data member %q+D", decl);
1548       error ("from this location");
1549
1550       return error_mark_node;
1551     }
1552
1553   if (current_class_ptr)
1554     TREE_USED (current_class_ptr) = 1;
1555   if (processing_template_decl && !qualifying_scope)
1556     {
1557       tree type = TREE_TYPE (decl);
1558
1559       if (TREE_CODE (type) == REFERENCE_TYPE)
1560         type = TREE_TYPE (type);
1561       else
1562         {
1563           /* Set the cv qualifiers.  */
1564           int quals = (current_class_ref
1565                        ? cp_type_quals (TREE_TYPE (current_class_ref))
1566                        : TYPE_UNQUALIFIED);
1567
1568           if (DECL_MUTABLE_P (decl))
1569             quals &= ~TYPE_QUAL_CONST;
1570
1571           quals |= cp_type_quals (TREE_TYPE (decl));
1572           type = cp_build_qualified_type (type, quals);
1573         }
1574
1575       return 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 /* Returns true iff DECL is a capture field from a lambda that is not our
2833    immediate context.  */
2834
2835 static bool
2836 outer_lambda_capture_p (tree decl)
2837 {
2838   return (TREE_CODE (decl) == FIELD_DECL
2839           && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2840           && (!current_class_type
2841               || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2842 }
2843
2844 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2845    id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2846    if non-NULL, is the type or namespace used to explicitly qualify
2847    ID_EXPRESSION.  DECL is the entity to which that name has been
2848    resolved.
2849
2850    *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2851    constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2852    be set to true if this expression isn't permitted in a
2853    constant-expression, but it is otherwise not set by this function.
2854    *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2855    constant-expression, but a non-constant expression is also
2856    permissible.
2857
2858    DONE is true if this expression is a complete postfix-expression;
2859    it is false if this expression is followed by '->', '[', '(', etc.
2860    ADDRESS_P is true iff this expression is the operand of '&'.
2861    TEMPLATE_P is true iff the qualified-id was of the form
2862    "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2863    appears as a template argument.
2864
2865    If an error occurs, and it is the kind of error that might cause
2866    the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2867    is the caller's responsibility to issue the message.  *ERROR_MSG
2868    will be a string with static storage duration, so the caller need
2869    not "free" it.
2870
2871    Return an expression for the entity, after issuing appropriate
2872    diagnostics.  This function is also responsible for transforming a
2873    reference to a non-static member into a COMPONENT_REF that makes
2874    the use of "this" explicit.
2875
2876    Upon return, *IDK will be filled in appropriately.  */
2877 tree
2878 finish_id_expression (tree id_expression,
2879                       tree decl,
2880                       tree scope,
2881                       cp_id_kind *idk,
2882                       bool integral_constant_expression_p,
2883                       bool allow_non_integral_constant_expression_p,
2884                       bool *non_integral_constant_expression_p,
2885                       bool template_p,
2886                       bool done,
2887                       bool address_p,
2888                       bool template_arg_p,
2889                       const char **error_msg,
2890                       location_t location)
2891 {
2892   /* Initialize the output parameters.  */
2893   *idk = CP_ID_KIND_NONE;
2894   *error_msg = NULL;
2895
2896   if (id_expression == error_mark_node)
2897     return error_mark_node;
2898   /* If we have a template-id, then no further lookup is
2899      required.  If the template-id was for a template-class, we
2900      will sometimes have a TYPE_DECL at this point.  */
2901   else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2902            || TREE_CODE (decl) == TYPE_DECL)
2903     ;
2904   /* Look up the name.  */
2905   else
2906     {
2907       if (decl == error_mark_node)
2908         {
2909           /* Name lookup failed.  */
2910           if (scope
2911               && (!TYPE_P (scope)
2912                   || (!dependent_type_p (scope)
2913                       && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2914                            && IDENTIFIER_TYPENAME_P (id_expression)
2915                            && dependent_type_p (TREE_TYPE (id_expression))))))
2916             {
2917               /* If the qualifying type is non-dependent (and the name
2918                  does not name a conversion operator to a dependent
2919                  type), issue an error.  */
2920               qualified_name_lookup_error (scope, id_expression, decl, location);
2921               return error_mark_node;
2922             }
2923           else if (!scope)
2924             {
2925               /* It may be resolved via Koenig lookup.  */
2926               *idk = CP_ID_KIND_UNQUALIFIED;
2927               return id_expression;
2928             }
2929           else
2930             decl = id_expression;
2931         }
2932       /* If DECL is a variable that would be out of scope under
2933          ANSI/ISO rules, but in scope in the ARM, name lookup
2934          will succeed.  Issue a diagnostic here.  */
2935       else
2936         decl = check_for_out_of_scope_variable (decl);
2937
2938       /* Remember that the name was used in the definition of
2939          the current class so that we can check later to see if
2940          the meaning would have been different after the class
2941          was entirely defined.  */
2942       if (!scope && decl != error_mark_node
2943           && TREE_CODE (id_expression) == IDENTIFIER_NODE)
2944         maybe_note_name_used_in_class (id_expression, decl);
2945
2946       /* Disallow uses of local variables from containing functions, except
2947          within lambda-expressions.  */
2948       if ((outer_automatic_var_p (decl)
2949            || outer_lambda_capture_p (decl))
2950           /* It's not a use (3.2) if we're in an unevaluated context.  */
2951           && !cp_unevaluated_operand)
2952         {
2953           tree context = DECL_CONTEXT (decl);
2954           tree containing_function = current_function_decl;
2955           tree lambda_stack = NULL_TREE;
2956           tree lambda_expr = NULL_TREE;
2957           tree initializer = decl;
2958
2959           /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2960              support for an approach in which a reference to a local
2961              [constant] automatic variable in a nested class or lambda body
2962              would enter the expression as an rvalue, which would reduce
2963              the complexity of the problem"
2964
2965              FIXME update for final resolution of core issue 696.  */
2966           if (decl_constant_var_p (decl))
2967             return integral_constant_value (decl);
2968
2969           if (TYPE_P (context))
2970             {
2971               /* Implicit capture of an explicit capture.  */
2972               context = lambda_function (context);
2973               initializer = thisify_lambda_field (decl);
2974             }
2975
2976           /* If we are in a lambda function, we can move out until we hit
2977              1. the context,
2978              2. a non-lambda function, or
2979              3. a non-default capturing lambda function.  */
2980           while (context != containing_function
2981                  && LAMBDA_FUNCTION_P (containing_function))
2982             {
2983               lambda_expr = CLASSTYPE_LAMBDA_EXPR
2984                 (DECL_CONTEXT (containing_function));
2985
2986               if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2987                   == CPLD_NONE)
2988                 break;
2989
2990               lambda_stack = tree_cons (NULL_TREE,
2991                                         lambda_expr,
2992                                         lambda_stack);
2993
2994               containing_function
2995                 = decl_function_context (containing_function);
2996             }
2997
2998           if (context == containing_function)
2999             {
3000               decl = add_default_capture (lambda_stack,
3001                                           /*id=*/DECL_NAME (decl),
3002                                           initializer);
3003             }
3004           else if (lambda_expr)
3005             {
3006               error ("%qD is not captured", decl);
3007               return error_mark_node;
3008             }
3009           else
3010             {
3011               error (TREE_CODE (decl) == VAR_DECL
3012                      ? "use of %<auto%> variable from containing function"
3013                      : "use of parameter from containing function");
3014               error ("  %q+#D declared here", decl);
3015               return error_mark_node;
3016             }
3017         }
3018
3019       /* Also disallow uses of function parameters outside the function
3020          body, except inside an unevaluated context (i.e. decltype).  */
3021       if (TREE_CODE (decl) == PARM_DECL
3022           && DECL_CONTEXT (decl) == NULL_TREE
3023           && !cp_unevaluated_operand)
3024         {
3025           error ("use of parameter %qD outside function body", decl);
3026           return error_mark_node;
3027         }
3028     }
3029
3030   /* If we didn't find anything, or what we found was a type,
3031      then this wasn't really an id-expression.  */
3032   if (TREE_CODE (decl) == TEMPLATE_DECL
3033       && !DECL_FUNCTION_TEMPLATE_P (decl))
3034     {
3035       *error_msg = "missing template arguments";
3036       return error_mark_node;
3037     }
3038   else if (TREE_CODE (decl) == TYPE_DECL
3039            || TREE_CODE (decl) == NAMESPACE_DECL)
3040     {
3041       *error_msg = "expected primary-expression";
3042       return error_mark_node;
3043     }
3044
3045   /* If the name resolved to a template parameter, there is no
3046      need to look it up again later.  */
3047   if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
3048       || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3049     {
3050       tree r;
3051
3052       *idk = CP_ID_KIND_NONE;
3053       if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3054         decl = TEMPLATE_PARM_DECL (decl);
3055       r = convert_from_reference (DECL_INITIAL (decl));
3056
3057       if (integral_constant_expression_p
3058           && !dependent_type_p (TREE_TYPE (decl))
3059           && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
3060         {
3061           if (!allow_non_integral_constant_expression_p)
3062             error ("template parameter %qD of type %qT is not allowed in "
3063                    "an integral constant expression because it is not of "
3064                    "integral or enumeration type", decl, TREE_TYPE (decl));
3065           *non_integral_constant_expression_p = true;
3066         }
3067       return r;
3068     }
3069   /* Similarly, we resolve enumeration constants to their
3070      underlying values.  */
3071   else if (TREE_CODE (decl) == CONST_DECL)
3072     {
3073       *idk = CP_ID_KIND_NONE;
3074       if (!processing_template_decl)
3075         {
3076           used_types_insert (TREE_TYPE (decl));
3077           return DECL_INITIAL (decl);
3078         }
3079       return decl;
3080     }
3081   else
3082     {
3083       bool dependent_p;
3084
3085       /* If the declaration was explicitly qualified indicate
3086          that.  The semantics of `A::f(3)' are different than
3087          `f(3)' if `f' is virtual.  */
3088       *idk = (scope
3089               ? CP_ID_KIND_QUALIFIED
3090               : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3091                  ? CP_ID_KIND_TEMPLATE_ID
3092                  : CP_ID_KIND_UNQUALIFIED));
3093
3094
3095       /* [temp.dep.expr]
3096
3097          An id-expression is type-dependent if it contains an
3098          identifier that was declared with a dependent type.
3099
3100          The standard is not very specific about an id-expression that
3101          names a set of overloaded functions.  What if some of them
3102          have dependent types and some of them do not?  Presumably,
3103          such a name should be treated as a dependent name.  */
3104       /* Assume the name is not dependent.  */
3105       dependent_p = false;
3106       if (!processing_template_decl)
3107         /* No names are dependent outside a template.  */
3108         ;
3109       /* A template-id where the name of the template was not resolved
3110          is definitely dependent.  */
3111       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3112                && (TREE_CODE (TREE_OPERAND (decl, 0))
3113                    == IDENTIFIER_NODE))
3114         dependent_p = true;
3115       /* For anything except an overloaded function, just check its
3116          type.  */
3117       else if (!is_overloaded_fn (decl))
3118         dependent_p
3119           = dependent_type_p (TREE_TYPE (decl));
3120       /* For a set of overloaded functions, check each of the
3121          functions.  */
3122       else
3123         {
3124           tree fns = decl;
3125
3126           if (BASELINK_P (fns))
3127             fns = BASELINK_FUNCTIONS (fns);
3128
3129           /* For a template-id, check to see if the template
3130              arguments are dependent.  */
3131           if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3132             {
3133               tree args = TREE_OPERAND (fns, 1);
3134               dependent_p = any_dependent_template_arguments_p (args);
3135               /* The functions are those referred to by the
3136                  template-id.  */
3137               fns = TREE_OPERAND (fns, 0);
3138             }
3139
3140           /* If there are no dependent template arguments, go through
3141              the overloaded functions.  */
3142           while (fns && !dependent_p)
3143             {
3144               tree fn = OVL_CURRENT (fns);
3145
3146               /* Member functions of dependent classes are
3147                  dependent.  */
3148               if (TREE_CODE (fn) == FUNCTION_DECL
3149                   && type_dependent_expression_p (fn))
3150                 dependent_p = true;
3151               else if (TREE_CODE (fn) == TEMPLATE_DECL
3152                        && dependent_template_p (fn))
3153                 dependent_p = true;
3154
3155               fns = OVL_NEXT (fns);
3156             }
3157         }
3158
3159       /* If the name was dependent on a template parameter, we will
3160          resolve the name at instantiation time.  */
3161       if (dependent_p)
3162         {
3163           /* Create a SCOPE_REF for qualified names, if the scope is
3164              dependent.  */
3165           if (scope)
3166             {
3167               if (TYPE_P (scope))
3168                 {
3169                   if (address_p && done)
3170                     decl = finish_qualified_id_expr (scope, decl,
3171                                                      done, address_p,
3172                                                      template_p,
3173                                                      template_arg_p);
3174                   else
3175                     {
3176                       tree type = NULL_TREE;
3177                       if (DECL_P (decl) && !dependent_scope_p (scope))
3178                         type = TREE_TYPE (decl);
3179                       decl = build_qualified_name (type,
3180                                                    scope,
3181                                                    id_expression,
3182                                                    template_p);
3183                     }
3184                 }
3185               if (TREE_TYPE (decl))
3186                 decl = convert_from_reference (decl);
3187               return decl;
3188             }
3189           /* A TEMPLATE_ID already contains all the information we
3190              need.  */
3191           if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3192             return id_expression;
3193           *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3194           /* If we found a variable, then name lookup during the
3195              instantiation will always resolve to the same VAR_DECL
3196              (or an instantiation thereof).  */
3197           if (TREE_CODE (decl) == VAR_DECL
3198               || TREE_CODE (decl) == PARM_DECL)
3199             return convert_from_reference (decl);
3200           /* The same is true for FIELD_DECL, but we also need to
3201              make sure that the syntax is correct.  */
3202           else if (TREE_CODE (decl) == FIELD_DECL)
3203             {
3204               /* Since SCOPE is NULL here, this is an unqualified name.
3205                  Access checking has been performed during name lookup
3206                  already.  Turn off checking to avoid duplicate errors.  */
3207               push_deferring_access_checks (dk_no_check);
3208               decl = finish_non_static_data_member
3209                        (decl, NULL_TREE,
3210                         /*qualifying_scope=*/NULL_TREE);
3211               pop_deferring_access_checks ();
3212               return decl;
3213             }
3214           return id_expression;
3215         }
3216
3217       if (TREE_CODE (decl) == NAMESPACE_DECL)
3218         {
3219           error ("use of namespace %qD as expression", decl);
3220           return error_mark_node;
3221         }
3222       else if (DECL_CLASS_TEMPLATE_P (decl))
3223         {
3224           error ("use of class template %qT as expression", decl);
3225           return error_mark_node;
3226         }
3227       else if (TREE_CODE (decl) == TREE_LIST)
3228         {
3229           /* Ambiguous reference to base members.  */
3230           error ("request for member %qD is ambiguous in "
3231                  "multiple inheritance lattice", id_expression);
3232           print_candidates (decl);
3233           return error_mark_node;
3234         }
3235
3236       /* Mark variable-like entities as used.  Functions are similarly
3237          marked either below or after overload resolution.  */
3238       if (TREE_CODE (decl) == VAR_DECL
3239           || TREE_CODE (decl) == PARM_DECL
3240           || TREE_CODE (decl) == RESULT_DECL)
3241         mark_used (decl);
3242
3243       /* Only certain kinds of names are allowed in constant
3244          expression.  Enumerators and template parameters have already
3245          been handled above.  */
3246       if (! error_operand_p (decl)
3247           && integral_constant_expression_p
3248           && ! decl_constant_var_p (decl)
3249           && ! builtin_valid_in_constant_expr_p (decl))
3250         {
3251           if (!allow_non_integral_constant_expression_p)
3252             {
3253               error ("%qD cannot appear in a constant-expression", decl);
3254               return error_mark_node;
3255             }
3256           *non_integral_constant_expression_p = true;
3257         }
3258
3259       if (scope)
3260         {
3261           decl = (adjust_result_of_qualified_name_lookup
3262                   (decl, scope, current_class_type));
3263
3264           if (TREE_CODE (decl) == FUNCTION_DECL)
3265             mark_used (decl);
3266
3267           if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3268             decl = finish_qualified_id_expr (scope,
3269                                              decl,
3270                                              done,
3271                                              address_p,
3272                                              template_p,
3273                                              template_arg_p);
3274           else
3275             {
3276               tree r = convert_from_reference (decl);
3277
3278               /* In a template, return a SCOPE_REF for most qualified-ids
3279                  so that we can check access at instantiation time.  But if
3280                  we're looking at a member of the current instantiation, we
3281                  know we have access and building up the SCOPE_REF confuses
3282                  non-type template argument handling.  */
3283               if (processing_template_decl && TYPE_P (scope)
3284                   && !currently_open_class (scope))
3285                 r = build_qualified_name (TREE_TYPE (r),
3286                                           scope, decl,
3287                                           template_p);
3288               decl = r;
3289             }
3290         }
3291       else if (TREE_CODE (decl) == FIELD_DECL)
3292         {
3293           /* Since SCOPE is NULL here, this is an unqualified name.
3294              Access checking has been performed during name lookup
3295              already.  Turn off checking to avoid duplicate errors.  */
3296           push_deferring_access_checks (dk_no_check);
3297           decl = finish_non_static_data_member (decl, NULL_TREE,
3298                                                 /*qualifying_scope=*/NULL_TREE);
3299           pop_deferring_access_checks ();
3300         }
3301       else if (is_overloaded_fn (decl))
3302         {
3303           tree first_fn;
3304
3305           first_fn = get_first_fn (decl);
3306           if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3307             first_fn = DECL_TEMPLATE_RESULT (first_fn);
3308
3309           if (!really_overloaded_fn (decl))
3310             mark_used (first_fn);
3311
3312           if (!template_arg_p
3313               && TREE_CODE (first_fn) == FUNCTION_DECL
3314               && DECL_FUNCTION_MEMBER_P (first_fn)
3315               && !shared_member_p (decl))
3316             {
3317               /* A set of member functions.  */
3318               decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3319               return finish_class_member_access_expr (decl, id_expression,
3320                                                       /*template_p=*/false,
3321                                                       tf_warning_or_error);
3322             }
3323
3324           decl = baselink_for_fns (decl);
3325         }
3326       else
3327         {
3328           if (DECL_P (decl) && DECL_NONLOCAL (decl)
3329               && DECL_CLASS_SCOPE_P (decl))
3330             {
3331               tree context = context_for_name_lookup (decl); 
3332               if (context != current_class_type)
3333                 {
3334                   tree path = currently_open_derived_class (context);
3335                   perform_or_defer_access_check (TYPE_BINFO (path),
3336                                                  decl, decl);
3337                 }
3338             }
3339
3340           decl = convert_from_reference (decl);
3341         }
3342     }
3343
3344   if (TREE_DEPRECATED (decl))
3345     warn_deprecated_use (decl, NULL_TREE);
3346
3347   return decl;
3348 }
3349
3350 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3351    use as a type-specifier.  */
3352
3353 tree
3354 finish_typeof (tree expr)
3355 {
3356   tree type;
3357
3358   if (type_dependent_expression_p (expr))
3359     {
3360       type = cxx_make_type (TYPEOF_TYPE);
3361       TYPEOF_TYPE_EXPR (type) = expr;
3362       SET_TYPE_STRUCTURAL_EQUALITY (type);
3363
3364       return type;
3365     }
3366
3367   expr = mark_type_use (expr);
3368
3369   type = unlowered_expr_type (expr);
3370
3371   if (!type || type == unknown_type_node)
3372     {
3373       error ("type of %qE is unknown", expr);
3374       return error_mark_node;
3375     }
3376
3377   return type;
3378 }
3379
3380 /* Implement the __underlying_type keyword: Return the underlying
3381    type of TYPE, suitable for use as a type-specifier.  */
3382
3383 tree
3384 finish_underlying_type (tree type)
3385 {
3386   tree underlying_type;
3387
3388   if (processing_template_decl)
3389     {
3390       underlying_type = cxx_make_type (UNDERLYING_TYPE);
3391       UNDERLYING_TYPE_TYPE (underlying_type) = type;
3392       SET_TYPE_STRUCTURAL_EQUALITY (underlying_type);
3393
3394       return underlying_type;
3395     }
3396
3397   complete_type (type);
3398
3399   if (TREE_CODE (type) != ENUMERAL_TYPE)
3400     {
3401       error ("%qE is not an enumeration type", type);
3402       return error_mark_node;
3403     }
3404
3405   underlying_type = ENUM_UNDERLYING_TYPE (type);
3406
3407   /* Fixup necessary in this case because ENUM_UNDERLYING_TYPE
3408      includes TYPE_MIN_VALUE and TYPE_MAX_VALUE information.
3409      See finish_enum_value_list for details.  */
3410   if (!ENUM_FIXED_UNDERLYING_TYPE_P (type))
3411     underlying_type
3412       = c_common_type_for_mode (TYPE_MODE (underlying_type),
3413                                 TYPE_UNSIGNED (underlying_type));
3414
3415   return underlying_type;
3416 }
3417
3418 /* Perform C++-specific checks for __builtin_offsetof before calling
3419    fold_offsetof.  */
3420
3421 tree
3422 finish_offsetof (tree expr)
3423 {
3424   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3425     {
3426       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3427               TREE_OPERAND (expr, 2));
3428       return error_mark_node;
3429     }
3430   if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3431       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3432       || TREE_TYPE (expr) == unknown_type_node)
3433     {
3434       if (TREE_CODE (expr) == COMPONENT_REF
3435           || TREE_CODE (expr) == COMPOUND_EXPR)
3436         expr = TREE_OPERAND (expr, 1);
3437       error ("cannot apply %<offsetof%> to member function %qD", expr);
3438       return error_mark_node;
3439     }
3440   if (REFERENCE_REF_P (expr))
3441     expr = TREE_OPERAND (expr, 0);
3442   return fold_offsetof (expr, NULL_TREE);
3443 }
3444
3445 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3446    function is broken out from the above for the benefit of the tree-ssa
3447    project.  */
3448
3449 void
3450 simplify_aggr_init_expr (tree *tp)
3451 {
3452   tree aggr_init_expr = *tp;
3453
3454   /* Form an appropriate CALL_EXPR.  */
3455   tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3456   tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3457   tree type = TREE_TYPE (slot);
3458
3459   tree call_expr;
3460   enum style_t { ctor, arg, pcc } style;
3461
3462   if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3463     style = ctor;
3464 #ifdef PCC_STATIC_STRUCT_RETURN
3465   else if (1)
3466     style = pcc;
3467 #endif
3468   else
3469     {
3470       gcc_assert (TREE_ADDRESSABLE (type));
3471       style = arg;
3472     }
3473
3474   call_expr = build_call_array_loc (input_location,
3475                                     TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3476                                     fn,
3477                                     aggr_init_expr_nargs (aggr_init_expr),
3478                                     AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3479   TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3480
3481   if (style == ctor)
3482     {
3483       /* Replace the first argument to the ctor with the address of the
3484          slot.  */
3485       cxx_mark_addressable (slot);
3486       CALL_EXPR_ARG (call_expr, 0) =
3487         build1 (ADDR_EXPR, build_pointer_type (type), slot);
3488     }
3489   else if (style == arg)
3490     {
3491       /* Just mark it addressable here, and leave the rest to
3492          expand_call{,_inline}.  */
3493       cxx_mark_addressable (slot);
3494       CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3495       call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3496     }
3497   else if (style == pcc)
3498     {
3499       /* If we're using the non-reentrant PCC calling convention, then we
3500          need to copy the returned value out of the static buffer into the
3501          SLOT.  */
3502       push_deferring_access_checks (dk_no_check);
3503       call_expr = build_aggr_init (slot, call_expr,
3504                                    DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3505                                    tf_warning_or_error);
3506       pop_deferring_access_checks ();
3507       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3508     }
3509
3510   if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3511     {
3512       tree init = build_zero_init (type, NULL_TREE,
3513                                    /*static_storage_p=*/false);
3514       init = build2 (INIT_EXPR, void_type_node, slot, init);
3515       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3516                           init, call_expr);
3517     }
3518
3519   *tp = call_expr;
3520 }
3521
3522 /* Emit all thunks to FN that should be emitted when FN is emitted.  */
3523
3524 void
3525 emit_associated_thunks (tree fn)
3526 {
3527   /* When we use vcall offsets, we emit thunks with the virtual
3528      functions to which they thunk. The whole point of vcall offsets
3529      is so that you can know statically the entire set of thunks that
3530      will ever be needed for a given virtual function, thereby
3531      enabling you to output all the thunks with the function itself.  */
3532   if (DECL_VIRTUAL_P (fn)
3533       /* Do not emit thunks for extern template instantiations.  */
3534       && ! DECL_REALLY_EXTERN (fn))
3535     {
3536       tree thunk;
3537
3538       for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3539         {
3540           if (!THUNK_ALIAS (thunk))
3541             {
3542               use_thunk (thunk, /*emit_p=*/1);
3543               if (DECL_RESULT_THUNK_P (thunk))
3544                 {
3545                   tree probe;
3546
3547                   for (probe = DECL_THUNKS (thunk);
3548                        probe; probe = DECL_CHAIN (probe))
3549                     use_thunk (probe, /*emit_p=*/1);
3550                 }
3551             }
3552           else
3553             gcc_assert (!DECL_THUNKS (thunk));
3554         }
3555     }
3556 }
3557
3558 /* Generate RTL for FN.  */
3559
3560 bool
3561 expand_or_defer_fn_1 (tree fn)
3562 {
3563   /* When the parser calls us after finishing the body of a template
3564      function, we don't really want to expand the body.  */
3565   if (processing_template_decl)
3566     {
3567       /* Normally, collection only occurs in rest_of_compilation.  So,
3568          if we don't collect here, we never collect junk generated
3569          during the processing of templates until we hit a
3570          non-template function.  It's not safe to do this inside a
3571          nested class, though, as the parser may have local state that
3572          is not a GC root.  */
3573       if (!function_depth)
3574         ggc_collect ();
3575       return false;
3576     }
3577
3578   gcc_assert (DECL_SAVED_TREE (fn));
3579
3580   /* If this is a constructor or destructor body, we have to clone
3581      it.  */
3582   if (maybe_clone_body (fn))
3583     {
3584       /* We don't want to process FN again, so pretend we've written
3585          it out, even though we haven't.  */
3586       TREE_ASM_WRITTEN (fn) = 1;
3587       DECL_SAVED_TREE (fn) = NULL_TREE;
3588       return false;
3589     }
3590
3591   /* We make a decision about linkage for these functions at the end
3592      of the compilation.  Until that point, we do not want the back
3593      end to output them -- but we do want it to see the bodies of
3594      these functions so that it can inline them as appropriate.  */
3595   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3596     {
3597       if (DECL_INTERFACE_KNOWN (fn))
3598         /* We've already made a decision as to how this function will
3599            be handled.  */;
3600       else if (!at_eof)
3601         {
3602           DECL_EXTERNAL (fn) = 1;
3603           DECL_NOT_REALLY_EXTERN (fn) = 1;
3604           note_vague_linkage_fn (fn);
3605           /* A non-template inline function with external linkage will
3606              always be COMDAT.  As we must eventually determine the
3607              linkage of all functions, and as that causes writes to
3608              the data mapped in from the PCH file, it's advantageous
3609              to mark the functions at this point.  */
3610           if (!DECL_IMPLICIT_INSTANTIATION (fn))
3611             {
3612               /* This function must have external linkage, as
3613                  otherwise DECL_INTERFACE_KNOWN would have been
3614                  set.  */
3615               gcc_assert (TREE_PUBLIC (fn));
3616               comdat_linkage (fn);
3617               DECL_INTERFACE_KNOWN (fn) = 1;
3618             }
3619         }
3620       else
3621         import_export_decl (fn);
3622
3623       /* If the user wants us to keep all inline functions, then mark
3624          this function as needed so that finish_file will make sure to
3625          output it later.  Similarly, all dllexport'd functions must
3626          be emitted; there may be callers in other DLLs.  */
3627       if ((flag_keep_inline_functions
3628            && DECL_DECLARED_INLINE_P (fn)
3629            && !DECL_REALLY_EXTERN (fn))
3630           || (flag_keep_inline_dllexport
3631               && lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn))))
3632         mark_needed (fn);
3633     }
3634
3635   /* There's no reason to do any of the work here if we're only doing
3636      semantic analysis; this code just generates RTL.  */
3637   if (flag_syntax_only)
3638     return false;
3639
3640   return true;
3641 }
3642
3643 void
3644 expand_or_defer_fn (tree fn)
3645 {
3646   if (expand_or_defer_fn_1 (fn))
3647     {
3648       function_depth++;
3649
3650       /* Expand or defer, at the whim of the compilation unit manager.  */
3651       cgraph_finalize_function (fn, function_depth > 1);
3652       emit_associated_thunks (fn);
3653
3654       function_depth--;
3655     }
3656 }
3657
3658 struct nrv_data
3659 {
3660   tree var;
3661   tree result;
3662   htab_t visited;
3663 };
3664
3665 /* Helper function for walk_tree, used by finalize_nrv below.  */
3666
3667 static tree
3668 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3669 {
3670   struct nrv_data *dp = (struct nrv_data *)data;
3671   void **slot;
3672
3673   /* No need to walk into types.  There wouldn't be any need to walk into
3674      non-statements, except that we have to consider STMT_EXPRs.  */
3675   if (TYPE_P (*tp))
3676     *walk_subtrees = 0;
3677   /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3678      but differs from using NULL_TREE in that it indicates that we care
3679      about the value of the RESULT_DECL.  */
3680   else if (TREE_CODE (*tp) == RETURN_EXPR)
3681     TREE_OPERAND (*tp, 0) = dp->result;
3682   /* Change all cleanups for the NRV to only run when an exception is
3683      thrown.  */
3684   else if (TREE_CODE (*tp) == CLEANUP_STMT
3685            && CLEANUP_DECL (*tp) == dp->var)
3686     CLEANUP_EH_ONLY (*tp) = 1;
3687   /* Replace the DECL_EXPR for the NRV with an initialization of the
3688      RESULT_DECL, if needed.  */
3689   else if (TREE_CODE (*tp) == DECL_EXPR
3690            && DECL_EXPR_DECL (*tp) == dp->var)
3691     {
3692       tree init;
3693       if (DECL_INITIAL (dp->var)
3694           && DECL_INITIAL (dp->var) != error_mark_node)
3695         init = build2 (INIT_EXPR, void_type_node, dp->result,
3696                        DECL_INITIAL (dp->var));
3697       else
3698         init = build_empty_stmt (EXPR_LOCATION (*tp));
3699       DECL_INITIAL (dp->var) = NULL_TREE;
3700       SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3701       *tp = init;
3702     }
3703   /* And replace all uses of the NRV with the RESULT_DECL.  */
3704   else if (*tp == dp->var)
3705     *tp = dp->result;
3706
3707   /* Avoid walking into the same tree more than once.  Unfortunately, we
3708      can't just use walk_tree_without duplicates because it would only call
3709      us for the first occurrence of dp->var in the function body.  */
3710   slot = htab_find_slot (dp->visited, *tp, INSERT);
3711   if (*slot)
3712     *walk_subtrees = 0;
3713   else
3714     *slot = *tp;
3715
3716   /* Keep iterating.  */
3717   return NULL_TREE;
3718 }
3719
3720 /* Called from finish_function to implement the named return value
3721    optimization by overriding all the RETURN_EXPRs and pertinent
3722    CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3723    RESULT_DECL for the function.  */
3724
3725 void
3726 finalize_nrv (tree *tp, tree var, tree result)
3727 {
3728   struct nrv_data data;
3729
3730   /* Copy name from VAR to RESULT.  */
3731   DECL_NAME (result) = DECL_NAME (var);
3732   /* Don't forget that we take its address.  */
3733   TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3734   /* Finally set DECL_VALUE_EXPR to avoid assigning
3735      a stack slot at -O0 for the original var and debug info
3736      uses RESULT location for VAR.  */
3737   SET_DECL_VALUE_EXPR (var, result);
3738   DECL_HAS_VALUE_EXPR_P (var) = 1;
3739
3740   data.var = var;
3741   data.result = result;
3742   data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3743   cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3744   htab_delete (data.visited);
3745 }
3746 \f
3747 /* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
3748
3749 bool
3750 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3751                             bool need_copy_ctor, bool need_copy_assignment)
3752 {
3753   int save_errorcount = errorcount;
3754   tree info, t;
3755
3756   /* Always allocate 3 elements for simplicity.  These are the
3757      function decls for the ctor, dtor, and assignment op.
3758      This layout is known to the three lang hooks,
3759      cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3760      and cxx_omp_clause_assign_op.  */
3761   info = make_tree_vec (3);
3762   CP_OMP_CLAUSE_INFO (c) = info;
3763
3764   if (need_default_ctor || need_copy_ctor)
3765     {
3766       if (need_default_ctor)
3767         t = get_default_ctor (type);
3768       else
3769         t = get_copy_ctor (type, tf_warning_or_error);
3770
3771       if (t && !trivial_fn_p (t))
3772         TREE_VEC_ELT (info, 0) = t;
3773     }
3774
3775   if ((need_default_ctor || need_copy_ctor)
3776       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3777     TREE_VEC_ELT (info, 1) = get_dtor (type, tf_warning_or_error);
3778
3779   if (need_copy_assignment)
3780     {
3781       t = get_copy_assign (type);
3782
3783       if (t && !trivial_fn_p (t))
3784         TREE_VEC_ELT (info, 2) = t;
3785     }
3786
3787   return errorcount != save_errorcount;
3788 }
3789
3790 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3791    Remove any elements from the list that are invalid.  */
3792
3793 tree
3794 finish_omp_clauses (tree clauses)
3795 {
3796   bitmap_head generic_head, firstprivate_head, lastprivate_head;
3797   tree c, t, *pc = &clauses;
3798   const char *name;
3799
3800   bitmap_obstack_initialize (NULL);
3801   bitmap_initialize (&generic_head, &bitmap_default_obstack);
3802   bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3803   bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3804
3805   for (pc = &clauses, c = clauses; c ; c = *pc)
3806     {
3807       bool remove = false;
3808
3809       switch (OMP_CLAUSE_CODE (c))
3810         {
3811         case OMP_CLAUSE_SHARED:
3812           name = "shared";
3813           goto check_dup_generic;
3814         case OMP_CLAUSE_PRIVATE:
3815           name = "private";
3816           goto check_dup_generic;
3817         case OMP_CLAUSE_REDUCTION:
3818           name = "reduction";
3819           goto check_dup_generic;
3820         case OMP_CLAUSE_COPYPRIVATE:
3821           name = "copyprivate";
3822           goto check_dup_generic;
3823         case OMP_CLAUSE_COPYIN:
3824           name = "copyin";
3825           goto check_dup_generic;
3826         check_dup_generic:
3827           t = OMP_CLAUSE_DECL (c);
3828           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3829             {
3830               if (processing_template_decl)
3831                 break;
3832               if (DECL_P (t))
3833                 error ("%qD is not a variable in clause %qs", t, name);
3834               else
3835                 error ("%qE is not a variable in clause %qs", t, name);
3836               remove = true;
3837             }
3838           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3839                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3840                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3841             {
3842               error ("%qD appears more than once in data clauses", t);
3843               remove = true;
3844             }
3845           else
3846             bitmap_set_bit (&generic_head, DECL_UID (t));
3847           break;
3848
3849         case OMP_CLAUSE_FIRSTPRIVATE:
3850           t = OMP_CLAUSE_DECL (c);
3851           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3852             {
3853               if (processing_template_decl)
3854                 break;
3855               if (DECL_P (t))
3856                 error ("%qD is not a variable in clause %<firstprivate%>", t);
3857               else
3858                 error ("%qE is not a variable in clause %<firstprivate%>", t);
3859               remove = true;
3860             }
3861           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3862                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3863             {
3864               error ("%qD appears more than once in data clauses", t);
3865               remove = true;
3866             }
3867           else
3868             bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3869           break;
3870
3871         case OMP_CLAUSE_LASTPRIVATE:
3872           t = OMP_CLAUSE_DECL (c);
3873           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3874             {
3875               if (processing_template_decl)
3876                 break;
3877               if (DECL_P (t))
3878                 error ("%qD is not a variable in clause %<lastprivate%>", t);
3879               else
3880                 error ("%qE is not a variable in clause %<lastprivate%>", t);
3881               remove = true;
3882             }
3883           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3884                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3885             {
3886               error ("%qD appears more than once in data clauses", t);
3887               remove = true;
3888             }
3889           else
3890             bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3891           break;
3892
3893         case OMP_CLAUSE_IF:
3894           t = OMP_CLAUSE_IF_EXPR (c);
3895           t = maybe_convert_cond (t);
3896           if (t == error_mark_node)
3897             remove = true;
3898           OMP_CLAUSE_IF_EXPR (c) = t;
3899           break;
3900
3901         case OMP_CLAUSE_NUM_THREADS:
3902           t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3903           if (t == error_mark_node)
3904             remove = true;
3905           else if (!type_dependent_expression_p (t)
3906                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3907             {
3908               error ("num_threads expression must be integral");
3909               remove = true;
3910             }
3911           break;
3912
3913         case OMP_CLAUSE_SCHEDULE:
3914           t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3915           if (t == NULL)
3916             ;
3917           else if (t == error_mark_node)
3918             remove = true;
3919           else if (!type_dependent_expression_p (t)
3920                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3921             {
3922               error ("schedule chunk size expression must be integral");
3923               remove = true;
3924             }
3925           break;
3926
3927         case OMP_CLAUSE_NOWAIT:
3928         case OMP_CLAUSE_ORDERED:
3929         case OMP_CLAUSE_DEFAULT:
3930         case OMP_CLAUSE_UNTIED:
3931         case OMP_CLAUSE_COLLAPSE:
3932           break;
3933
3934         default:
3935           gcc_unreachable ();
3936         }
3937
3938       if (remove)
3939         *pc = OMP_CLAUSE_CHAIN (c);
3940       else
3941         pc = &OMP_CLAUSE_CHAIN (c);
3942     }
3943
3944   for (pc = &clauses, c = clauses; c ; c = *pc)
3945     {
3946       enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3947       bool remove = false;
3948       bool need_complete_non_reference = false;
3949       bool need_default_ctor = false;
3950       bool need_copy_ctor = false;
3951       bool need_copy_assignment = false;
3952       bool need_implicitly_determined = false;
3953       tree type, inner_type;
3954
3955       switch (c_kind)
3956         {
3957         case OMP_CLAUSE_SHARED:
3958           name = "shared";
3959           need_implicitly_determined = true;
3960           break;
3961         case OMP_CLAUSE_PRIVATE:
3962           name = "private";
3963           need_complete_non_reference = true;
3964           need_default_ctor = true;
3965           need_implicitly_determined = true;
3966           break;
3967         case OMP_CLAUSE_FIRSTPRIVATE:
3968           name = "firstprivate";
3969           need_complete_non_reference = true;
3970           need_copy_ctor = true;
3971           need_implicitly_determined = true;
3972           break;
3973         case OMP_CLAUSE_LASTPRIVATE:
3974           name = "lastprivate";
3975           need_complete_non_reference = true;
3976           need_copy_assignment = true;
3977           need_implicitly_determined = true;
3978           break;
3979         case OMP_CLAUSE_REDUCTION:
3980           name = "reduction";
3981           need_implicitly_determined = true;
3982           break;
3983         case OMP_CLAUSE_COPYPRIVATE:
3984           name = "copyprivate";
3985           need_copy_assignment = true;
3986           break;
3987         case OMP_CLAUSE_COPYIN:
3988           name = "copyin";
3989           need_copy_assignment = true;
3990           break;
3991         default:
3992           pc = &OMP_CLAUSE_CHAIN (c);
3993           continue;
3994         }
3995
3996       t = OMP_CLAUSE_DECL (c);
3997       if (processing_template_decl
3998           && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3999         {
4000           pc = &OMP_CLAUSE_CHAIN (c);
4001           continue;
4002         }
4003
4004       switch (c_kind)
4005         {
4006         case OMP_CLAUSE_LASTPRIVATE:
4007           if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
4008             need_default_ctor = true;
4009           break;
4010
4011         case OMP_CLAUSE_REDUCTION:
4012           if (AGGREGATE_TYPE_P (TREE_TYPE (t))
4013               || POINTER_TYPE_P (TREE_TYPE (t)))
4014             {
4015               error ("%qE has invalid type for %<reduction%>", t);
4016               remove = true;
4017             }
4018           else if (FLOAT_TYPE_P (TREE_TYPE (t)))
4019             {
4020               enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
4021               switch (r_code)
4022                 {
4023                 case PLUS_EXPR:
4024                 case MULT_EXPR:
4025                 case MINUS_EXPR:
4026                   break;
4027                 default:
4028                   error ("%qE has invalid type for %<reduction(%s)%>",
4029                          t, operator_name_info[r_code].name);
4030                   remove = true;
4031                 }
4032             }
4033           break;
4034
4035         case OMP_CLAUSE_COPYIN:
4036           if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
4037             {
4038               error ("%qE must be %<threadprivate%> for %<copyin%>", t);
4039               remove = true;
4040             }
4041           break;
4042
4043         default:
4044           break;
4045         }
4046
4047       if (need_complete_non_reference || need_copy_assignment)
4048         {
4049           t = require_complete_type (t);
4050           if (t == error_mark_node)
4051             remove = true;
4052           else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
4053                    && need_complete_non_reference)
4054             {
4055               error ("%qE has reference type for %qs", t, name);
4056               remove = true;
4057             }
4058         }
4059       if (need_implicitly_determined)
4060         {
4061           const char *share_name = NULL;
4062
4063           if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
4064             share_name = "threadprivate";
4065           else switch (cxx_omp_predetermined_sharing (t))
4066             {
4067             case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
4068               break;
4069             case OMP_CLAUSE_DEFAULT_SHARED:
4070               share_name = "shared";
4071               break;
4072             case OMP_CLAUSE_DEFAULT_PRIVATE:
4073               share_name = "private";
4074               break;
4075             default:
4076               gcc_unreachable ();
4077             }
4078           if (share_name)
4079             {
4080               error ("%qE is predetermined %qs for %qs",
4081                      t, share_name, name);
4082               remove = true;
4083             }
4084         }
4085
4086       /* We're interested in the base element, not arrays.  */
4087       inner_type = type = TREE_TYPE (t);
4088       while (TREE_CODE (inner_type) == ARRAY_TYPE)
4089         inner_type = TREE_TYPE (inner_type);
4090
4091       /* Check for special function availability by building a call to one.
4092          Save the results, because later we won't be in the right context
4093          for making these queries.  */
4094       if (CLASS_TYPE_P (inner_type)
4095           && COMPLETE_TYPE_P (inner_type)
4096           && (need_default_ctor || need_copy_ctor || need_copy_assignment)
4097           && !type_dependent_expression_p (t)
4098           && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
4099                                          need_copy_ctor, need_copy_assignment))
4100         remove = true;
4101
4102       if (remove)
4103         *pc = OMP_CLAUSE_CHAIN (c);
4104       else
4105         pc = &OMP_CLAUSE_CHAIN (c);
4106     }
4107
4108   bitmap_obstack_release (NULL);
4109   return clauses;
4110 }
4111
4112 /* For all variables in the tree_list VARS, mark them as thread local.  */
4113
4114 void
4115 finish_omp_threadprivate (tree vars)
4116 {
4117   tree t;
4118
4119   /* Mark every variable in VARS to be assigned thread local storage.  */
4120   for (t = vars; t; t = TREE_CHAIN (t))
4121     {
4122       tree v = TREE_PURPOSE (t);
4123
4124       if (error_operand_p (v))
4125         ;
4126       else if (TREE_CODE (v) != VAR_DECL)
4127         error ("%<threadprivate%> %qD is not file, namespace "
4128                "or block scope variable", v);
4129       /* If V had already been marked threadprivate, it doesn't matter
4130          whether it had been used prior to this point.  */
4131       else if (TREE_USED (v)
4132           && (DECL_LANG_SPECIFIC (v) == NULL
4133               || !CP_DECL_THREADPRIVATE_P (v)))
4134         error ("%qE declared %<threadprivate%> after first use", v);
4135       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
4136         error ("automatic variable %qE cannot be %<threadprivate%>", v);
4137       else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
4138         error ("%<threadprivate%> %qE has incomplete type", v);
4139       else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
4140                && CP_DECL_CONTEXT (v) != current_class_type)
4141         error ("%<threadprivate%> %qE directive not "
4142                "in %qT definition", v, CP_DECL_CONTEXT (v));
4143       else
4144         {
4145           /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
4146           if (DECL_LANG_SPECIFIC (v) == NULL)
4147             {
4148               retrofit_lang_decl (v);
4149
4150               /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4151                  after the allocation of the lang_decl structure.  */
4152               if (DECL_DISCRIMINATOR_P (v))
4153                 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
4154             }
4155
4156           if (! DECL_THREAD_LOCAL_P (v))
4157             {
4158               DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4159               /* If rtl has been already set for this var, call
4160                  make_decl_rtl once again, so that encode_section_info
4161                  has a chance to look at the new decl flags.  */
4162               if (DECL_RTL_SET_P (v))
4163                 make_decl_rtl (v);
4164             }
4165           CP_DECL_THREADPRIVATE_P (v) = 1;
4166         }
4167     }
4168 }
4169
4170 /* Build an OpenMP structured block.  */
4171
4172 tree
4173 begin_omp_structured_block (void)
4174 {
4175   return do_pushlevel (sk_omp);
4176 }
4177
4178 tree
4179 finish_omp_structured_block (tree block)
4180 {
4181   return do_poplevel (block);
4182 }
4183
4184 /* Similarly, except force the retention of the BLOCK.  */
4185
4186 tree
4187 begin_omp_parallel (void)
4188 {
4189   keep_next_level (true);
4190   return begin_omp_structured_block ();
4191 }
4192
4193 tree
4194 finish_omp_parallel (tree clauses, tree body)
4195 {
4196   tree stmt;
4197
4198   body = finish_omp_structured_block (body);
4199
4200   stmt = make_node (OMP_PARALLEL);
4201   TREE_TYPE (stmt) = void_type_node;
4202   OMP_PARALLEL_CLAUSES (stmt) = clauses;
4203   OMP_PARALLEL_BODY (stmt) = body;
4204
4205   return add_stmt (stmt);
4206 }
4207
4208 tree
4209 begin_omp_task (void)
4210 {
4211   keep_next_level (true);
4212   return begin_omp_structured_block ();
4213 }
4214
4215 tree
4216 finish_omp_task (tree clauses, tree body)
4217 {
4218   tree stmt;
4219
4220   body = finish_omp_structured_block (body);
4221
4222   stmt = make_node (OMP_TASK);
4223   TREE_TYPE (stmt) = void_type_node;
4224   OMP_TASK_CLAUSES (stmt) = clauses;
4225   OMP_TASK_BODY (stmt) = body;
4226
4227   return add_stmt (stmt);
4228 }
4229
4230 /* Helper function for finish_omp_for.  Convert Ith random access iterator
4231    into integral iterator.  Return FALSE if successful.  */
4232
4233 static bool
4234 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4235                                tree condv, tree incrv, tree *body,
4236                                tree *pre_body, tree clauses)
4237 {
4238   tree diff, iter_init, iter_incr = NULL, last;
4239   tree incr_var = NULL, orig_pre_body, orig_body, c;
4240   tree decl = TREE_VEC_ELT (declv, i);
4241   tree init = TREE_VEC_ELT (initv, i);
4242   tree cond = TREE_VEC_ELT (condv, i);
4243   tree incr = TREE_VEC_ELT (incrv, i);
4244   tree iter = decl;
4245   location_t elocus = locus;
4246
4247   if (init && EXPR_HAS_LOCATION (init))
4248     elocus = EXPR_LOCATION (init);
4249
4250   switch (TREE_CODE (cond))
4251     {
4252     case GT_EXPR:
4253     case GE_EXPR:
4254     case LT_EXPR:
4255     case LE_EXPR:
4256       if (TREE_OPERAND (cond, 1) == iter)
4257         cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4258                        TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4259       if (TREE_OPERAND (cond, 0) != iter)
4260         cond = error_mark_node;
4261       else
4262         {
4263           tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4264                                         TREE_OPERAND (cond, 1), ERROR_MARK,
4265                                         NULL, tf_warning_or_error);
4266           if (error_operand_p (tem))
4267             return true;
4268         }
4269       break;
4270     default:
4271       cond = error_mark_node;
4272       break;
4273     }
4274   if (cond == error_mark_node)
4275     {
4276       error_at (elocus, "invalid controlling predicate");
4277       return true;
4278     }
4279   diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4280                             ERROR_MARK, iter, ERROR_MARK, NULL,
4281                             tf_warning_or_error);
4282   if (error_operand_p (diff))
4283     return true;
4284   if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4285     {
4286       error_at (elocus, "difference between %qE and %qD does not have integer type",
4287                 TREE_OPERAND (cond, 1), iter);
4288       return true;
4289     }
4290
4291   switch (TREE_CODE (incr))
4292     {
4293     case PREINCREMENT_EXPR:
4294     case PREDECREMENT_EXPR:
4295     case POSTINCREMENT_EXPR:
4296     case POSTDECREMENT_EXPR:
4297       if (TREE_OPERAND (incr, 0) != iter)
4298         {
4299           incr = error_mark_node;
4300           break;
4301         }
4302       iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4303                                     tf_warning_or_error);
4304       if (error_operand_p (iter_incr))
4305         return true;
4306       else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4307                || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4308         incr = integer_one_node;
4309       else
4310         incr = integer_minus_one_node;
4311       break;
4312     case MODIFY_EXPR:
4313       if (TREE_OPERAND (incr, 0) != iter)
4314         incr = error_mark_node;
4315       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4316                || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4317         {
4318           tree rhs = TREE_OPERAND (incr, 1);
4319           if (TREE_OPERAND (rhs, 0) == iter)
4320             {
4321               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4322                   != INTEGER_TYPE)
4323                 incr = error_mark_node;
4324               else
4325                 {
4326                   iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4327                                                    TREE_OPERAND (rhs, 1),
4328                                                    tf_warning_or_error);
4329                   if (error_operand_p (iter_incr))
4330                     return true;
4331                   incr = TREE_OPERAND (rhs, 1);
4332                   incr = cp_convert (TREE_TYPE (diff), incr);
4333                   if (TREE_CODE (rhs) == MINUS_EXPR)
4334                     {
4335                       incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4336                       incr = fold_if_not_in_template (incr);
4337                     }
4338                   if (TREE_CODE (incr) != INTEGER_CST
4339                       && (TREE_CODE (incr) != NOP_EXPR
4340                           || (TREE_CODE (TREE_OPERAND (incr, 0))
4341                               != INTEGER_CST)))
4342                     iter_incr = NULL;
4343                 }
4344             }
4345           else if (TREE_OPERAND (rhs, 1) == iter)
4346             {
4347               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4348                   || TREE_CODE (rhs) != PLUS_EXPR)
4349                 incr = error_mark_node;
4350               else
4351                 {
4352                   iter_incr = build_x_binary_op (PLUS_EXPR,
4353                                                  TREE_OPERAND (rhs, 0),
4354                                                  ERROR_MARK, iter,
4355                                                  ERROR_MARK, NULL,
4356                                                  tf_warning_or_error);
4357                   if (error_operand_p (iter_incr))
4358                     return true;
4359                   iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4360                                                    iter_incr,
4361                                                    tf_warning_or_error);
4362                   if (error_operand_p (iter_incr))
4363                     return true;
4364                   incr = TREE_OPERAND (rhs, 0);
4365                   iter_incr = NULL;
4366                 }
4367             }
4368           else
4369             incr = error_mark_node;
4370         }
4371       else
4372         incr = error_mark_node;
4373       break;
4374     default:
4375       incr = error_mark_node;
4376       break;
4377     }
4378
4379   if (incr == error_mark_node)
4380     {
4381       error_at (elocus, "invalid increment expression");
4382       return true;
4383     }
4384
4385   incr = cp_convert (TREE_TYPE (diff), incr);
4386   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4387     if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4388         && OMP_CLAUSE_DECL (c) == iter)
4389       break;
4390
4391   decl = create_temporary_var (TREE_TYPE (diff));
4392   pushdecl (decl);
4393   add_decl_expr (decl);
4394   last = create_temporary_var (TREE_TYPE (diff));
4395   pushdecl (last);
4396   add_decl_expr (last);
4397   if (c && iter_incr == NULL)
4398     {
4399       incr_var = create_temporary_var (TREE_TYPE (diff));
4400       pushdecl (incr_var);
4401       add_decl_expr (incr_var);
4402     }
4403   gcc_assert (stmts_are_full_exprs_p ());
4404
4405   orig_pre_body = *pre_body;
4406   *pre_body = push_stmt_list ();
4407   if (orig_pre_body)
4408     add_stmt (orig_pre_body);
4409   if (init != NULL)
4410     finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4411                                            tf_warning_or_error));
4412   init = build_int_cst (TREE_TYPE (diff), 0);
4413   if (c && iter_incr == NULL)
4414     {
4415       finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4416                                              incr, tf_warning_or_error));
4417       incr = incr_var;
4418       iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4419                                        tf_warning_or_error);
4420     }
4421   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4422                                          tf_warning_or_error));
4423   *pre_body = pop_stmt_list (*pre_body);
4424
4425   cond = cp_build_binary_op (elocus,
4426                              TREE_CODE (cond), decl, diff,
4427                              tf_warning_or_error);
4428   incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4429                             elocus, incr, NULL_TREE);
4430
4431   orig_body = *body;
4432   *body = push_stmt_list ();
4433   iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4434   iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4435                                    tf_warning_or_error);
4436   iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4437   finish_expr_stmt (iter_init);
4438   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4439                                          tf_warning_or_error));
4440   add_stmt (orig_body);
4441   *body = pop_stmt_list (*body);
4442
4443   if (c)
4444     {
4445       OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4446       finish_expr_stmt (iter_incr);
4447       OMP_CLAUSE_LASTPRIVATE_STMT (c)
4448         = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4449     }
4450
4451   TREE_VEC_ELT (declv, i) = decl;
4452   TREE_VEC_ELT (initv, i) = init;
4453   TREE_VEC_ELT (condv, i) = cond;
4454   TREE_VEC_ELT (incrv, i) = incr;
4455
4456   return false;
4457 }
4458
4459 /* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
4460    are directly for their associated operands in the statement.  DECL
4461    and INIT are a combo; if DECL is NULL then INIT ought to be a
4462    MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
4463    optional statements that need to go before the loop into its
4464    sk_omp scope.  */
4465
4466 tree
4467 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4468                 tree incrv, tree body, tree pre_body, tree clauses)
4469 {
4470   tree omp_for = NULL, orig_incr = NULL;
4471   tree decl, init, cond, incr;
4472   location_t elocus;
4473   int i;
4474
4475   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4476   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4477   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4478   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4479     {
4480       decl = TREE_VEC_ELT (declv, i);
4481       init = TREE_VEC_ELT (initv, i);
4482       cond = TREE_VEC_ELT (condv, i);
4483       incr = TREE_VEC_ELT (incrv, i);
4484       elocus = locus;
4485
4486       if (decl == NULL)
4487         {
4488           if (init != NULL)
4489             switch (TREE_CODE (init))
4490               {
4491               case MODIFY_EXPR:
4492                 decl = TREE_OPERAND (init, 0);
4493                 init = TREE_OPERAND (init, 1);
4494                 break;
4495               case MODOP_EXPR:
4496                 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4497                   {
4498                     decl = TREE_OPERAND (init, 0);
4499                     init = TREE_OPERAND (init, 2);
4500                   }
4501                 break;
4502               default:
4503                 break;
4504               }
4505
4506           if (decl == NULL)
4507             {
4508               error_at (locus,
4509                         "expected iteration declaration or initialization");
4510               return NULL;
4511             }
4512         }
4513
4514       if (init && EXPR_HAS_LOCATION (init))
4515         elocus = EXPR_LOCATION (init);
4516
4517       if (cond == NULL)
4518         {
4519           error_at (elocus, "missing controlling predicate");
4520           return NULL;
4521         }
4522
4523       if (incr == NULL)
4524         {
4525           error_at (elocus, "missing increment expression");
4526           return NULL;
4527         }
4528
4529       TREE_VEC_ELT (declv, i) = decl;
4530       TREE_VEC_ELT (initv, i) = init;
4531     }
4532
4533   if (dependent_omp_for_p (declv, initv, condv, incrv))
4534     {
4535       tree stmt;
4536
4537       stmt = make_node (OMP_FOR);
4538
4539       for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4540         {
4541           /* This is really just a place-holder.  We'll be decomposing this
4542              again and going through the cp_build_modify_expr path below when
4543              we instantiate the thing.  */
4544           TREE_VEC_ELT (initv, i)
4545             = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4546                       TREE_VEC_ELT (initv, i));
4547         }
4548
4549       TREE_TYPE (stmt) = void_type_node;
4550       OMP_FOR_INIT (stmt) = initv;
4551       OMP_FOR_COND (stmt) = condv;
4552       OMP_FOR_INCR (stmt) = incrv;
4553       OMP_FOR_BODY (stmt) = body;
4554       OMP_FOR_PRE_BODY (stmt) = pre_body;
4555       OMP_FOR_CLAUSES (stmt) = clauses;
4556
4557       SET_EXPR_LOCATION (stmt, locus);
4558       return add_stmt (stmt);
4559     }
4560
4561   if (processing_template_decl)
4562     orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4563
4564   for (i = 0; i < TREE_VEC_LENGTH (declv); )
4565     {
4566       decl = TREE_VEC_ELT (declv, i);
4567       init = TREE_VEC_ELT (initv, i);
4568       cond = TREE_VEC_ELT (condv, i);
4569       incr = TREE_VEC_ELT (incrv, i);
4570       if (orig_incr)
4571         TREE_VEC_ELT (orig_incr, i) = incr;
4572       elocus = locus;
4573
4574       if (init && EXPR_HAS_LOCATION (init))
4575         elocus = EXPR_LOCATION (init);
4576
4577       if (!DECL_P (decl))
4578         {
4579           error_at (elocus, "expected iteration declaration or initialization");
4580           return NULL;
4581         }
4582
4583       if (incr && TREE_CODE (incr) == MODOP_EXPR)
4584         {
4585           if (orig_incr)
4586             TREE_VEC_ELT (orig_incr, i) = incr;
4587           incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4588                                        TREE_CODE (TREE_OPERAND (incr, 1)),
4589                                        TREE_OPERAND (incr, 2),
4590                                        tf_warning_or_error);
4591         }
4592
4593       if (CLASS_TYPE_P (TREE_TYPE (decl)))
4594         {
4595           if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4596                                              incrv, &body, &pre_body, clauses))
4597             return NULL;
4598           continue;
4599         }
4600
4601       if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4602           && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4603         {
4604           error_at (elocus, "invalid type for iteration variable %qE", decl);
4605           return NULL;
4606         }
4607
4608       if (!processing_template_decl)
4609         {
4610           init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4611           init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4612         }
4613       else
4614         init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4615       if (cond
4616           && TREE_SIDE_EFFECTS (cond)
4617           && COMPARISON_CLASS_P (cond)
4618           && !processing_template_decl)
4619         {
4620           tree t = TREE_OPERAND (cond, 0);
4621           if (TREE_SIDE_EFFECTS (t)
4622               && t != decl
4623               && (TREE_CODE (t) != NOP_EXPR
4624                   || TREE_OPERAND (t, 0) != decl))
4625             TREE_OPERAND (cond, 0)
4626               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4627
4628           t = TREE_OPERAND (cond, 1);
4629           if (TREE_SIDE_EFFECTS (t)
4630               && t != decl
4631               && (TREE_CODE (t) != NOP_EXPR
4632                   || TREE_OPERAND (t, 0) != decl))
4633             TREE_OPERAND (cond, 1)
4634               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4635         }
4636       if (decl == error_mark_node || init == error_mark_node)
4637         return NULL;
4638
4639       TREE_VEC_ELT (declv, i) = decl;
4640       TREE_VEC_ELT (initv, i) = init;
4641       TREE_VEC_ELT (condv, i) = cond;
4642       TREE_VEC_ELT (incrv, i) = incr;
4643       i++;
4644     }
4645
4646   if (IS_EMPTY_STMT (pre_body))
4647     pre_body = NULL;
4648
4649   omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4650                               body, pre_body);
4651
4652   if (omp_for == NULL)
4653     return NULL;
4654
4655   for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4656     {
4657       decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4658       incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4659
4660       if (TREE_CODE (incr) != MODIFY_EXPR)
4661         continue;
4662
4663       if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4664           && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4665           && !processing_template_decl)
4666         {
4667           tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4668           if (TREE_SIDE_EFFECTS (t)
4669               && t != decl
4670               && (TREE_CODE (t) != NOP_EXPR
4671                   || TREE_OPERAND (t, 0) != decl))
4672             TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4673               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4674
4675           t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4676           if (TREE_SIDE_EFFECTS (t)
4677               && t != decl
4678               && (TREE_CODE (t) != NOP_EXPR
4679                   || TREE_OPERAND (t, 0) != decl))
4680             TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4681               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4682         }
4683
4684       if (orig_incr)
4685         TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4686     }
4687   if (omp_for != NULL)
4688     OMP_FOR_CLAUSES (omp_for) = clauses;
4689   return omp_for;
4690 }
4691
4692 void
4693 finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4694 {
4695   tree orig_lhs;
4696   tree orig_rhs;
4697   bool dependent_p;
4698   tree stmt;
4699
4700   orig_lhs = lhs;
4701   orig_rhs = rhs;
4702   dependent_p = false;
4703   stmt = NULL_TREE;
4704
4705   /* Even in a template, we can detect invalid uses of the atomic
4706      pragma if neither LHS nor RHS is type-dependent.  */
4707   if (processing_template_decl)
4708     {
4709       dependent_p = (type_dependent_expression_p (lhs)
4710                      || type_dependent_expression_p (rhs));
4711       if (!dependent_p)
4712         {
4713           lhs = build_non_dependent_expr (lhs);
4714           rhs = build_non_dependent_expr (rhs);
4715         }
4716     }
4717   if (!dependent_p)
4718     {
4719       stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4720       if (stmt == error_mark_node)
4721         return;
4722     }
4723   if (processing_template_decl)
4724     stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4725                    build2 (code, void_type_node, orig_lhs, orig_rhs));
4726   add_stmt (stmt);
4727 }
4728
4729 void
4730 finish_omp_barrier (void)
4731 {
4732   tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4733   VEC(tree,gc) *vec = make_tree_vector ();
4734   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4735   release_tree_vector (vec);
4736   finish_expr_stmt (stmt);
4737 }
4738
4739 void
4740 finish_omp_flush (void)
4741 {
4742   tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4743   VEC(tree,gc) *vec = make_tree_vector ();
4744   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4745   release_tree_vector (vec);
4746   finish_expr_stmt (stmt);
4747 }
4748
4749 void
4750 finish_omp_taskwait (void)
4751 {
4752   tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4753   VEC(tree,gc) *vec = make_tree_vector ();
4754   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4755   release_tree_vector (vec);
4756   finish_expr_stmt (stmt);
4757 }
4758 \f
4759 void
4760 init_cp_semantics (void)
4761 {
4762 }
4763 \f
4764 /* Build a STATIC_ASSERT for a static assertion with the condition
4765    CONDITION and the message text MESSAGE.  LOCATION is the location
4766    of the static assertion in the source code.  When MEMBER_P, this
4767    static assertion is a member of a class.  */
4768 void 
4769 finish_static_assert (tree condition, tree message, location_t location, 
4770                       bool member_p)
4771 {
4772   if (check_for_bare_parameter_packs (condition))
4773     condition = error_mark_node;
4774
4775   if (type_dependent_expression_p (condition) 
4776       || value_dependent_expression_p (condition))
4777     {
4778       /* We're in a template; build a STATIC_ASSERT and put it in
4779          the right place. */
4780       tree assertion;
4781
4782       assertion = make_node (STATIC_ASSERT);
4783       STATIC_ASSERT_CONDITION (assertion) = condition;
4784       STATIC_ASSERT_MESSAGE (assertion) = message;
4785       STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4786
4787       if (member_p)
4788         maybe_add_class_template_decl_list (current_class_type, 
4789                                             assertion,
4790                                             /*friend_p=*/0);
4791       else
4792         add_stmt (assertion);
4793
4794       return;
4795     }
4796
4797   /* Fold the expression and convert it to a boolean value. */
4798   condition = fold_non_dependent_expr (condition);
4799   condition = cp_convert (boolean_type_node, condition);
4800   condition = maybe_constant_value (condition);
4801
4802   if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4803     /* Do nothing; the condition is satisfied. */
4804     ;
4805   else 
4806     {
4807       location_t saved_loc = input_location;
4808
4809       input_location = location;
4810       if (TREE_CODE (condition) == INTEGER_CST 
4811           && integer_zerop (condition))
4812         /* Report the error. */
4813         error ("static assertion failed: %E", message);
4814       else if (condition && condition != error_mark_node)
4815         {
4816           error ("non-constant condition for static assertion");
4817           cxx_constant_value (condition);
4818         }
4819       input_location = saved_loc;
4820     }
4821 }
4822 \f
4823 /* Returns the type of EXPR for cases where we can determine it even though
4824    EXPR is a type-dependent expression.  */
4825
4826 tree
4827 describable_type (tree expr)
4828 {
4829   tree type = NULL_TREE;
4830
4831   if (! type_dependent_expression_p (expr)
4832       && ! type_unknown_p (expr))
4833     {
4834       type = unlowered_expr_type (expr);
4835       if (real_lvalue_p (expr))
4836         type = build_reference_type (type);
4837     }
4838
4839   if (type)
4840     return type;
4841
4842   switch (TREE_CODE (expr))
4843     {
4844     case VAR_DECL:
4845     case PARM_DECL:
4846     case RESULT_DECL:
4847     case FUNCTION_DECL:
4848       return TREE_TYPE (expr);
4849       break;
4850
4851     case NEW_EXPR:
4852     case CONST_DECL:
4853     case TEMPLATE_PARM_INDEX:
4854     case CAST_EXPR:
4855     case STATIC_CAST_EXPR:
4856     case REINTERPRET_CAST_EXPR:
4857     case CONST_CAST_EXPR:
4858     case DYNAMIC_CAST_EXPR:
4859       type = TREE_TYPE (expr);
4860       break;
4861
4862     case INDIRECT_REF:
4863       {
4864         tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4865         if (ptrtype && POINTER_TYPE_P (ptrtype))
4866           type = build_reference_type (TREE_TYPE (ptrtype));
4867       }
4868       break;
4869
4870     default:
4871       if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4872         type = TREE_TYPE (expr);
4873       break;
4874     }
4875
4876   if (type && type_uses_auto (type))
4877     return NULL_TREE;
4878   else
4879     return type;
4880 }
4881
4882 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
4883    suitable for use as a type-specifier.
4884
4885    ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4886    id-expression or a class member access, FALSE when it was parsed as
4887    a full expression.  */
4888
4889 tree
4890 finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
4891                       tsubst_flags_t complain)
4892 {
4893   tree type = NULL_TREE;
4894
4895   if (!expr || error_operand_p (expr))
4896     return error_mark_node;
4897
4898   if (TYPE_P (expr)
4899       || TREE_CODE (expr) == TYPE_DECL
4900       || (TREE_CODE (expr) == BIT_NOT_EXPR
4901           && TYPE_P (TREE_OPERAND (expr, 0))))
4902     {
4903       if (complain & tf_error)
4904         error ("argument to decltype must be an expression");
4905       return error_mark_node;
4906     }
4907
4908   /* FIXME instantiation-dependent  */
4909   if (type_dependent_expression_p (expr)
4910       /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4911          if it isn't dependent, so that we can check access control at
4912          instantiation time, so defer the decltype as well (PR 42277).  */
4913       || (id_expression_or_member_access_p
4914           && processing_template_decl
4915           && TREE_CODE (expr) == COMPONENT_REF))
4916     {
4917       type = cxx_make_type (DECLTYPE_TYPE);
4918       DECLTYPE_TYPE_EXPR (type) = expr;
4919       DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4920         = id_expression_or_member_access_p;
4921       SET_TYPE_STRUCTURAL_EQUALITY (type);
4922
4923       return type;
4924     }
4925
4926   /* The type denoted by decltype(e) is defined as follows:  */
4927
4928   expr = resolve_nondeduced_context (expr);
4929
4930   if (type_unknown_p (expr))
4931     {
4932       if (complain & tf_error)
4933         error ("decltype cannot resolve address of overloaded function");
4934       return error_mark_node;
4935     }
4936
4937   /* To get the size of a static data member declared as an array of
4938      unknown bound, we need to instantiate it.  */
4939   if (TREE_CODE (expr) == VAR_DECL
4940       && VAR_HAD_UNKNOWN_BOUND (expr)
4941       && DECL_TEMPLATE_INSTANTIATION (expr))
4942     instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
4943
4944   if (id_expression_or_member_access_p)
4945     {
4946       /* If e is an id-expression or a class member access (5.2.5
4947          [expr.ref]), decltype(e) is defined as the type of the entity
4948          named by e. If there is no such entity, or e names a set of
4949          overloaded functions, the program is ill-formed.  */
4950       if (TREE_CODE (expr) == IDENTIFIER_NODE)
4951         expr = lookup_name (expr);
4952
4953       if (TREE_CODE (expr) == INDIRECT_REF)
4954         /* This can happen when the expression is, e.g., "a.b". Just
4955            look at the underlying operand.  */
4956         expr = TREE_OPERAND (expr, 0);
4957
4958       if (TREE_CODE (expr) == OFFSET_REF
4959           || TREE_CODE (expr) == MEMBER_REF)
4960         /* We're only interested in the field itself. If it is a
4961            BASELINK, we will need to see through it in the next
4962            step.  */
4963         expr = TREE_OPERAND (expr, 1);
4964
4965       if (TREE_CODE (expr) == BASELINK)
4966         /* See through BASELINK nodes to the underlying function.  */
4967         expr = BASELINK_FUNCTIONS (expr);
4968
4969       switch (TREE_CODE (expr))
4970         {
4971         case FIELD_DECL:
4972           if (DECL_BIT_FIELD_TYPE (expr))
4973             {
4974               type = DECL_BIT_FIELD_TYPE (expr);
4975               break;
4976             }
4977           /* Fall through for fields that aren't bitfields.  */
4978
4979         case FUNCTION_DECL:
4980         case VAR_DECL:
4981         case CONST_DECL:
4982         case PARM_DECL:
4983         case RESULT_DECL:
4984         case TEMPLATE_PARM_INDEX:
4985           expr = mark_type_use (expr);
4986           type = TREE_TYPE (expr);
4987           break;
4988
4989         case ERROR_MARK:
4990           type = error_mark_node;
4991           break;
4992
4993         case COMPONENT_REF:
4994           mark_type_use (expr);
4995           type = is_bitfield_expr_with_lowered_type (expr);
4996           if (!type)
4997             type = TREE_TYPE (TREE_OPERAND (expr, 1));
4998           break;
4999
5000         case BIT_FIELD_REF:
5001           gcc_unreachable ();
5002
5003         case INTEGER_CST:
5004           /* We can get here when the id-expression refers to an
5005              enumerator.  */
5006           type = TREE_TYPE (expr);
5007           break;
5008
5009         default:
5010           gcc_unreachable ();
5011           return error_mark_node;
5012         }
5013     }
5014   else
5015     {
5016       /* Within a lambda-expression:
5017
5018          Every occurrence of decltype((x)) where x is a possibly
5019          parenthesized id-expression that names an entity of
5020          automatic storage duration is treated as if x were
5021          transformed into an access to a corresponding data member
5022          of the closure type that would have been declared if x
5023          were a use of the denoted entity.  */
5024       if (outer_automatic_var_p (expr)
5025           && current_function_decl
5026           && LAMBDA_FUNCTION_P (current_function_decl))
5027         type = capture_decltype (expr);
5028       else if (error_operand_p (expr))
5029         type = error_mark_node;
5030       else if (expr == current_class_ptr)
5031         /* If the expression is just "this", we want the
5032            cv-unqualified pointer for the "this" type.  */
5033         type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
5034       else
5035         {
5036           /* Otherwise, where T is the type of e, if e is an lvalue,
5037              decltype(e) is defined as T&; if an xvalue, T&&; otherwise, T. */
5038           cp_lvalue_kind clk = lvalue_kind (expr);
5039           type = unlowered_expr_type (expr);
5040           gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5041           if (clk != clk_none && !(clk & clk_class))
5042             type = cp_build_reference_type (type, (clk & clk_rvalueref));
5043         }
5044     }
5045
5046   return type;
5047 }
5048
5049 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or 
5050    __has_nothrow_copy, depending on assign_p.  */
5051
5052 static bool
5053 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
5054 {
5055   tree fns;
5056
5057   if (assign_p)
5058     {
5059       int ix;
5060       ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5061       if (ix < 0)
5062         return false;
5063       fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
5064     } 
5065   else if (TYPE_HAS_COPY_CTOR (type))
5066     {
5067       /* If construction of the copy constructor was postponed, create
5068          it now.  */
5069       if (CLASSTYPE_LAZY_COPY_CTOR (type))
5070         lazily_declare_fn (sfk_copy_constructor, type);
5071       if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5072         lazily_declare_fn (sfk_move_constructor, type);
5073       fns = CLASSTYPE_CONSTRUCTORS (type);
5074     }
5075   else
5076     return false;
5077
5078   for (; fns; fns = OVL_NEXT (fns))
5079     {
5080       tree fn = OVL_CURRENT (fns);
5081  
5082       if (assign_p)
5083         {
5084           if (copy_fn_p (fn) == 0)
5085             continue;
5086         }
5087       else if (copy_fn_p (fn) <= 0)
5088         continue;
5089
5090       if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5091         return false;
5092     }
5093
5094   return true;
5095 }
5096
5097 /* Actually evaluates the trait.  */
5098
5099 static bool
5100 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5101 {
5102   enum tree_code type_code1;
5103   tree t;
5104
5105   type_code1 = TREE_CODE (type1);
5106
5107   switch (kind)
5108     {
5109     case CPTK_HAS_NOTHROW_ASSIGN:
5110       type1 = strip_array_types (type1);
5111       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5112               && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5113                   || (CLASS_TYPE_P (type1)
5114                       && classtype_has_nothrow_assign_or_copy_p (type1,
5115                                                                  true))));
5116
5117     case CPTK_HAS_TRIVIAL_ASSIGN:
5118       /* ??? The standard seems to be missing the "or array of such a class
5119          type" wording for this trait.  */
5120       type1 = strip_array_types (type1);
5121       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5122               && (trivial_type_p (type1)
5123                     || (CLASS_TYPE_P (type1)
5124                         && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5125
5126     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5127       type1 = strip_array_types (type1);
5128       return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) 
5129               || (CLASS_TYPE_P (type1)
5130                   && (t = locate_ctor (type1))
5131                   && TYPE_NOTHROW_P (TREE_TYPE (t))));
5132
5133     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5134       type1 = strip_array_types (type1);
5135       return (trivial_type_p (type1)
5136               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5137
5138     case CPTK_HAS_NOTHROW_COPY:
5139       type1 = strip_array_types (type1);
5140       return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5141               || (CLASS_TYPE_P (type1)
5142                   && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5143
5144     case CPTK_HAS_TRIVIAL_COPY:
5145       /* ??? The standard seems to be missing the "or array of such a class
5146          type" wording for this trait.  */
5147       type1 = strip_array_types (type1);
5148       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5149               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5150
5151     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5152       type1 = strip_array_types (type1);
5153       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5154               || (CLASS_TYPE_P (type1)
5155                   && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5156
5157     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5158       return type_has_virtual_destructor (type1);
5159
5160     case CPTK_IS_ABSTRACT:
5161       return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5162
5163     case CPTK_IS_BASE_OF:
5164       return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5165               && DERIVED_FROM_P (type1, type2));
5166
5167     case CPTK_IS_CLASS:
5168       return (NON_UNION_CLASS_TYPE_P (type1));
5169
5170     case CPTK_IS_CONVERTIBLE_TO:
5171       /* TODO  */
5172       return false;
5173
5174     case CPTK_IS_EMPTY:
5175       return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5176
5177     case CPTK_IS_ENUM:
5178       return (type_code1 == ENUMERAL_TYPE);
5179
5180     case CPTK_IS_LITERAL_TYPE:
5181       return (literal_type_p (type1));
5182
5183     case CPTK_IS_POD:
5184       return (pod_type_p (type1));
5185
5186     case CPTK_IS_POLYMORPHIC:
5187       return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5188
5189     case CPTK_IS_STD_LAYOUT:
5190       return (std_layout_type_p (type1));
5191
5192     case CPTK_IS_TRIVIAL:
5193       return (trivial_type_p (type1));
5194
5195     case CPTK_IS_UNION:
5196       return (type_code1 == UNION_TYPE);
5197
5198     default:
5199       gcc_unreachable ();
5200       return false;
5201     }
5202 }
5203
5204 /* Returns true if TYPE is a complete type, an array of unknown bound,
5205    or (possibly cv-qualified) void, returns false otherwise.  */
5206
5207 static bool
5208 check_trait_type (tree type)
5209 {
5210   if (COMPLETE_TYPE_P (type))
5211     return true;
5212
5213   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5214       && COMPLETE_TYPE_P (TREE_TYPE (type)))
5215     return true;
5216
5217   if (VOID_TYPE_P (type))
5218     return true;
5219
5220   return false;
5221 }
5222
5223 /* Process a trait expression.  */
5224
5225 tree
5226 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5227 {
5228   gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5229               || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5230               || kind == CPTK_HAS_NOTHROW_COPY
5231               || kind == CPTK_HAS_TRIVIAL_ASSIGN
5232               || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5233               || kind == CPTK_HAS_TRIVIAL_COPY
5234               || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5235               || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR          
5236               || kind == CPTK_IS_ABSTRACT
5237               || kind == CPTK_IS_BASE_OF
5238               || kind == CPTK_IS_CLASS
5239               || kind == CPTK_IS_CONVERTIBLE_TO
5240               || kind == CPTK_IS_EMPTY
5241               || kind == CPTK_IS_ENUM
5242               || kind == CPTK_IS_LITERAL_TYPE
5243               || kind == CPTK_IS_POD
5244               || kind == CPTK_IS_POLYMORPHIC
5245               || kind == CPTK_IS_STD_LAYOUT
5246               || kind == CPTK_IS_TRIVIAL
5247               || kind == CPTK_IS_UNION);
5248
5249   if (kind == CPTK_IS_CONVERTIBLE_TO)
5250     {
5251       sorry ("__is_convertible_to");
5252       return error_mark_node;
5253     }
5254
5255   if (type1 == error_mark_node
5256       || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5257           && type2 == error_mark_node))
5258     return error_mark_node;
5259
5260   if (processing_template_decl)
5261     {
5262       tree trait_expr = make_node (TRAIT_EXPR);
5263       TREE_TYPE (trait_expr) = boolean_type_node;
5264       TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5265       TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5266       TRAIT_EXPR_KIND (trait_expr) = kind;
5267       return trait_expr;
5268     }
5269
5270   complete_type (type1);
5271   if (type2)
5272     complete_type (type2);
5273
5274   switch (kind)
5275     {
5276     case CPTK_HAS_NOTHROW_ASSIGN:
5277     case CPTK_HAS_TRIVIAL_ASSIGN:
5278     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5279     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5280     case CPTK_HAS_NOTHROW_COPY:
5281     case CPTK_HAS_TRIVIAL_COPY:
5282     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5283     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5284     case CPTK_IS_ABSTRACT:
5285     case CPTK_IS_EMPTY:
5286     case CPTK_IS_LITERAL_TYPE:
5287     case CPTK_IS_POD:
5288     case CPTK_IS_POLYMORPHIC:
5289     case CPTK_IS_STD_LAYOUT:
5290     case CPTK_IS_TRIVIAL:
5291       if (!check_trait_type (type1))
5292         {
5293           error ("incomplete type %qT not allowed", type1);
5294           return error_mark_node;
5295         }
5296       break;
5297
5298     case CPTK_IS_BASE_OF:
5299       if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5300           && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5301           && !COMPLETE_TYPE_P (type2))
5302         {
5303           error ("incomplete type %qT not allowed", type2);
5304           return error_mark_node;
5305         }
5306       break;
5307
5308     case CPTK_IS_CLASS:
5309     case CPTK_IS_ENUM:
5310     case CPTK_IS_UNION:
5311       break;
5312     
5313     case CPTK_IS_CONVERTIBLE_TO:
5314     default:
5315       gcc_unreachable ();
5316     }
5317
5318   return (trait_expr_value (kind, type1, type2)
5319           ? boolean_true_node : boolean_false_node);
5320 }
5321
5322 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5323    which is ignored for C++.  */
5324
5325 void
5326 set_float_const_decimal64 (void)
5327 {
5328 }
5329
5330 void
5331 clear_float_const_decimal64 (void)
5332 {
5333 }
5334
5335 bool
5336 float_const_decimal64_p (void)
5337 {
5338   return 0;
5339 }
5340
5341 \f
5342 /* Return true if T is a literal type.   */
5343
5344 bool
5345 literal_type_p (tree t)
5346 {
5347   if (SCALAR_TYPE_P (t)
5348       || TREE_CODE (t) == REFERENCE_TYPE)
5349     return true;
5350   if (CLASS_TYPE_P (t))
5351     {
5352       t = complete_type (t);
5353       gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
5354       return CLASSTYPE_LITERAL_P (t);
5355     }
5356   if (TREE_CODE (t) == ARRAY_TYPE)
5357     return literal_type_p (strip_array_types (t));
5358   return false;
5359 }
5360
5361 /* If DECL is a variable declared `constexpr', require its type
5362    be literal.  Return the DECL if OK, otherwise NULL.  */
5363
5364 tree
5365 ensure_literal_type_for_constexpr_object (tree decl)
5366 {
5367   tree type = TREE_TYPE (decl);
5368   if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5369       && !processing_template_decl)
5370     {
5371       if (CLASS_TYPE_P (type) && !COMPLETE_TYPE_P (complete_type (type)))
5372         /* Don't complain here, we'll complain about incompleteness
5373            when we try to initialize the variable.  */;
5374       else if (!literal_type_p (type))
5375         {
5376           error ("the type %qT of constexpr variable %qD is not literal",
5377                  type, decl);
5378           return NULL;
5379         }
5380     }
5381   return decl;
5382 }
5383
5384 /* Representation of entries in the constexpr function definition table.  */
5385
5386 typedef struct GTY(()) constexpr_fundef {
5387   tree decl;
5388   tree body;
5389 } constexpr_fundef;
5390
5391 /* This table holds all constexpr function definitions seen in
5392    the current translation unit.  */
5393
5394 static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
5395
5396 /* Utility function used for managing the constexpr function table.
5397    Return true if the entries pointed to by P and Q are for the
5398    same constexpr function.  */
5399
5400 static inline int
5401 constexpr_fundef_equal (const void *p, const void *q)
5402 {
5403   const constexpr_fundef *lhs = (const constexpr_fundef *) p;
5404   const constexpr_fundef *rhs = (const constexpr_fundef *) q;
5405   return lhs->decl == rhs->decl;
5406 }
5407
5408 /* Utility function used for managing the constexpr function table.
5409    Return a hash value for the entry pointed to by Q.  */
5410
5411 static inline hashval_t
5412 constexpr_fundef_hash (const void *p)
5413 {
5414   const constexpr_fundef *fundef = (const constexpr_fundef *) p;
5415   return DECL_UID (fundef->decl);
5416 }
5417
5418 /* Return a previously saved definition of function FUN.   */
5419
5420 static constexpr_fundef *
5421 retrieve_constexpr_fundef (tree fun)
5422 {
5423   constexpr_fundef fundef = { NULL, NULL };
5424   if (constexpr_fundef_table == NULL)
5425     return NULL;
5426
5427   fundef.decl = fun;
5428   return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
5429 }
5430
5431 /* Check whether the parameter and return types of FUN are valid for a
5432    constexpr function, and complain if COMPLAIN.  */
5433
5434 static bool
5435 is_valid_constexpr_fn (tree fun, bool complain)
5436 {
5437   tree parm = FUNCTION_FIRST_USER_PARM (fun);
5438   bool ret = true;
5439   for (; parm != NULL; parm = TREE_CHAIN (parm))
5440     if (!literal_type_p (TREE_TYPE (parm)))
5441       {
5442         ret = false;
5443         if (complain)
5444           error ("invalid type for parameter %d of constexpr "
5445                  "function %q+#D", DECL_PARM_INDEX (parm), fun);
5446       }
5447
5448   if (!DECL_CONSTRUCTOR_P (fun))
5449     {
5450       tree rettype = TREE_TYPE (TREE_TYPE (fun));
5451       if (!literal_type_p (rettype))
5452         {
5453           ret = false;
5454           if (complain)
5455             error ("invalid return type %qT of constexpr function %q+D",
5456                    rettype, fun);
5457         }
5458
5459       /* Check this again here for cxx_eval_call_expression.  */
5460       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5461           && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
5462         {
5463           ret = false;
5464           if (complain)
5465             error ("enclosing class of %q+#D is not a literal type", fun);
5466         }
5467     }
5468
5469   return ret;
5470 }
5471
5472 /* Return non-null if FUN certainly designates a valid constexpr function
5473    declaration.  Otherwise return NULL.  Issue appropriate diagnostics
5474    if necessary.  Note that we only check the declaration, not the body
5475    of the function.  */
5476
5477 tree
5478 validate_constexpr_fundecl (tree fun)
5479 {
5480   if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
5481     return NULL;
5482   else if (DECL_CLONED_FUNCTION_P (fun))
5483     /* We already checked the original function.  */
5484     return fun;
5485
5486   if (!is_valid_constexpr_fn (fun, !DECL_TEMPLATE_INFO (fun)))
5487     {
5488       DECL_DECLARED_CONSTEXPR_P (fun) = false;
5489       return NULL;
5490     }
5491
5492   return fun;
5493 }
5494
5495 /* Subroutine of  build_constexpr_constructor_member_initializers.
5496    The expression tree T represents a data member initialization
5497    in a (constexpr) constructor definition.  Build a pairing of
5498    the data member with its initializer, and prepend that pair
5499    to the existing initialization pair INITS.  */
5500
5501 static bool
5502 build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec)
5503 {
5504   tree member, init;
5505   if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
5506     t = TREE_OPERAND (t, 0);
5507   if (TREE_CODE (t) == EXPR_STMT)
5508     t = TREE_OPERAND (t, 0);
5509   if (t == error_mark_node)
5510     return false;
5511   if (TREE_CODE (t) == STATEMENT_LIST)
5512     {
5513       tree_stmt_iterator i;
5514       for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5515         {
5516           if (! build_data_member_initialization (tsi_stmt (i), vec))
5517             return false;
5518         }
5519       return true;
5520     }
5521   if (TREE_CODE (t) == CLEANUP_STMT)
5522     {
5523       /* We can't see a CLEANUP_STMT in a constructor for a literal class,
5524          but we can in a constexpr constructor for a non-literal class.  Just
5525          ignore it; either all the initialization will be constant, in which
5526          case the cleanup can't run, or it can't be constexpr.
5527          Still recurse into CLEANUP_BODY.  */
5528       return build_data_member_initialization (CLEANUP_BODY (t), vec);
5529     }
5530   if (TREE_CODE (t) == CONVERT_EXPR)
5531     t = TREE_OPERAND (t, 0);
5532   if (TREE_CODE (t) == INIT_EXPR
5533       || TREE_CODE (t) == MODIFY_EXPR)
5534     {
5535       member = TREE_OPERAND (t, 0);
5536       init = unshare_expr (TREE_OPERAND (t, 1));
5537     }
5538   else
5539     {
5540       gcc_assert (TREE_CODE (t) == CALL_EXPR);
5541       member = CALL_EXPR_ARG (t, 0);
5542       /* We don't use build_cplus_new here because it complains about
5543          abstract bases.  Leaving the call unwrapped means that it has the
5544          wrong type, but cxx_eval_constant_expression doesn't care.  */
5545       init = unshare_expr (t);
5546     }
5547   if (TREE_CODE (member) == INDIRECT_REF)
5548     member = TREE_OPERAND (member, 0);
5549   if (TREE_CODE (member) == NOP_EXPR)
5550     {
5551       tree op = member;
5552       STRIP_NOPS (op);
5553       if (TREE_CODE (op) == ADDR_EXPR)
5554         {
5555           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5556                       (TREE_TYPE (TREE_TYPE (op)),
5557                        TREE_TYPE (TREE_TYPE (member))));
5558           /* Initializing a cv-qualified member; we need to look through
5559              the const_cast.  */
5560           member = op;
5561         }
5562       else
5563         {
5564           /* We don't put out anything for an empty base.  */
5565           gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
5566           /* But if the initializer isn't constexpr, leave it in so we
5567              complain later.  */
5568           if (potential_constant_expression (init))
5569             return true;
5570         }
5571     }
5572   if (TREE_CODE (member) == ADDR_EXPR)
5573     member = TREE_OPERAND (member, 0);
5574   if (TREE_CODE (member) == COMPONENT_REF
5575       /* If we're initializing a member of a subaggregate, it's a vtable
5576          pointer.  Leave it as COMPONENT_REF so we remember the path to get
5577          to the vfield.  */
5578       && TREE_CODE (TREE_OPERAND (member, 0)) != COMPONENT_REF)
5579     member = TREE_OPERAND (member, 1);
5580   CONSTRUCTOR_APPEND_ELT (*vec, member, init);
5581   return true;
5582 }
5583
5584 /* Make sure that there are no statements after LAST in the constructor
5585    body represented by LIST.  */
5586
5587 bool
5588 check_constexpr_ctor_body (tree last, tree list)
5589 {
5590   bool ok = true;
5591   if (TREE_CODE (list) == STATEMENT_LIST)
5592     {
5593       tree_stmt_iterator i = tsi_last (list);
5594       for (; !tsi_end_p (i); tsi_prev (&i))
5595         {
5596           tree t = tsi_stmt (i);
5597           if (t == last)
5598             break;
5599           if (TREE_CODE (t) == BIND_EXPR)
5600             {
5601               if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
5602                 return false;
5603               else
5604                 continue;
5605             }
5606           /* We currently allow typedefs and static_assert.
5607              FIXME allow them in the standard, too.  */
5608           if (TREE_CODE (t) != STATIC_ASSERT)
5609             {
5610               ok = false;
5611               break;
5612             }
5613         }
5614     }
5615   else if (list != last
5616            && TREE_CODE (list) != STATIC_ASSERT)
5617     ok = false;
5618   if (!ok)
5619     {
5620       error ("constexpr constructor does not have empty body");
5621       DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
5622     }
5623   return ok;
5624 }
5625
5626 /* Build compile-time evalable representations of member-initializer list
5627    for a constexpr constructor.  */
5628
5629 static tree
5630 build_constexpr_constructor_member_initializers (tree type, tree body)
5631 {
5632   VEC(constructor_elt,gc) *vec = NULL;
5633   bool ok = true;
5634   if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
5635       || TREE_CODE (body) == EH_SPEC_BLOCK)
5636     body = TREE_OPERAND (body, 0);
5637   if (TREE_CODE (body) == STATEMENT_LIST)
5638     body = STATEMENT_LIST_HEAD (body)->stmt;
5639   body = BIND_EXPR_BODY (body);
5640   if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5641     {
5642       body = TREE_OPERAND (body, 0);
5643       if (TREE_CODE (body) == EXPR_STMT)
5644         body = TREE_OPERAND (body, 0);
5645       if (TREE_CODE (body) == INIT_EXPR
5646           && (same_type_ignoring_top_level_qualifiers_p
5647               (TREE_TYPE (TREE_OPERAND (body, 0)),
5648                current_class_type)))
5649         {
5650           /* Trivial copy.  */
5651           return TREE_OPERAND (body, 1);
5652         }
5653       ok = build_data_member_initialization (body, &vec);
5654     }
5655   else if (TREE_CODE (body) == STATEMENT_LIST)
5656     {
5657       tree_stmt_iterator i;
5658       for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5659         {
5660           ok = build_data_member_initialization (tsi_stmt (i), &vec);
5661           if (!ok)
5662             break;
5663         }
5664     }
5665   else
5666     gcc_assert (errorcount > 0);
5667   if (ok)
5668     return build_constructor (type, vec);
5669   else
5670     return error_mark_node;
5671 }
5672
5673 /* Subroutine of register_constexpr_fundef.  BODY is the body of a function
5674    declared to be constexpr, or a sub-statement thereof.  Returns the
5675    return value if suitable, error_mark_node for a statement not allowed in
5676    a constexpr function, or NULL_TREE if no return value was found.  */
5677
5678 static tree
5679 constexpr_fn_retval (tree body)
5680 {
5681   switch (TREE_CODE (body))
5682     {
5683     case STATEMENT_LIST:
5684       {
5685         tree_stmt_iterator i;
5686         tree expr = NULL_TREE;
5687         for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5688           {
5689             tree s = constexpr_fn_retval (tsi_stmt (i));
5690             if (s == error_mark_node)
5691               return error_mark_node;
5692             else if (s == NULL_TREE)
5693               /* Keep iterating.  */;
5694             else if (expr)
5695               /* Multiple return statements.  */
5696               return error_mark_node;
5697             else
5698               expr = s;
5699           }
5700         return expr;
5701       }
5702
5703     case RETURN_EXPR:
5704       return unshare_expr (TREE_OPERAND (body, 0));
5705
5706     case DECL_EXPR:
5707       if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL)
5708         return NULL_TREE;
5709       return error_mark_node;
5710
5711     case USING_STMT:
5712       return NULL_TREE;
5713
5714     default:
5715       return error_mark_node;
5716     }
5717 }
5718
5719 /* We are processing the definition of the constexpr function FUN.
5720    Check that its BODY fulfills the propriate requirements and
5721    enter it in the constexpr function definition table.
5722    For constructor BODY is actually the TREE_LIST of the
5723    member-initializer list.  */
5724
5725 tree
5726 register_constexpr_fundef (tree fun, tree body)
5727 {
5728   constexpr_fundef entry;
5729   constexpr_fundef **slot;
5730
5731   if (DECL_CONSTRUCTOR_P (fun))
5732     body = build_constexpr_constructor_member_initializers
5733       (DECL_CONTEXT (fun), body);
5734   else
5735     {
5736       if (TREE_CODE (body) == BIND_EXPR)
5737         body = BIND_EXPR_BODY (body);
5738       if (TREE_CODE (body) == EH_SPEC_BLOCK)
5739         body = EH_SPEC_STMTS (body);
5740       if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
5741         body = TREE_OPERAND (body, 0);
5742       if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5743         body = TREE_OPERAND (body, 0);
5744       body = constexpr_fn_retval (body);
5745       if (body == NULL_TREE || body == error_mark_node)
5746         {
5747           error ("body of constexpr function %qD not a return-statement", fun);
5748           DECL_DECLARED_CONSTEXPR_P (fun) = false;
5749           return NULL;
5750         }
5751     }
5752
5753   if (!potential_rvalue_constant_expression (body))
5754     {
5755       DECL_DECLARED_CONSTEXPR_P (fun) = false;
5756       if (!DECL_TEMPLATE_INFO (fun))
5757         require_potential_rvalue_constant_expression (body);
5758       return NULL;
5759     }
5760
5761   /* Create the constexpr function table if necessary.  */
5762   if (constexpr_fundef_table == NULL)
5763     constexpr_fundef_table = htab_create_ggc (101,
5764                                               constexpr_fundef_hash,
5765                                               constexpr_fundef_equal,
5766                                               ggc_free);
5767   entry.decl = fun;
5768   entry.body = body;
5769   slot = (constexpr_fundef **)
5770     htab_find_slot (constexpr_fundef_table, &entry, INSERT);
5771
5772   gcc_assert (*slot == NULL);
5773   *slot = ggc_alloc_constexpr_fundef ();
5774   **slot = entry;
5775
5776   return fun;
5777 }
5778
5779 /* Objects of this type represent calls to constexpr functions
5780    along with the bindings of parameters to their arguments, for
5781    the purpose of compile time evaluation.  */
5782
5783 typedef struct GTY(()) constexpr_call {
5784   /* Description of the constexpr function definition.  */
5785   constexpr_fundef *fundef;
5786   /* Parameter bindings enironment.  A TREE_LIST where each TREE_PURPOSE
5787      is a parameter _DECL and the TREE_VALUE is the value of the parameter.
5788      Note: This arrangement is made to accomodate the use of
5789      iterative_hash_template_arg (see pt.c).  If you change this
5790      representation, also change the hash calculation in
5791      cxx_eval_call_expression.  */
5792   tree bindings;
5793   /* Result of the call.
5794        NULL means the call is being evaluated.
5795        error_mark_node means that the evaluation was erroneous;
5796        otherwise, the actuall value of the call.  */
5797   tree result;
5798   /* The hash of this call; we remember it here to avoid having to
5799      recalculate it when expanding the hash table.  */
5800   hashval_t hash;
5801 } constexpr_call;
5802
5803 /* A table of all constexpr calls that have been evaluated by the
5804    compiler in this translation unit.  */
5805
5806 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
5807
5808 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
5809                                           bool, bool, bool *);
5810
5811 /* Compute a hash value for a constexpr call representation.  */
5812
5813 static hashval_t
5814 constexpr_call_hash (const void *p)
5815 {
5816   const constexpr_call *info = (const constexpr_call *) p;
5817   return info->hash;
5818 }
5819
5820 /* Return 1 if the objects pointed to by P and Q represent calls
5821    to the same constexpr function with the same arguments.
5822    Otherwise, return 0.  */
5823
5824 static int
5825 constexpr_call_equal (const void *p, const void *q)
5826 {
5827   const constexpr_call *lhs = (const constexpr_call *) p;
5828   const constexpr_call *rhs = (const constexpr_call *) q;
5829   tree lhs_bindings;
5830   tree rhs_bindings;
5831   if (lhs == rhs)
5832     return 1;
5833   if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
5834     return 0;
5835   lhs_bindings = lhs->bindings;
5836   rhs_bindings = rhs->bindings;
5837   while (lhs_bindings != NULL && rhs_bindings != NULL)
5838     {
5839       tree lhs_arg = TREE_VALUE (lhs_bindings);
5840       tree rhs_arg = TREE_VALUE (rhs_bindings);
5841       gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
5842       if (!cp_tree_equal (lhs_arg, rhs_arg))
5843         return 0;
5844       lhs_bindings = TREE_CHAIN (lhs_bindings);
5845       rhs_bindings = TREE_CHAIN (rhs_bindings);
5846     }
5847   return lhs_bindings == rhs_bindings;
5848 }
5849
5850 /* Initialize the constexpr call table, if needed.  */
5851
5852 static void
5853 maybe_initialize_constexpr_call_table (void)
5854 {
5855   if (constexpr_call_table == NULL)
5856     constexpr_call_table = htab_create_ggc (101,
5857                                             constexpr_call_hash,
5858                                             constexpr_call_equal,
5859                                             ggc_free);
5860 }
5861
5862 /* Return true if T designates the implied `this' parameter.  */
5863
5864 static inline bool
5865 is_this_parameter (tree t)
5866 {
5867   return t == current_class_ptr;
5868 }
5869
5870 /* We have an expression tree T that represents a call, either CALL_EXPR
5871    or AGGR_INIT_EXPR.  If the call is lexically to a named function,
5872    retrun the _DECL for that function.  */
5873
5874 static tree
5875 get_function_named_in_call (tree t)
5876 {
5877   tree fun = NULL;
5878   switch (TREE_CODE (t))
5879     {
5880     case CALL_EXPR:
5881       fun = CALL_EXPR_FN (t);
5882       break;
5883
5884     case AGGR_INIT_EXPR:
5885       fun = AGGR_INIT_EXPR_FN (t);
5886       break;
5887
5888     default:
5889       gcc_unreachable();
5890       break;
5891     }
5892   if (TREE_CODE (fun) == ADDR_EXPR
5893       && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
5894     fun = TREE_OPERAND (fun, 0);
5895   return fun;
5896 }
5897
5898 /* We have an expression tree T that represents a call, either CALL_EXPR
5899    or AGGR_INIT_EXPR.  Return the Nth argument.  */
5900
5901 static inline tree
5902 get_nth_callarg (tree t, int n)
5903 {
5904   switch (TREE_CODE (t))
5905     {
5906     case CALL_EXPR:
5907       return CALL_EXPR_ARG (t, n);
5908
5909     case AGGR_INIT_EXPR:
5910       return AGGR_INIT_EXPR_ARG (t, n);
5911
5912     default:
5913       gcc_unreachable ();
5914       return NULL;
5915     }
5916 }
5917
5918 /* Look up the binding of the function parameter T in a constexpr
5919    function call context CALL.  */
5920
5921 static tree
5922 lookup_parameter_binding (const constexpr_call *call, tree t)
5923 {
5924   tree b = purpose_member (t, call->bindings);
5925   return TREE_VALUE (b);
5926 }
5927
5928 /* Attempt to evaluate T which represents a call to a builtin function.
5929    We assume here that all builtin functions evaluate to scalar types
5930    represented by _CST nodes.  */
5931
5932 static tree
5933 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
5934                                 bool allow_non_constant, bool addr,
5935                                 bool *non_constant_p)
5936 {
5937   const int nargs = call_expr_nargs (t);
5938   tree *args = (tree *) alloca (nargs * sizeof (tree));
5939   tree new_call;
5940   int i;
5941   for (i = 0; i < nargs; ++i)
5942     {
5943       args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
5944                                               allow_non_constant, addr,
5945                                               non_constant_p);
5946       if (allow_non_constant && *non_constant_p)
5947         return t;
5948     }
5949   if (*non_constant_p)
5950     return t;
5951   new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
5952                                    CALL_EXPR_FN (t), nargs, args);
5953   return fold (new_call);
5954 }
5955
5956 /* TEMP is the constant value of a temporary object of type TYPE.  Adjust
5957    the type of the value to match.  */
5958
5959 static tree
5960 adjust_temp_type (tree type, tree temp)
5961 {
5962   if (TREE_TYPE (temp) == type)
5963     return temp;
5964   /* Avoid wrapping an aggregate value in a NOP_EXPR.  */
5965   if (TREE_CODE (temp) == CONSTRUCTOR)
5966     return build_constructor (type, CONSTRUCTOR_ELTS (temp));
5967   gcc_assert (SCALAR_TYPE_P (type));
5968   return cp_fold_convert (type, temp);
5969 }
5970
5971 /* Subroutine of cxx_eval_call_expression.
5972    We are processing a call expression (either CALL_EXPR or
5973    AGGR_INIT_EXPR) in the call context of OLD_CALL.  Evaluate
5974    all arguments and bind their values to correspondings
5975    parameters, making up the NEW_CALL context.  */
5976
5977 static void
5978 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
5979                              constexpr_call *new_call,
5980                              bool allow_non_constant,
5981                              bool *non_constant_p)
5982 {
5983   const int nargs = call_expr_nargs (t);
5984   tree fun = new_call->fundef->decl;
5985   tree parms = DECL_ARGUMENTS (fun);
5986   int i;
5987   for (i = 0; i < nargs; ++i)
5988     {
5989       tree x, arg;
5990       tree type = parms ? TREE_TYPE (parms) : void_type_node;
5991       /* For member function, the first argument is a pointer to the implied
5992          object.  And for an object contruction, don't bind `this' before
5993          it is fully constructed.  */
5994       if (i == 0 && DECL_CONSTRUCTOR_P (fun))
5995         goto next;
5996       x = get_nth_callarg (t, i);
5997       arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
5998                                           TREE_CODE (type) == REFERENCE_TYPE,
5999                                           non_constant_p);
6000       /* Don't VERIFY_CONSTANT here.  */
6001       if (*non_constant_p && allow_non_constant)
6002         return;
6003       /* Just discard ellipsis args after checking their constantitude.  */
6004       if (!parms)
6005         continue;
6006       if (*non_constant_p)
6007         /* Don't try to adjust the type of non-constant args.  */
6008         goto next;
6009
6010       /* Make sure the binding has the same type as the parm.  */
6011       if (TREE_CODE (type) != REFERENCE_TYPE)
6012         arg = adjust_temp_type (type, arg);
6013       new_call->bindings = tree_cons (parms, arg, new_call->bindings);
6014     next:
6015       parms = TREE_CHAIN (parms);
6016     }
6017 }
6018
6019 /* Variables and functions to manage constexpr call expansion context.
6020    These do not need to be marked for PCH or GC.  */
6021
6022 /* FIXME remember and print actual constant arguments.  */
6023 static VEC(tree,heap) *call_stack = NULL;
6024 static int call_stack_tick;
6025 static int last_cx_error_tick;
6026
6027 static bool
6028 push_cx_call_context (tree call)
6029 {
6030   ++call_stack_tick;
6031   if (!EXPR_HAS_LOCATION (call))
6032     SET_EXPR_LOCATION (call, input_location);
6033   VEC_safe_push (tree, heap, call_stack, call);
6034   if (VEC_length (tree, call_stack) > (unsigned) max_constexpr_depth)
6035     return false;
6036   return true;
6037 }
6038
6039 static void
6040 pop_cx_call_context (void)
6041 {
6042   ++call_stack_tick;
6043   VEC_pop (tree, call_stack);
6044 }
6045
6046 VEC(tree,heap) *
6047 cx_error_context (void)
6048 {
6049   VEC(tree,heap) *r = NULL;
6050   if (call_stack_tick != last_cx_error_tick
6051       && !VEC_empty (tree, call_stack))
6052     r = call_stack;
6053   last_cx_error_tick = call_stack_tick;
6054   return r;
6055 }
6056
6057 /* Subroutine of cxx_eval_constant_expression.
6058    Evaluate the call expression tree T in the context of OLD_CALL expression
6059    evaluation.  */
6060
6061 static tree
6062 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
6063                           bool allow_non_constant, bool addr,
6064                           bool *non_constant_p)
6065 {
6066   location_t loc = EXPR_LOC_OR_HERE (t);
6067   tree fun = get_function_named_in_call (t);
6068   tree result;
6069   constexpr_call new_call = { NULL, NULL, NULL, 0 };
6070   constexpr_call **slot;
6071   constexpr_call *entry;
6072   bool depth_ok;
6073
6074   if (TREE_CODE (fun) != FUNCTION_DECL)
6075     {
6076       /* Might be a constexpr function pointer.  */
6077       fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
6078                                           /*addr*/false, non_constant_p);
6079       if (TREE_CODE (fun) == ADDR_EXPR)
6080         fun = TREE_OPERAND (fun, 0);
6081     }
6082   if (TREE_CODE (fun) != FUNCTION_DECL)
6083     {
6084       if (!allow_non_constant)
6085         error_at (loc, "expression %qE does not designate a constexpr "
6086                   "function", fun);
6087       *non_constant_p = true;
6088       return t;
6089     }
6090   if (DECL_CLONED_FUNCTION_P (fun))
6091     fun = DECL_CLONED_FUNCTION (fun);
6092   if (is_builtin_fn (fun))
6093     return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
6094                                            addr, non_constant_p);
6095   if (!DECL_DECLARED_CONSTEXPR_P (fun))
6096     {
6097       if (!allow_non_constant)
6098         {
6099           error_at (loc, "%qD is not a constexpr function", fun);
6100           if (DECL_TEMPLATE_INFO (fun)
6101               && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
6102                                             (DECL_TI_TEMPLATE (fun))))
6103             is_valid_constexpr_fn (fun, true);
6104         }
6105       *non_constant_p = true;
6106       return t;
6107     }
6108
6109   /* Shortcut trivial copy constructor/op=.  */
6110   if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
6111     {
6112       tree arg = convert_from_reference (get_nth_callarg (t, 1));
6113       return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
6114                                            addr, non_constant_p);
6115     }
6116
6117   /* If in direct recursive call, optimize definition search.  */
6118   if (old_call != NULL && old_call->fundef->decl == fun)
6119     new_call.fundef = old_call->fundef;
6120   else
6121     {
6122       new_call.fundef = retrieve_constexpr_fundef (fun);
6123       if (new_call.fundef == NULL || new_call.fundef->body == NULL)
6124         {
6125           if (!allow_non_constant)
6126             error_at (loc, "%qD used before its definition", fun);
6127           *non_constant_p = true;
6128           return t;
6129         }
6130     }
6131   cxx_bind_parameters_in_call (old_call, t, &new_call,
6132                                allow_non_constant, non_constant_p);
6133   if (*non_constant_p)
6134     return t;
6135
6136   depth_ok = push_cx_call_context (t);
6137
6138   new_call.hash
6139     = iterative_hash_template_arg (new_call.bindings,
6140                                    constexpr_fundef_hash (new_call.fundef));
6141
6142   /* If we have seen this call before, we are done.  */
6143   maybe_initialize_constexpr_call_table ();
6144   slot = (constexpr_call **)
6145     htab_find_slot (constexpr_call_table, &new_call, INSERT);
6146   entry = *slot;
6147   if (entry == NULL)
6148     {
6149       /* We need to keep a pointer to the entry, not just the slot, as the
6150          slot can move in the call to cxx_eval_builtin_function_call.  */
6151       *slot = entry = ggc_alloc_constexpr_call ();
6152       *entry = new_call;
6153     }
6154   /* Calls which are in progress have their result set to NULL
6155      so that we can detect circular dependencies.  */
6156   else if (entry->result == NULL)
6157     {
6158       if (!allow_non_constant)
6159         error ("call has circular dependency");
6160       *non_constant_p = true;
6161       entry->result = result = error_mark_node;
6162     }
6163
6164   if (!depth_ok)
6165     {
6166       if (!allow_non_constant)
6167         error ("constexpr evaluation depth exceeds maximum of %d (use "
6168                "-fconstexpr-depth= to increase the maximum)",
6169                max_constexpr_depth);
6170       *non_constant_p = true;
6171       entry->result = result = error_mark_node;
6172     }
6173   else
6174     {
6175       result = entry->result;
6176       if (!result || (result == error_mark_node && !allow_non_constant))
6177         result = (cxx_eval_constant_expression
6178                   (&new_call, new_call.fundef->body,
6179                    allow_non_constant, addr,
6180                    non_constant_p));
6181       if (result == error_mark_node)
6182         *non_constant_p = true;
6183       if (*non_constant_p)
6184         entry->result = result = error_mark_node;
6185       else
6186         {
6187           /* If this was a call to initialize an object, set the type of
6188              the CONSTRUCTOR to the type of that object.  */
6189           if (DECL_CONSTRUCTOR_P (fun))
6190             {
6191               tree ob_arg = get_nth_callarg (t, 0);
6192               STRIP_NOPS (ob_arg);
6193               gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
6194                           && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
6195               result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
6196                                          result);
6197             }
6198           entry->result = result;
6199         }
6200     }
6201
6202   pop_cx_call_context ();
6203   return unshare_expr (result);
6204 }
6205
6206 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase.  */
6207
6208 bool
6209 reduced_constant_expression_p (tree t)
6210 {
6211   if (TREE_OVERFLOW_P (t))
6212     /* Integer overflow makes this not a constant expression.  */
6213     return false;
6214   /* FIXME are we calling this too much?  */
6215   return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6216 }
6217
6218 /* Some expressions may have constant operands but are not constant
6219    themselves, such as 1/0.  Call this function (or rather, the macro
6220    following it) to check for that condition.
6221
6222    We only call this in places that require an arithmetic constant, not in
6223    places where we might have a non-constant expression that can be a
6224    component of a constant expression, such as the address of a constexpr
6225    variable that might be dereferenced later.  */
6226
6227 static bool
6228 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p)
6229 {
6230   if (!*non_constant_p && !reduced_constant_expression_p (t))
6231     {
6232       if (!allow_non_constant)
6233         {
6234           /* If T was already folded to a _CST with TREE_OVERFLOW set,
6235              printing the folded constant isn't helpful.  */
6236           if (TREE_OVERFLOW_P (t))
6237             {
6238               permerror (input_location, "overflow in constant expression");
6239               /* If we're being permissive (and are in an enforcing
6240                  context), consider this constant.  */
6241               if (flag_permissive)
6242                 return false;
6243             }
6244           else
6245             error ("%q+E is not a constant expression", t);
6246         }
6247       *non_constant_p = true;
6248     }
6249   return *non_constant_p;
6250 }
6251 #define VERIFY_CONSTANT(X)                                              \
6252 do {                                                                    \
6253   if (verify_constant ((X), allow_non_constant, non_constant_p))        \
6254     return t;                                                           \
6255  } while (0)
6256
6257 /* Subroutine of cxx_eval_constant_expression.
6258    Attempt to reduce the unary expression tree T to a compile time value.
6259    If successful, return the value.  Otherwise issue a diagnostic
6260    and return error_mark_node.  */
6261
6262 static tree
6263 cxx_eval_unary_expression (const constexpr_call *call, tree t,
6264                            bool allow_non_constant, bool addr,
6265                            bool *non_constant_p)
6266 {
6267   tree r;
6268   tree orig_arg = TREE_OPERAND (t, 0);
6269   tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6270                                            addr, non_constant_p);
6271   VERIFY_CONSTANT (arg);
6272   if (arg == orig_arg)
6273     return t;
6274   r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6275   VERIFY_CONSTANT (r);
6276   return r;
6277 }
6278
6279 /* Subroutine of cxx_eval_constant_expression.
6280    Like cxx_eval_unary_expression, except for binary expressions.  */
6281
6282 static tree
6283 cxx_eval_binary_expression (const constexpr_call *call, tree t,
6284                             bool allow_non_constant, bool addr,
6285                             bool *non_constant_p)
6286 {
6287   tree r;
6288   tree orig_lhs = TREE_OPERAND (t, 0);
6289   tree orig_rhs = TREE_OPERAND (t, 1);
6290   tree lhs, rhs;
6291   lhs = cxx_eval_constant_expression (call, orig_lhs,
6292                                       allow_non_constant, addr,
6293                                       non_constant_p);
6294   VERIFY_CONSTANT (lhs);
6295   rhs = cxx_eval_constant_expression (call, orig_rhs,
6296                                       allow_non_constant, addr,
6297                                       non_constant_p);
6298   VERIFY_CONSTANT (rhs);
6299   if (lhs == orig_lhs && rhs == orig_rhs)
6300     return t;
6301   r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6302   VERIFY_CONSTANT (r);
6303   return r;
6304 }
6305
6306 /* Subroutine of cxx_eval_constant_expression.
6307    Attempt to evaluate condition expressions.  Dead branches are not
6308    looked into.  */
6309
6310 static tree
6311 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6312                                  bool allow_non_constant, bool addr,
6313                                  bool *non_constant_p)
6314 {
6315   tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6316                                            allow_non_constant, addr,
6317                                            non_constant_p);
6318   VERIFY_CONSTANT (val);
6319   /* Don't VERIFY_CONSTANT the other operands.  */
6320   if (integer_zerop (val))
6321     return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6322                                          allow_non_constant, addr,
6323                                          non_constant_p);
6324   return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6325                                        allow_non_constant, addr,
6326                                        non_constant_p);
6327 }
6328
6329 /* Subroutine of cxx_eval_constant_expression.
6330    Attempt to reduce a reference to an array slot.  */
6331
6332 static tree
6333 cxx_eval_array_reference (const constexpr_call *call, tree t,
6334                           bool allow_non_constant, bool addr,
6335                           bool *non_constant_p)
6336 {
6337   tree oldary = TREE_OPERAND (t, 0);
6338   tree ary = cxx_eval_constant_expression (call, oldary,
6339                                            allow_non_constant, addr,
6340                                            non_constant_p);
6341   tree index, oldidx;
6342   HOST_WIDE_INT i;
6343   tree elem_type;
6344   unsigned len, elem_nchars = 1;
6345   if (*non_constant_p)
6346     return t;
6347   oldidx = TREE_OPERAND (t, 1);
6348   index = cxx_eval_constant_expression (call, oldidx,
6349                                         allow_non_constant, false,
6350                                         non_constant_p);
6351   VERIFY_CONSTANT (index);
6352   if (addr && ary == oldary && index == oldidx)
6353     return t;
6354   else if (addr)
6355     return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6356   elem_type = TREE_TYPE (TREE_TYPE (ary));
6357   if (TREE_CODE (ary) == CONSTRUCTOR)
6358     len = CONSTRUCTOR_NELTS (ary);
6359   else
6360     {
6361       elem_nchars = (TYPE_PRECISION (elem_type)
6362                      / TYPE_PRECISION (char_type_node));
6363       len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
6364     }
6365   if (compare_tree_int (index, len) >= 0)
6366     {
6367       if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
6368         {
6369           /* If it's within the array bounds but doesn't have an explicit
6370              initializer, it's value-initialized.  */
6371           tree val = build_value_init (elem_type, tf_warning_or_error);
6372           return cxx_eval_constant_expression (call, val,
6373                                                allow_non_constant, addr,
6374                                                non_constant_p);
6375         }
6376
6377       if (!allow_non_constant)
6378         error ("array subscript out of bound");
6379       *non_constant_p = true;
6380       return t;
6381     }
6382   i = tree_low_cst (index, 0);
6383   if (TREE_CODE (ary) == CONSTRUCTOR)
6384     return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
6385   else if (elem_nchars == 1)
6386     return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6387                           TREE_STRING_POINTER (ary)[i]);
6388   else
6389     {
6390       tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
6391       return native_interpret_expr (type, (const unsigned char *)
6392                                           TREE_STRING_POINTER (ary)
6393                                           + i * elem_nchars, elem_nchars);
6394     }
6395   /* Don't VERIFY_CONSTANT here.  */
6396 }
6397
6398 /* Subroutine of cxx_eval_constant_expression.
6399    Attempt to reduce a field access of a value of class type.  */
6400
6401 static tree
6402 cxx_eval_component_reference (const constexpr_call *call, tree t,
6403                               bool allow_non_constant, bool addr,
6404                               bool *non_constant_p)
6405 {
6406   unsigned HOST_WIDE_INT i;
6407   tree field;
6408   tree value;
6409   tree part = TREE_OPERAND (t, 1);
6410   tree orig_whole = TREE_OPERAND (t, 0);
6411   tree whole = cxx_eval_constant_expression (call, orig_whole,
6412                                              allow_non_constant, addr,
6413                                              non_constant_p);
6414   if (whole == orig_whole)
6415     return t;
6416   if (addr)
6417     return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6418                         whole, part, NULL_TREE);
6419   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6420      CONSTRUCTOR.  */
6421   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6422     {
6423       if (!allow_non_constant)
6424         error ("%qE is not a constant expression", orig_whole);
6425       *non_constant_p = true;
6426     }
6427   if (*non_constant_p)
6428     return t;
6429   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6430     {
6431       if (field == part)
6432         return value;
6433     }
6434   if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE)
6435     {
6436       /* FIXME Mike Miller wants this to be OK.  */
6437       if (!allow_non_constant)
6438         error ("accessing %qD member instead of initialized %qD member in "
6439                "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6440       *non_constant_p = true;
6441       return t;
6442     }
6443   gcc_unreachable();
6444   return error_mark_node;
6445 }
6446
6447 /* Subroutine of cxx_eval_constant_expression.
6448    Attempt to reduce a field access of a value of class type that is
6449    expressed as a BIT_FIELD_REF.  */
6450
6451 static tree
6452 cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
6453                         bool allow_non_constant, bool addr,
6454                         bool *non_constant_p)
6455 {
6456   tree orig_whole = TREE_OPERAND (t, 0);
6457   tree retval, fldval, utype, mask;
6458   bool fld_seen = false;
6459   HOST_WIDE_INT istart, isize;
6460   tree whole = cxx_eval_constant_expression (call, orig_whole,
6461                                              allow_non_constant, addr,
6462                                              non_constant_p);
6463   tree start, field, value;
6464   unsigned HOST_WIDE_INT i;
6465
6466   if (whole == orig_whole)
6467     return t;
6468   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6469      CONSTRUCTOR.  */
6470   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6471     {
6472       if (!allow_non_constant)
6473         error ("%qE is not a constant expression", orig_whole);
6474       *non_constant_p = true;
6475     }
6476   if (*non_constant_p)
6477     return t;
6478
6479   start = TREE_OPERAND (t, 2);
6480   istart = tree_low_cst (start, 0);
6481   isize = tree_low_cst (TREE_OPERAND (t, 1), 0);
6482   utype = TREE_TYPE (t);
6483   if (!TYPE_UNSIGNED (utype))
6484     utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
6485   retval = build_int_cst (utype, 0);
6486   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6487     {
6488       tree bitpos = bit_position (field);
6489       if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
6490         return value;
6491       if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
6492           && TREE_CODE (value) == INTEGER_CST
6493           && host_integerp (bitpos, 0)
6494           && host_integerp (DECL_SIZE (field), 0))
6495         {
6496           HOST_WIDE_INT bit = tree_low_cst (bitpos, 0);
6497           HOST_WIDE_INT sz = tree_low_cst (DECL_SIZE (field), 0);
6498           HOST_WIDE_INT shift;
6499           if (bit >= istart && bit + sz <= istart + isize)
6500             {
6501               fldval = fold_convert (utype, value);
6502               mask = build_int_cst_type (utype, -1);
6503               mask = fold_build2 (LSHIFT_EXPR, utype, mask,
6504                                   size_int (TYPE_PRECISION (utype) - sz));
6505               mask = fold_build2 (RSHIFT_EXPR, utype, mask,
6506                                   size_int (TYPE_PRECISION (utype) - sz));
6507               fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
6508               shift = bit - istart;
6509               if (BYTES_BIG_ENDIAN)
6510                 shift = TYPE_PRECISION (utype) - shift - sz;
6511               fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
6512                                     size_int (shift));
6513               retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
6514               fld_seen = true;
6515             }
6516         }
6517     }
6518   if (fld_seen)
6519     return fold_convert (TREE_TYPE (t), retval);
6520   gcc_unreachable ();
6521   return error_mark_node;
6522 }
6523
6524 /* Subroutine of cxx_eval_constant_expression.
6525    Evaluate a short-circuited logical expression T in the context
6526    of a given constexpr CALL.  BAILOUT_VALUE is the value for
6527    early return.  CONTINUE_VALUE is used here purely for
6528    sanity check purposes.  */
6529
6530 static tree
6531 cxx_eval_logical_expression (const constexpr_call *call, tree t,
6532                              tree bailout_value, tree continue_value,
6533                              bool allow_non_constant, bool addr,
6534                              bool *non_constant_p)
6535 {
6536   tree r;
6537   tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6538                                            allow_non_constant, addr,
6539                                            non_constant_p);
6540   VERIFY_CONSTANT (lhs);
6541   if (lhs == bailout_value)
6542     return lhs;
6543   gcc_assert (lhs == continue_value);
6544   r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6545                                     allow_non_constant, addr, non_constant_p);
6546   VERIFY_CONSTANT (r);
6547   return r;
6548 }
6549
6550 /* REF is a COMPONENT_REF designating a particular field.  V is a vector of
6551    CONSTRUCTOR elements to initialize (part of) an object containing that
6552    field.  Return a pointer to the constructor_elt corresponding to the
6553    initialization of the field.  */
6554
6555 static constructor_elt *
6556 base_field_constructor_elt (VEC(constructor_elt,gc) *v, tree ref)
6557 {
6558   tree aggr = TREE_OPERAND (ref, 0);
6559   tree field = TREE_OPERAND (ref, 1);
6560   HOST_WIDE_INT i;
6561   constructor_elt *ce;
6562
6563   gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
6564
6565   if (TREE_CODE (aggr) == COMPONENT_REF)
6566     {
6567       constructor_elt *base_ce
6568         = base_field_constructor_elt (v, aggr);
6569       v = CONSTRUCTOR_ELTS (base_ce->value);
6570     }
6571
6572   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
6573     if (ce->index == field)
6574       return ce;
6575
6576   gcc_unreachable ();
6577   return NULL;
6578 }
6579
6580 /* Subroutine of cxx_eval_constant_expression.
6581    The expression tree T denotes a C-style array or a C-style
6582    aggregate.  Reduce it to a constant expression.  */
6583
6584 static tree
6585 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
6586                          bool allow_non_constant, bool addr,
6587                          bool *non_constant_p)
6588 {
6589   VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
6590   VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc,
6591                                           VEC_length (constructor_elt, v));
6592   constructor_elt *ce;
6593   HOST_WIDE_INT i;
6594   bool changed = false;
6595   gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
6596   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
6597     {
6598       tree elt = cxx_eval_constant_expression (call, ce->value,
6599                                                allow_non_constant, addr,
6600                                                non_constant_p);
6601       /* Don't VERIFY_CONSTANT here.  */
6602       if (allow_non_constant && *non_constant_p)
6603         goto fail;
6604       if (elt != ce->value)
6605         changed = true;
6606       if (TREE_CODE (ce->index) == COMPONENT_REF)
6607         {
6608           /* This is an initialization of a vfield inside a base
6609              subaggregate that we already initialized; push this
6610              initialization into the previous initialization.  */
6611           constructor_elt *inner = base_field_constructor_elt (n, ce->index);
6612           inner->value = elt;
6613         }
6614       else
6615         CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
6616     }
6617   if (*non_constant_p || !changed)
6618     {
6619     fail:
6620       VEC_free (constructor_elt, gc, n);
6621       return t;
6622     }
6623   t = build_constructor (TREE_TYPE (t), n);
6624   TREE_CONSTANT (t) = true;
6625   return t;
6626 }
6627
6628 /* Subroutine of cxx_eval_constant_expression.
6629    The expression tree T is a VEC_INIT_EXPR which denotes the desired
6630    initialization of a non-static data member of array type.  Reduce it to a
6631    CONSTRUCTOR.
6632
6633    Note that apart from value-initialization (when VALUE_INIT is true),
6634    this is only intended to support value-initialization and the
6635    initializations done by defaulted constructors for classes with
6636    non-static data members of array type.  In this case, VEC_INIT_EXPR_INIT
6637    will either be NULL_TREE for the default constructor, or a COMPONENT_REF
6638    for the copy/move constructor.  */
6639
6640 static tree
6641 cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
6642                      bool value_init, bool allow_non_constant, bool addr,
6643                      bool *non_constant_p)
6644 {
6645   tree elttype = TREE_TYPE (atype);
6646   int max = tree_low_cst (array_type_nelts (atype), 0);
6647   VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc, max + 1);
6648   int i;
6649
6650   /* For the default constructor, build up a call to the default
6651      constructor of the element type.  We only need to handle class types
6652      here, as for a constructor to be constexpr, all members must be
6653      initialized, which for a defaulted default constructor means they must
6654      be of a class type with a constexpr default constructor.  */
6655   if (value_init)
6656     gcc_assert (!init);
6657   else if (!init)
6658     {
6659       VEC(tree,gc) *argvec = make_tree_vector ();
6660       init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6661                                         &argvec, elttype, LOOKUP_NORMAL,
6662                                         tf_warning_or_error);
6663       release_tree_vector (argvec);
6664       init = cxx_eval_constant_expression (call, init, allow_non_constant,
6665                                            addr, non_constant_p);
6666     }
6667
6668   if (*non_constant_p && !allow_non_constant)
6669     goto fail;
6670
6671   for (i = 0; i <= max; ++i)
6672     {
6673       tree idx = build_int_cst (size_type_node, i);
6674       tree eltinit;
6675       if (TREE_CODE (elttype) == ARRAY_TYPE)
6676         {
6677           /* A multidimensional array; recurse.  */
6678           if (value_init)
6679             eltinit = NULL_TREE;
6680           else
6681             eltinit = cp_build_array_ref (input_location, init, idx,
6682                                           tf_warning_or_error);
6683           eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
6684                                          allow_non_constant, addr,
6685                                          non_constant_p);
6686         }
6687       else if (value_init)
6688         {
6689           eltinit = build_value_init (elttype, tf_warning_or_error);
6690           eltinit = cxx_eval_constant_expression
6691             (call, eltinit, allow_non_constant, addr, non_constant_p);
6692         }
6693       else if (TREE_CODE (init) == CONSTRUCTOR)
6694         {
6695           /* Initializing an element using the call to the default
6696              constructor we just built above.  */
6697           eltinit = unshare_expr (init);
6698         }
6699       else
6700         {
6701           /* Copying an element.  */
6702           VEC(tree,gc) *argvec;
6703           gcc_assert (same_type_ignoring_top_level_qualifiers_p
6704                       (atype, TREE_TYPE (init)));
6705           eltinit = cp_build_array_ref (input_location, init, idx,
6706                                         tf_warning_or_error);
6707           if (!real_lvalue_p (init))
6708             eltinit = move (eltinit);
6709           argvec = make_tree_vector ();
6710           VEC_quick_push (tree, argvec, eltinit);
6711           eltinit = (build_special_member_call
6712                      (NULL_TREE, complete_ctor_identifier, &argvec,
6713                       elttype, LOOKUP_NORMAL, tf_warning_or_error));
6714           release_tree_vector (argvec);
6715           eltinit = cxx_eval_constant_expression
6716             (call, eltinit, allow_non_constant, addr, non_constant_p);
6717         }
6718       if (*non_constant_p && !allow_non_constant)
6719         goto fail;
6720       CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
6721     }
6722
6723   if (!*non_constant_p)
6724     {
6725       init = build_constructor (TREE_TYPE (atype), n);
6726       TREE_CONSTANT (init) = true;
6727       return init;
6728     }
6729
6730  fail:
6731   VEC_free (constructor_elt, gc, n);
6732   return init;
6733 }
6734
6735 static tree
6736 cxx_eval_vec_init (const constexpr_call *call, tree t,
6737                    bool allow_non_constant, bool addr,
6738                    bool *non_constant_p)
6739 {
6740   tree atype = TREE_TYPE (t);
6741   tree init = VEC_INIT_EXPR_INIT (t);
6742   tree r = cxx_eval_vec_init_1 (call, atype, init,
6743                                 VEC_INIT_EXPR_VALUE_INIT (t),
6744                                 allow_non_constant, addr, non_constant_p);
6745   if (*non_constant_p)
6746     return t;
6747   else
6748     return r;
6749 }
6750
6751 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
6752    match.  We want to be less strict for simple *& folding; if we have a
6753    non-const temporary that we access through a const pointer, that should
6754    work.  We handle this here rather than change fold_indirect_ref_1
6755    because we're dealing with things like ADDR_EXPR of INTEGER_CST which
6756    don't really make sense outside of constant expression evaluation.  Also
6757    we want to allow folding to COMPONENT_REF, which could cause trouble
6758    with TBAA in fold_indirect_ref_1.
6759
6760    Try to keep this function synced with fold_indirect_ref_1.  */
6761
6762 static tree
6763 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
6764 {
6765   tree sub, subtype;
6766
6767   sub = op0;
6768   STRIP_NOPS (sub);
6769   subtype = TREE_TYPE (sub);
6770   gcc_assert (POINTER_TYPE_P (subtype));
6771
6772   if (TREE_CODE (sub) == ADDR_EXPR)
6773     {
6774       tree op = TREE_OPERAND (sub, 0);
6775       tree optype = TREE_TYPE (op);
6776
6777       /* *&CONST_DECL -> to the value of the const decl.  */
6778       if (TREE_CODE (op) == CONST_DECL)
6779         return DECL_INITIAL (op);
6780       /* *&p => p;  make sure to handle *&"str"[cst] here.  */
6781       if (same_type_ignoring_top_level_qualifiers_p (optype, type))
6782         {
6783           tree fop = fold_read_from_constant_string (op);
6784           if (fop)
6785             return fop;
6786           else
6787             return op;
6788         }
6789       /* *(foo *)&fooarray => fooarray[0] */
6790       else if (TREE_CODE (optype) == ARRAY_TYPE
6791                && (same_type_ignoring_top_level_qualifiers_p
6792                    (type, TREE_TYPE (optype))))
6793         {
6794           tree type_domain = TYPE_DOMAIN (optype);
6795           tree min_val = size_zero_node;
6796           if (type_domain && TYPE_MIN_VALUE (type_domain))
6797             min_val = TYPE_MIN_VALUE (type_domain);
6798           return build4_loc (loc, ARRAY_REF, type, op, min_val,
6799                              NULL_TREE, NULL_TREE);
6800         }
6801       /* *(foo *)&complexfoo => __real__ complexfoo */
6802       else if (TREE_CODE (optype) == COMPLEX_TYPE
6803                && (same_type_ignoring_top_level_qualifiers_p
6804                    (type, TREE_TYPE (optype))))
6805         return fold_build1_loc (loc, REALPART_EXPR, type, op);
6806       /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
6807       else if (TREE_CODE (optype) == VECTOR_TYPE
6808                && (same_type_ignoring_top_level_qualifiers_p
6809                    (type, TREE_TYPE (optype))))
6810         {
6811           tree part_width = TYPE_SIZE (type);
6812           tree index = bitsize_int (0);
6813           return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
6814         }
6815       /* Also handle conversion to an empty base class, which
6816          is represented with a NOP_EXPR.  */
6817       else if (is_empty_class (type)
6818                && CLASS_TYPE_P (optype)
6819                && DERIVED_FROM_P (type, optype))
6820         {
6821           *empty_base = true;
6822           return op;
6823         }
6824       /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
6825       else if (RECORD_OR_UNION_TYPE_P (optype))
6826         {
6827           tree field = TYPE_FIELDS (optype);
6828           for (; field; field = DECL_CHAIN (field))
6829             if (TREE_CODE (field) == FIELD_DECL
6830                 && integer_zerop (byte_position (field))
6831                 && (same_type_ignoring_top_level_qualifiers_p
6832                     (TREE_TYPE (field), type)))
6833               {
6834                 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
6835                 break;
6836               }
6837         }
6838     }
6839   else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
6840            && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
6841     {
6842       tree op00 = TREE_OPERAND (sub, 0);
6843       tree op01 = TREE_OPERAND (sub, 1);
6844
6845       STRIP_NOPS (op00);
6846       if (TREE_CODE (op00) == ADDR_EXPR)
6847         {
6848           tree op00type;
6849           op00 = TREE_OPERAND (op00, 0);
6850           op00type = TREE_TYPE (op00);
6851
6852           /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
6853           if (TREE_CODE (op00type) == VECTOR_TYPE
6854               && (same_type_ignoring_top_level_qualifiers_p
6855                   (type, TREE_TYPE (op00type))))
6856             {
6857               HOST_WIDE_INT offset = tree_low_cst (op01, 0);
6858               tree part_width = TYPE_SIZE (type);
6859               unsigned HOST_WIDE_INT part_widthi = tree_low_cst (part_width, 0)/BITS_PER_UNIT;
6860               unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
6861               tree index = bitsize_int (indexi);
6862
6863               if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
6864                 return fold_build3_loc (loc,
6865                                         BIT_FIELD_REF, type, op00,
6866                                         part_width, index);
6867
6868             }
6869           /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
6870           else if (TREE_CODE (op00type) == COMPLEX_TYPE
6871                    && (same_type_ignoring_top_level_qualifiers_p
6872                        (type, TREE_TYPE (op00type))))
6873             {
6874               tree size = TYPE_SIZE_UNIT (type);
6875               if (tree_int_cst_equal (size, op01))
6876                 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
6877             }
6878           /* ((foo *)&fooarray)[1] => fooarray[1] */
6879           else if (TREE_CODE (op00type) == ARRAY_TYPE
6880                    && (same_type_ignoring_top_level_qualifiers_p
6881                        (type, TREE_TYPE (op00type))))
6882             {
6883               tree type_domain = TYPE_DOMAIN (op00type);
6884               tree min_val = size_zero_node;
6885               if (type_domain && TYPE_MIN_VALUE (type_domain))
6886                 min_val = TYPE_MIN_VALUE (type_domain);
6887               op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
6888                                      TYPE_SIZE_UNIT (type));
6889               op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
6890               return build4_loc (loc, ARRAY_REF, type, op00, op01,
6891                                  NULL_TREE, NULL_TREE);
6892             }
6893           /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
6894           else if (RECORD_OR_UNION_TYPE_P (op00type))
6895             {
6896               tree field = TYPE_FIELDS (op00type);
6897               for (; field; field = DECL_CHAIN (field))
6898                 if (TREE_CODE (field) == FIELD_DECL
6899                     && tree_int_cst_equal (byte_position (field), op01)
6900                     && (same_type_ignoring_top_level_qualifiers_p
6901                         (TREE_TYPE (field), type)))
6902                   {
6903                     return fold_build3 (COMPONENT_REF, type, op00,
6904                                      field, NULL_TREE);
6905                     break;
6906                   }
6907             }
6908         }
6909     }
6910   /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
6911   else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
6912            && (same_type_ignoring_top_level_qualifiers_p
6913                (type, TREE_TYPE (TREE_TYPE (subtype)))))
6914     {
6915       tree type_domain;
6916       tree min_val = size_zero_node;
6917       sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
6918       if (!sub)
6919         sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
6920       type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
6921       if (type_domain && TYPE_MIN_VALUE (type_domain))
6922         min_val = TYPE_MIN_VALUE (type_domain);
6923       return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
6924                          NULL_TREE);
6925     }
6926
6927   return NULL_TREE;
6928 }
6929
6930 static tree
6931 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
6932                        bool allow_non_constant, bool addr,
6933                        bool *non_constant_p)
6934 {
6935   tree orig_op0 = TREE_OPERAND (t, 0);
6936   tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
6937                                            /*addr*/false, non_constant_p);
6938   bool empty_base = false;
6939   tree r;
6940
6941   /* Don't VERIFY_CONSTANT here.  */
6942   if (*non_constant_p)
6943     return t;
6944
6945   r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
6946                              &empty_base);
6947
6948   if (r)
6949     r = cxx_eval_constant_expression (call, r, allow_non_constant,
6950                                       addr, non_constant_p);
6951   else
6952     {
6953       tree sub = op0;
6954       STRIP_NOPS (sub);
6955       if (TREE_CODE (sub) == ADDR_EXPR
6956           || TREE_CODE (sub) == POINTER_PLUS_EXPR)
6957         {
6958           gcc_assert (!same_type_ignoring_top_level_qualifiers_p
6959                       (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
6960           /* FIXME Mike Miller wants this to be OK.  */
6961           if (!allow_non_constant)
6962             error ("accessing value of %qE through a %qT glvalue in a "
6963                    "constant expression", build_fold_indirect_ref (sub),
6964                    TREE_TYPE (t));
6965           *non_constant_p = true;
6966           return t;
6967         }
6968     }
6969
6970   /* If we're pulling out the value of an empty base, make sure
6971      that the whole object is constant and then return an empty
6972      CONSTRUCTOR.  */
6973   if (empty_base)
6974     {
6975       VERIFY_CONSTANT (r);
6976       r = build_constructor (TREE_TYPE (t), NULL);
6977       TREE_CONSTANT (r) = true;
6978     }
6979
6980   if (r == NULL_TREE)
6981     return t;
6982   return r;
6983 }
6984
6985 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
6986    Shared between potential_constant_expression and
6987    cxx_eval_constant_expression.  */
6988
6989 static void
6990 non_const_var_error (tree r)
6991 {
6992   tree type = TREE_TYPE (r);
6993   error ("the value of %qD is not usable in a constant "
6994          "expression", r);
6995   /* Avoid error cascade.  */
6996   if (DECL_INITIAL (r) == error_mark_node)
6997     return;
6998   if (DECL_DECLARED_CONSTEXPR_P (r))
6999     inform (DECL_SOURCE_LOCATION (r),
7000             "%qD used in its own initializer", r);
7001   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7002     {
7003       if (!CP_TYPE_CONST_P (type))
7004         inform (DECL_SOURCE_LOCATION (r),
7005                 "%q#D is not const", r);
7006       else if (CP_TYPE_VOLATILE_P (type))
7007         inform (DECL_SOURCE_LOCATION (r),
7008                 "%q#D is volatile", r);
7009       else if (!DECL_INITIAL (r)
7010                || !TREE_CONSTANT (DECL_INITIAL (r)))
7011         inform (DECL_SOURCE_LOCATION (r),
7012                 "%qD was not initialized with a constant "
7013                 "expression", r);
7014       else
7015         gcc_unreachable ();
7016     }
7017   else
7018     {
7019       if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
7020         inform (DECL_SOURCE_LOCATION (r),
7021                 "%qD was not declared %<constexpr%>", r);
7022       else
7023         inform (DECL_SOURCE_LOCATION (r),
7024                 "%qD does not have integral or enumeration type",
7025                 r);
7026     }
7027 }
7028
7029 /* Attempt to reduce the expression T to a constant value.
7030    On failure, issue diagnostic and return error_mark_node.  */
7031 /* FIXME unify with c_fully_fold */
7032
7033 static tree
7034 cxx_eval_constant_expression (const constexpr_call *call, tree t,
7035                               bool allow_non_constant, bool addr,
7036                               bool *non_constant_p)
7037 {
7038   tree r = t;
7039
7040   if (t == error_mark_node)
7041     {
7042       *non_constant_p = true;
7043       return t;
7044     }
7045   if (CONSTANT_CLASS_P (t))
7046     {
7047       if (TREE_CODE (t) == PTRMEM_CST)
7048         t = cplus_expand_constant (t);
7049       return t;
7050     }
7051   if (TREE_CODE (t) != NOP_EXPR
7052       && reduced_constant_expression_p (t))
7053     return fold (t);
7054
7055   switch (TREE_CODE (t))
7056     {
7057     case VAR_DECL:
7058       if (addr)
7059         return t;
7060       /* else fall through. */
7061     case CONST_DECL:
7062       r = integral_constant_value (t);
7063       if (TREE_CODE (r) == TARGET_EXPR
7064           && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
7065         r = TARGET_EXPR_INITIAL (r);
7066       if (DECL_P (r))
7067         {
7068           if (!allow_non_constant)
7069             non_const_var_error (r);
7070           *non_constant_p = true;
7071         }
7072       break;
7073
7074     case FUNCTION_DECL:
7075     case TEMPLATE_DECL:
7076     case LABEL_DECL:
7077       return t;
7078
7079     case PARM_DECL:
7080       if (call && DECL_CONTEXT (t) == call->fundef->decl)
7081         r = lookup_parameter_binding (call, t);
7082       else if (addr)
7083         /* Defer in case this is only used for its type.  */;
7084       else
7085         {
7086           if (!allow_non_constant)
7087             error ("%qE is not a constant expression", t);
7088           *non_constant_p = true;
7089         }
7090       break;
7091
7092     case CALL_EXPR:
7093     case AGGR_INIT_EXPR:
7094       r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
7095                                     non_constant_p);
7096       break;
7097
7098     case TARGET_EXPR:
7099     case INIT_EXPR:
7100       /* Pass false for 'addr' because these codes indicate
7101          initialization of a temporary.  */
7102       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7103                                         allow_non_constant, false,
7104                                         non_constant_p);
7105       if (!*non_constant_p)
7106         /* Adjust the type of the result to the type of the temporary.  */
7107         r = adjust_temp_type (TREE_TYPE (t), r);
7108       break;
7109
7110     case SCOPE_REF:
7111       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
7112                                         allow_non_constant, addr,
7113                                         non_constant_p);
7114       break;
7115
7116     case RETURN_EXPR:
7117     case NON_LVALUE_EXPR:
7118     case TRY_CATCH_EXPR:
7119     case CLEANUP_POINT_EXPR:
7120     case MUST_NOT_THROW_EXPR:
7121     case SAVE_EXPR:
7122       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7123                                         allow_non_constant, addr,
7124                                         non_constant_p);
7125       break;
7126
7127       /* These differ from cxx_eval_unary_expression in that this doesn't
7128          check for a constant operand or result; an address can be
7129          constant without its operand being, and vice versa.  */
7130     case INDIRECT_REF:
7131       r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
7132                                  non_constant_p);
7133       break;
7134
7135     case ADDR_EXPR:
7136       {
7137         tree oldop = TREE_OPERAND (t, 0);
7138         tree op = cxx_eval_constant_expression (call, oldop,
7139                                                 allow_non_constant,
7140                                                 /*addr*/true,
7141                                                 non_constant_p);
7142         /* Don't VERIFY_CONSTANT here.  */
7143         if (*non_constant_p)
7144           return t;
7145         /* This function does more aggressive folding than fold itself.  */
7146         r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
7147         if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
7148           return t;
7149         break;
7150       }
7151
7152     case REALPART_EXPR:
7153     case IMAGPART_EXPR:
7154     case CONJ_EXPR:
7155     case FIX_TRUNC_EXPR:
7156     case FLOAT_EXPR:
7157     case NEGATE_EXPR:
7158     case ABS_EXPR:
7159     case BIT_NOT_EXPR:
7160     case TRUTH_NOT_EXPR:
7161     case FIXED_CONVERT_EXPR:
7162       r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
7163                                      non_constant_p);
7164       break;
7165
7166     case COMPOUND_EXPR:
7167       {
7168         /* check_return_expr sometimes wraps a TARGET_EXPR in a
7169            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
7170            introduced by build_call_a.  */
7171         tree op0 = TREE_OPERAND (t, 0);
7172         tree op1 = TREE_OPERAND (t, 1);
7173         STRIP_NOPS (op1);
7174         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7175             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7176           r = cxx_eval_constant_expression (call, op0, allow_non_constant,
7177                                             addr, non_constant_p);
7178         else
7179           {
7180             /* Check that the LHS is constant and then discard it.  */
7181             cxx_eval_constant_expression (call, op0, allow_non_constant,
7182                                           false, non_constant_p);
7183             r = cxx_eval_constant_expression (call, op1, allow_non_constant,
7184                                               addr, non_constant_p);
7185           }
7186       }
7187       break;
7188
7189     case POINTER_PLUS_EXPR:
7190     case PLUS_EXPR:
7191     case MINUS_EXPR:
7192     case MULT_EXPR:
7193     case TRUNC_DIV_EXPR:
7194     case CEIL_DIV_EXPR:
7195     case FLOOR_DIV_EXPR:
7196     case ROUND_DIV_EXPR:
7197     case TRUNC_MOD_EXPR:
7198     case CEIL_MOD_EXPR:
7199     case ROUND_MOD_EXPR:
7200     case RDIV_EXPR:
7201     case EXACT_DIV_EXPR:
7202     case MIN_EXPR:
7203     case MAX_EXPR:
7204     case LSHIFT_EXPR:
7205     case RSHIFT_EXPR:
7206     case LROTATE_EXPR:
7207     case RROTATE_EXPR:
7208     case BIT_IOR_EXPR:
7209     case BIT_XOR_EXPR:
7210     case BIT_AND_EXPR:
7211     case TRUTH_XOR_EXPR:
7212     case LT_EXPR:
7213     case LE_EXPR:
7214     case GT_EXPR:
7215     case GE_EXPR:
7216     case EQ_EXPR:
7217     case NE_EXPR:
7218     case UNORDERED_EXPR:
7219     case ORDERED_EXPR:
7220     case UNLT_EXPR:
7221     case UNLE_EXPR:
7222     case UNGT_EXPR:
7223     case UNGE_EXPR:
7224     case UNEQ_EXPR:
7225     case RANGE_EXPR:
7226     case COMPLEX_EXPR:
7227       r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
7228                                       non_constant_p);
7229       break;
7230
7231       /* fold can introduce non-IF versions of these; still treat them as
7232          short-circuiting.  */
7233     case TRUTH_AND_EXPR:
7234     case TRUTH_ANDIF_EXPR:
7235       r = cxx_eval_logical_expression (call, t, boolean_false_node,
7236                                        boolean_true_node,
7237                                        allow_non_constant, addr,
7238                                        non_constant_p);
7239       break;
7240
7241     case TRUTH_OR_EXPR:
7242     case TRUTH_ORIF_EXPR:
7243       r = cxx_eval_logical_expression (call, t, boolean_true_node,
7244                                        boolean_false_node,
7245                                        allow_non_constant, addr,
7246                                        non_constant_p);
7247       break;
7248
7249     case ARRAY_REF:
7250       r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
7251                                     non_constant_p);
7252       break;
7253
7254     case COMPONENT_REF:
7255       r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
7256                                         non_constant_p);
7257       break;
7258
7259     case BIT_FIELD_REF:
7260       r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
7261                                   non_constant_p);
7262       break;
7263
7264     case COND_EXPR:
7265     case VEC_COND_EXPR:
7266       r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
7267                                            non_constant_p);
7268       break;
7269
7270     case CONSTRUCTOR:
7271       r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
7272                                    non_constant_p);
7273       break;
7274
7275     case VEC_INIT_EXPR:
7276       /* We can get this in a defaulted constructor for a class with a
7277          non-static data member of array type.  Either the initializer will
7278          be NULL, meaning default-initialization, or it will be an lvalue
7279          or xvalue of the same type, meaning direct-initialization from the
7280          corresponding member.  */
7281       r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
7282                              non_constant_p);
7283       break;
7284
7285     case CONVERT_EXPR:
7286     case VIEW_CONVERT_EXPR:
7287     case NOP_EXPR:
7288       {
7289         tree oldop = TREE_OPERAND (t, 0);
7290         tree op = oldop;
7291         tree to = TREE_TYPE (t);
7292         tree source = TREE_TYPE (op);
7293         if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (to)
7294             && !(TREE_CODE (op) == COMPONENT_REF
7295                  && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (op, 0)))))
7296           {
7297             if (!allow_non_constant)
7298               error ("conversion of expression %qE of pointer type "
7299                      "cannot yield a constant expression", op);
7300             *non_constant_p = true;
7301             return t;
7302           }
7303         op = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
7304                                            allow_non_constant, addr,
7305                                            non_constant_p);
7306         if (*non_constant_p)
7307           return t;
7308         if (op == oldop)
7309           /* We didn't fold at the top so we could check for ptr-int
7310              conversion.  */
7311           return fold (t);
7312         r = fold_build1 (TREE_CODE (t), to, op);
7313         /* Conversion of an out-of-range value has implementation-defined
7314            behavior; the language considers it different from arithmetic
7315            overflow, which is undefined.  */
7316         if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
7317           TREE_OVERFLOW (r) = false;
7318       }
7319       break;
7320
7321     case EMPTY_CLASS_EXPR:
7322       /* This is good enough for a function argument that might not get
7323          used, and they can't do anything with it, so just return it.  */
7324       return t;
7325
7326     case LAMBDA_EXPR:
7327     case DYNAMIC_CAST_EXPR:
7328     case PSEUDO_DTOR_EXPR:
7329     case PREINCREMENT_EXPR:
7330     case POSTINCREMENT_EXPR:
7331     case PREDECREMENT_EXPR:
7332     case POSTDECREMENT_EXPR:
7333     case NEW_EXPR:
7334     case VEC_NEW_EXPR:
7335     case DELETE_EXPR:
7336     case VEC_DELETE_EXPR:
7337     case THROW_EXPR:
7338     case MODIFY_EXPR:
7339     case MODOP_EXPR:
7340       /* GCC internal stuff.  */
7341     case VA_ARG_EXPR:
7342     case OBJ_TYPE_REF:
7343     case WITH_CLEANUP_EXPR:
7344     case STATEMENT_LIST:
7345     case BIND_EXPR:
7346     case NON_DEPENDENT_EXPR:
7347     case BASELINK:
7348     case EXPR_STMT:
7349     case OFFSET_REF:
7350       if (!allow_non_constant)
7351         error_at (EXPR_LOC_OR_HERE (t),
7352                   "expression %qE is not a constant-expression", t);
7353       *non_constant_p = true;
7354       break;
7355
7356     default:
7357       internal_error ("unexpected expression %qE of kind %s", t,
7358                       tree_code_name[TREE_CODE (t)]);
7359       *non_constant_p = true;
7360       break;
7361     }
7362
7363   if (r == error_mark_node)
7364     *non_constant_p = true;
7365
7366   if (*non_constant_p)
7367     return t;
7368   else
7369     return r;
7370 }
7371
7372 static tree
7373 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
7374 {
7375   bool non_constant_p = false;
7376   tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
7377                                          false, &non_constant_p);
7378
7379   verify_constant (r, allow_non_constant, &non_constant_p);
7380
7381   if (non_constant_p && !allow_non_constant)
7382     return error_mark_node;
7383   else if (non_constant_p && TREE_CONSTANT (t))
7384     {
7385       /* This isn't actually constant, so unset TREE_CONSTANT.  */
7386       if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
7387         r = copy_node (t);
7388       else
7389         r = build_nop (TREE_TYPE (t), t);
7390       TREE_CONSTANT (r) = false;
7391       return r;
7392     }
7393   else if (non_constant_p || r == t)
7394     return t;
7395   else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
7396     {
7397       if (TREE_CODE (t) == TARGET_EXPR
7398           && TARGET_EXPR_INITIAL (t) == r)
7399         return t;
7400       else
7401         {
7402           r = get_target_expr (r);
7403           TREE_CONSTANT (r) = true;
7404           return r;
7405         }
7406     }
7407   else
7408     return r;
7409 }
7410
7411 /* Returns true if T is a valid subexpression of a constant expression,
7412    even if it isn't itself a constant expression.  */
7413
7414 bool
7415 is_sub_constant_expr (tree t)
7416 {
7417   bool non_constant_p = false;
7418   cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
7419   return !non_constant_p;
7420 }
7421
7422 /* If T represents a constant expression returns its reduced value.
7423    Otherwise return error_mark_node.  If T is dependent, then
7424    return NULL.  */
7425
7426 tree
7427 cxx_constant_value (tree t)
7428 {
7429   return cxx_eval_outermost_constant_expr (t, false);
7430 }
7431
7432 /* If T is a constant expression, returns its reduced value.
7433    Otherwise, if T does not have TREE_CONSTANT set, returns T.
7434    Otherwise, returns a version of T without TREE_CONSTANT.  */
7435
7436 tree
7437 maybe_constant_value (tree t)
7438 {
7439   tree r;
7440
7441   if (type_dependent_expression_p (t)
7442       || type_unknown_p (t)
7443       || !potential_constant_expression (t)
7444       || value_dependent_expression_p (t))
7445     {
7446       if (TREE_OVERFLOW_P (t))
7447         {
7448           t = build_nop (TREE_TYPE (t), t);
7449           TREE_CONSTANT (t) = false;
7450         }
7451       return t;
7452     }
7453
7454   r = cxx_eval_outermost_constant_expr (t, true);
7455 #ifdef ENABLE_CHECKING
7456   /* cp_tree_equal looks through NOPs, so allow them.  */
7457   gcc_assert (r == t
7458               || CONVERT_EXPR_P (t)
7459               || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
7460               || !cp_tree_equal (r, t));
7461 #endif
7462   return r;
7463 }
7464
7465 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
7466    than wrapped in a TARGET_EXPR.  */
7467
7468 tree
7469 maybe_constant_init (tree t)
7470 {
7471   t = maybe_constant_value (t);
7472   if (TREE_CODE (t) == TARGET_EXPR)
7473     {
7474       tree init = TARGET_EXPR_INITIAL (t);
7475       if (TREE_CODE (init) == CONSTRUCTOR
7476           && TREE_CONSTANT (init))
7477         t = init;
7478     }
7479   return t;
7480 }
7481
7482 #if 0
7483 /* FIXME see ADDR_EXPR section in potential_constant_expression_1.  */
7484 /* Return true if the object referred to by REF has automatic or thread
7485    local storage.  */
7486
7487 enum { ck_ok, ck_bad, ck_unknown };
7488 static int
7489 check_automatic_or_tls (tree ref)
7490 {
7491   enum machine_mode mode;
7492   HOST_WIDE_INT bitsize, bitpos;
7493   tree offset;
7494   int volatilep = 0, unsignedp = 0;
7495   tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
7496                                    &mode, &unsignedp, &volatilep, false);
7497   duration_kind dk;
7498
7499   /* If there isn't a decl in the middle, we don't know the linkage here,
7500      and this isn't a constant expression anyway.  */
7501   if (!DECL_P (decl))
7502     return ck_unknown;
7503   dk = decl_storage_duration (decl);
7504   return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
7505 }
7506 #endif
7507
7508 /* Return true if the DECL designates a builtin function that is
7509    morally constexpr, in the sense that its parameter types and
7510    return type are literal types and the compiler is allowed to
7511    fold its invocations.  */
7512
7513 static bool
7514 morally_constexpr_builtin_function_p (tree decl)
7515 {
7516   tree funtype = TREE_TYPE (decl);
7517   tree t;
7518
7519   if (!is_builtin_fn (decl))
7520     return false;
7521   if (!literal_type_p (TREE_TYPE (funtype)))
7522     return false;
7523   for (t = TYPE_ARG_TYPES (funtype); t != NULL ; t = TREE_CHAIN (t))
7524     {
7525       if (t == void_list_node)
7526         return true;
7527       if (!literal_type_p (TREE_VALUE (t)))
7528         return false;
7529     }
7530   /* We assume no varargs builtins are suitable.  */
7531   return t != NULL;
7532 }
7533
7534 /* Return true if T denotes a potentially constant expression.  Issue
7535    diagnostic as appropriate under control of FLAGS.  If WANT_RVAL is true,
7536    an lvalue-rvalue conversion is implied.
7537
7538    C++0x [expr.const] used to say
7539
7540    6 An expression is a potential constant expression if it is
7541      a constant expression where all occurences of function
7542      parameters are replaced by arbitrary constant expressions
7543      of the appropriate type.
7544
7545    2  A conditional expression is a constant expression unless it
7546       involves one of the following as a potentially evaluated
7547       subexpression (3.2), but subexpressions of logical AND (5.14),
7548       logical OR (5.15), and conditional (5.16) operations that are
7549       not evaluated are not considered.   */
7550
7551 static bool
7552 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
7553 {
7554   enum { any = false, rval = true };
7555   int i;
7556   tree tmp;
7557
7558   /* C++98 has different rules for the form of a constant expression that
7559      are enforced in the parser, so we can assume that anything that gets
7560      this far is suitable.  */
7561   if (cxx_dialect < cxx0x)
7562     return true;
7563
7564   if (t == error_mark_node)
7565     return false;
7566   if (t == NULL_TREE)
7567     return true;
7568   if (TREE_THIS_VOLATILE (t))
7569     {
7570       if (flags & tf_error)
7571         error ("expression %qE has side-effects", t);
7572       return false;
7573     }
7574   if (CONSTANT_CLASS_P (t))
7575     {
7576       if (TREE_OVERFLOW (t))
7577         {
7578           if (flags & tf_error)
7579             {
7580               permerror (EXPR_LOC_OR_HERE (t),
7581                          "overflow in constant expression");
7582               if (flag_permissive)
7583                 return true;
7584             }
7585           return false;
7586         }
7587       return true;
7588     }
7589
7590   switch (TREE_CODE (t))
7591     {
7592     case FUNCTION_DECL:
7593     case BASELINK:
7594     case TEMPLATE_DECL:
7595     case OVERLOAD:
7596     case TEMPLATE_ID_EXPR:
7597     case LABEL_DECL:
7598     case CONST_DECL:
7599     case SIZEOF_EXPR:
7600     case ALIGNOF_EXPR:
7601     case OFFSETOF_EXPR:
7602     case NOEXCEPT_EXPR:
7603     case TEMPLATE_PARM_INDEX:
7604     case TRAIT_EXPR:
7605     case IDENTIFIER_NODE:
7606       /* We can see a FIELD_DECL in a pointer-to-member expression.  */
7607     case FIELD_DECL:
7608       return true;
7609
7610     case PARM_DECL:
7611       /* -- this (5.1) unless it appears as the postfix-expression in a
7612             class member access expression, including the result of the
7613             implicit transformation in the body of the non-static
7614             member function (9.3.1);  */
7615       /* FIXME this restriction seems pointless since the standard dropped
7616          "potential constant expression".  */
7617       if (is_this_parameter (t))
7618         {
7619           if (flags & tf_error)
7620             error ("%qE is not a potential constant expression", t);
7621           return false;
7622         }
7623       return true;
7624
7625     case AGGR_INIT_EXPR:
7626     case CALL_EXPR:
7627       /* -- an invocation of a function other than a constexpr function
7628             or a constexpr constructor.  */
7629       {
7630         tree fun = get_function_named_in_call (t);
7631         const int nargs = call_expr_nargs (t);
7632         i = 0;
7633
7634         if (is_overloaded_fn (fun))
7635           {
7636             if (TREE_CODE (fun) == FUNCTION_DECL)
7637               {
7638                 if (builtin_valid_in_constant_expr_p (fun))
7639                   return true;
7640                 if (!DECL_DECLARED_CONSTEXPR_P (fun)
7641                     && !morally_constexpr_builtin_function_p (fun))
7642                   {
7643                     if (flags & tf_error)
7644                       error ("%qD is not %<constexpr%>", fun);
7645                     return false;
7646                   }
7647                 /* A call to a non-static member function takes the address
7648                    of the object as the first argument.  But in a constant
7649                    expression the address will be folded away, so look
7650                    through it now.  */
7651                 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
7652                     && !DECL_CONSTRUCTOR_P (fun))
7653                   {
7654                     tree x = get_nth_callarg (t, 0);
7655                     if (is_this_parameter (x))
7656                       /* OK.  */;
7657                     else if (!potential_constant_expression_1 (x, rval, flags))
7658                       {
7659                         if (flags & tf_error)
7660                           error ("object argument is not a potential "
7661                                  "constant expression");
7662                         return false;
7663                       }
7664                     i = 1;
7665                   }
7666               }
7667             else
7668               fun = get_first_fn (fun);
7669             /* Skip initial arguments to base constructors.  */
7670             if (DECL_BASE_CONSTRUCTOR_P (fun))
7671               i = num_artificial_parms_for (fun);
7672             fun = DECL_ORIGIN (fun);
7673           }
7674         else
7675           {
7676             if (potential_constant_expression_1 (fun, rval, flags))
7677               /* Might end up being a constant function pointer.  */;
7678             else
7679               {
7680                 if (flags & tf_error)
7681                   error ("%qE is not a function name", fun);
7682                 return false;
7683               }
7684           }
7685         for (; i < nargs; ++i)
7686           {
7687             tree x = get_nth_callarg (t, i);
7688             if (!potential_constant_expression_1 (x, rval, flags))
7689               {
7690                 if (flags & tf_error)
7691                   error ("argument in position %qP is not a "
7692                          "potential constant expression", i);
7693                 return false;
7694               }
7695           }
7696         return true;
7697       }
7698
7699     case NON_LVALUE_EXPR:
7700       /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
7701             -- an lvalue of integral type that refers to a non-volatile
7702                const variable or static data member initialized with
7703                constant expressions, or
7704
7705             -- an lvalue of literal type that refers to non-volatile
7706                object defined with constexpr, or that refers to a
7707                sub-object of such an object;  */
7708       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
7709
7710     case VAR_DECL:
7711       if (want_rval && !decl_constant_var_p (t)
7712           && !dependent_type_p (TREE_TYPE (t)))
7713         {
7714           if (flags & tf_error)
7715             non_const_var_error (t);
7716           return false;
7717         }
7718       return true;
7719
7720     case NOP_EXPR:
7721     case CONVERT_EXPR:
7722     case VIEW_CONVERT_EXPR:
7723       /* -- an array-to-pointer conversion that is applied to an lvalue
7724             that designates an object with thread or automatic storage
7725             duration;  FIXME not implemented as it breaks constexpr arrays;
7726             need to fix the standard
7727          -- a type conversion from a pointer or pointer-to-member type
7728             to a literal type.  */
7729       {
7730         tree from = TREE_OPERAND (t, 0);
7731         tree source = TREE_TYPE (from);
7732         tree target = TREE_TYPE (t);
7733         if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (target)
7734             && !(TREE_CODE (from) == COMPONENT_REF
7735                  && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (from, 0)))))
7736           {
7737             if (flags & tf_error)
7738               error ("conversion of expression %qE of pointer type "
7739                      "cannot yield a constant expression", from);
7740             return false;
7741           }
7742         return (potential_constant_expression_1
7743                 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
7744       }
7745
7746     case ADDR_EXPR:
7747       /* -- a unary operator & that is applied to an lvalue that
7748             designates an object with thread or automatic storage
7749             duration;  */
7750       t = TREE_OPERAND (t, 0);
7751 #if 0
7752       /* FIXME adjust when issue 1197 is fully resolved.  For now don't do
7753          any checking here, as we might dereference the pointer later.  If
7754          we remove this code, also remove check_automatic_or_tls.  */
7755       i = check_automatic_or_tls (t);
7756       if (i == ck_ok)
7757         return true;
7758       if (i == ck_bad)
7759         {
7760           if (flags & tf_error)
7761             error ("address-of an object %qE with thread local or "
7762                    "automatic storage is not a constant expression", t);
7763           return false;
7764         }
7765 #endif
7766       return potential_constant_expression_1 (t, any, flags);
7767
7768     case COMPONENT_REF:
7769     case BIT_FIELD_REF:
7770     case ARROW_EXPR:
7771     case OFFSET_REF:
7772       /* -- a class member access unless its postfix-expression is
7773             of literal type or of pointer to literal type.  */
7774       /* This test would be redundant, as it follows from the
7775          postfix-expression being a potential constant expression.  */
7776       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
7777                                               want_rval, flags);
7778
7779     case EXPR_PACK_EXPANSION:
7780       return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
7781                                               want_rval, flags);
7782
7783     case INDIRECT_REF:
7784       {
7785         tree x = TREE_OPERAND (t, 0);
7786         STRIP_NOPS (x);
7787         if (is_this_parameter (x))
7788           {
7789             if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)) && want_rval)
7790               {
7791                 if (flags & tf_error)
7792                   sorry ("use of the value of the object being constructed "
7793                          "in a constant expression");
7794                 return false;
7795               }
7796             return true;
7797           }
7798         return potential_constant_expression_1 (x, rval, flags);
7799       }
7800
7801     case LAMBDA_EXPR:
7802     case DYNAMIC_CAST_EXPR:
7803     case PSEUDO_DTOR_EXPR:
7804     case PREINCREMENT_EXPR:
7805     case POSTINCREMENT_EXPR:
7806     case PREDECREMENT_EXPR:
7807     case POSTDECREMENT_EXPR:
7808     case NEW_EXPR:
7809     case VEC_NEW_EXPR:
7810     case DELETE_EXPR:
7811     case VEC_DELETE_EXPR:
7812     case THROW_EXPR:
7813     case MODIFY_EXPR:
7814     case MODOP_EXPR:
7815       /* GCC internal stuff.  */
7816     case VA_ARG_EXPR:
7817     case OBJ_TYPE_REF:
7818     case WITH_CLEANUP_EXPR:
7819     case CLEANUP_POINT_EXPR:
7820     case MUST_NOT_THROW_EXPR:
7821     case TRY_CATCH_EXPR:
7822     case STATEMENT_LIST:
7823       /* Don't bother trying to define a subset of statement-expressions to
7824          be constant-expressions, at least for now.  */
7825     case STMT_EXPR:
7826     case EXPR_STMT:
7827     case BIND_EXPR:
7828       if (flags & tf_error)
7829         error ("expression %qE is not a constant-expression", t);
7830       return false;
7831
7832     case TYPEID_EXPR:
7833       /* -- a typeid expression whose operand is of polymorphic
7834             class type;  */
7835       {
7836         tree e = TREE_OPERAND (t, 0);
7837         if (!TYPE_P (e) && !type_dependent_expression_p (e)
7838             && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
7839           {
7840             if (flags & tf_error)
7841               error ("typeid-expression is not a constant expression "
7842                      "because %qE is of polymorphic type", e);
7843             return false;
7844           }
7845         return true;
7846       }
7847
7848     case MINUS_EXPR:
7849       /* -- a subtraction where both operands are pointers.   */
7850       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7851           && TYPE_PTR_P (TREE_OPERAND (t, 1)))
7852         {
7853           if (flags & tf_error)
7854             error ("difference of two pointer expressions is not "
7855                    "a constant expression");
7856           return false;
7857         }
7858       want_rval = true;
7859       goto binary;
7860
7861     case LT_EXPR:
7862     case LE_EXPR:
7863     case GT_EXPR:
7864     case GE_EXPR:
7865     case EQ_EXPR:
7866     case NE_EXPR:
7867       /* -- a relational or equality operator where at least
7868             one of the operands is a pointer.  */
7869       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7870           || TYPE_PTR_P (TREE_OPERAND (t, 1)))
7871         {
7872           if (flags & tf_error)
7873             error ("pointer comparison expression is not a "
7874                    "constant expression");
7875           return false;
7876         }
7877       want_rval = true;
7878       goto binary;
7879
7880     case BIT_NOT_EXPR:
7881       /* A destructor.  */
7882       if (TYPE_P (TREE_OPERAND (t, 0)))
7883         return true;
7884       /* else fall through.  */
7885
7886     case REALPART_EXPR:
7887     case IMAGPART_EXPR:
7888     case CONJ_EXPR:
7889     case SAVE_EXPR:
7890     case FIX_TRUNC_EXPR:
7891     case FLOAT_EXPR:
7892     case NEGATE_EXPR:
7893     case ABS_EXPR:
7894     case TRUTH_NOT_EXPR:
7895     case FIXED_CONVERT_EXPR:
7896     case UNARY_PLUS_EXPR:
7897       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
7898                                               flags);
7899
7900     case CAST_EXPR:
7901     case CONST_CAST_EXPR:
7902     case STATIC_CAST_EXPR:
7903     case REINTERPRET_CAST_EXPR:
7904       return (potential_constant_expression_1
7905               (TREE_OPERAND (t, 0),
7906                TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
7907
7908     case PAREN_EXPR:
7909     case NON_DEPENDENT_EXPR:
7910       /* For convenience.  */
7911     case RETURN_EXPR:
7912       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
7913                                               want_rval, flags);
7914
7915     case SCOPE_REF:
7916       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
7917                                               want_rval, flags);
7918
7919     case INIT_EXPR:
7920     case TARGET_EXPR:
7921       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
7922                                               rval, flags);
7923
7924     case CONSTRUCTOR:
7925       {
7926         VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
7927         constructor_elt *ce;
7928         for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7929           if (!potential_constant_expression_1 (ce->value, want_rval, flags))
7930             return false;
7931         return true;
7932       }
7933
7934     case TREE_LIST:
7935       {
7936         gcc_assert (TREE_PURPOSE (t) == NULL_TREE
7937                     || DECL_P (TREE_PURPOSE (t)));
7938         if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
7939                                               flags))
7940           return false;
7941         if (TREE_CHAIN (t) == NULL_TREE)
7942           return true;
7943         return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
7944                                                 flags);
7945       }
7946
7947     case TRUNC_DIV_EXPR:
7948     case CEIL_DIV_EXPR:
7949     case FLOOR_DIV_EXPR:
7950     case ROUND_DIV_EXPR:
7951     case TRUNC_MOD_EXPR:
7952     case CEIL_MOD_EXPR:
7953     case ROUND_MOD_EXPR:
7954       {
7955         tree denom = TREE_OPERAND (t, 1);
7956         /* We can't call maybe_constant_value on an expression
7957            that hasn't been through fold_non_dependent_expr yet.  */
7958         if (!processing_template_decl)
7959           denom = maybe_constant_value (denom);
7960         if (integer_zerop (denom))
7961           {
7962             if (flags & tf_error)
7963               error ("division by zero is not a constant-expression");
7964             return false;
7965           }
7966         else
7967           {
7968             want_rval = true;
7969             goto binary;
7970           }
7971       }
7972
7973     case COMPOUND_EXPR:
7974       {
7975         /* check_return_expr sometimes wraps a TARGET_EXPR in a
7976            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
7977            introduced by build_call_a.  */
7978         tree op0 = TREE_OPERAND (t, 0);
7979         tree op1 = TREE_OPERAND (t, 1);
7980         STRIP_NOPS (op1);
7981         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7982             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7983           return potential_constant_expression_1 (op0, want_rval, flags);
7984         else
7985           goto binary;
7986       }
7987
7988       /* If the first operand is the non-short-circuit constant, look at
7989          the second operand; otherwise we only care about the first one for
7990          potentiality.  */
7991     case TRUTH_AND_EXPR:
7992     case TRUTH_ANDIF_EXPR:
7993       tmp = boolean_true_node;
7994       goto truth;
7995     case TRUTH_OR_EXPR:
7996     case TRUTH_ORIF_EXPR:
7997       tmp = boolean_false_node;
7998     truth:
7999       if (TREE_OPERAND (t, 0) == tmp)
8000         return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
8001       else
8002         return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
8003
8004     case PLUS_EXPR:
8005     case MULT_EXPR:
8006     case POINTER_PLUS_EXPR:
8007     case RDIV_EXPR:
8008     case EXACT_DIV_EXPR:
8009     case MIN_EXPR:
8010     case MAX_EXPR:
8011     case LSHIFT_EXPR:
8012     case RSHIFT_EXPR:
8013     case LROTATE_EXPR:
8014     case RROTATE_EXPR:
8015     case BIT_IOR_EXPR:
8016     case BIT_XOR_EXPR:
8017     case BIT_AND_EXPR:
8018     case TRUTH_XOR_EXPR:
8019     case UNORDERED_EXPR:
8020     case ORDERED_EXPR:
8021     case UNLT_EXPR:
8022     case UNLE_EXPR:
8023     case UNGT_EXPR:
8024     case UNGE_EXPR:
8025     case UNEQ_EXPR:
8026     case RANGE_EXPR:
8027     case COMPLEX_EXPR:
8028       want_rval = true;
8029       /* Fall through.  */
8030     case ARRAY_REF:
8031     case ARRAY_RANGE_REF:
8032     case MEMBER_REF:
8033     case DOTSTAR_EXPR:
8034     binary:
8035       for (i = 0; i < 2; ++i)
8036         if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
8037                                               want_rval, flags))
8038           return false;
8039       return true;
8040
8041     case COND_EXPR:
8042     case VEC_COND_EXPR:
8043       /* If the condition is a known constant, we know which of the legs we
8044          care about; otherwise we only require that the condition and
8045          either of the legs be potentially constant.  */
8046       tmp = TREE_OPERAND (t, 0);
8047       if (!potential_constant_expression_1 (tmp, rval, flags))
8048         return false;
8049       else if (integer_zerop (tmp))
8050         return potential_constant_expression_1 (TREE_OPERAND (t, 2),
8051                                                 want_rval, flags);
8052       else if (TREE_CODE (tmp) == INTEGER_CST)
8053         return potential_constant_expression_1 (TREE_OPERAND (t, 1),
8054                                                 want_rval, flags);
8055       for (i = 1; i < 3; ++i)
8056         if (potential_constant_expression_1 (TREE_OPERAND (t, i),
8057                                              want_rval, tf_none))
8058           return true;
8059       if (flags & tf_error)
8060         error ("expression %qE is not a constant-expression", t);
8061       return false;
8062
8063     case VEC_INIT_EXPR:
8064       if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
8065         return true;
8066       if (flags & tf_error)
8067         {
8068           error ("non-constant array initialization");
8069           diagnose_non_constexpr_vec_init (t);
8070         }
8071       return false;
8072
8073     default:
8074       sorry ("unexpected ast of kind %s", tree_code_name[TREE_CODE (t)]);
8075       gcc_unreachable();
8076       return false;
8077     }
8078 }
8079
8080 /* The main entry point to the above.  */
8081
8082 bool
8083 potential_constant_expression (tree t)
8084 {
8085   return potential_constant_expression_1 (t, false, tf_none);
8086 }
8087
8088 /* As above, but require a constant rvalue.  */
8089
8090 bool
8091 potential_rvalue_constant_expression (tree t)
8092 {
8093   return potential_constant_expression_1 (t, true, tf_none);
8094 }
8095
8096 /* Like above, but complain about non-constant expressions.  */
8097
8098 bool
8099 require_potential_constant_expression (tree t)
8100 {
8101   return potential_constant_expression_1 (t, false, tf_warning_or_error);
8102 }
8103
8104 /* Cross product of the above.  */
8105
8106 bool
8107 require_potential_rvalue_constant_expression (tree t)
8108 {
8109   return potential_constant_expression_1 (t, true, tf_warning_or_error);
8110 }
8111 \f
8112 /* Constructor for a lambda expression.  */
8113
8114 tree
8115 build_lambda_expr (void)
8116 {
8117   tree lambda = make_node (LAMBDA_EXPR);
8118   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
8119   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
8120   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
8121   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
8122   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
8123   return lambda;
8124 }
8125
8126 /* Create the closure object for a LAMBDA_EXPR.  */
8127
8128 tree
8129 build_lambda_object (tree lambda_expr)
8130 {
8131   /* Build aggregate constructor call.
8132      - cp_parser_braced_list
8133      - cp_parser_functional_cast  */
8134   VEC(constructor_elt,gc) *elts = NULL;
8135   tree node, expr, type;
8136   location_t saved_loc;
8137
8138   if (processing_template_decl)
8139     return lambda_expr;
8140
8141   /* Make sure any error messages refer to the lambda-introducer.  */
8142   saved_loc = input_location;
8143   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
8144
8145   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8146        node;
8147        node = TREE_CHAIN (node))
8148     {
8149       tree field = TREE_PURPOSE (node);
8150       tree val = TREE_VALUE (node);
8151
8152       if (field == error_mark_node)
8153         {
8154           expr = error_mark_node;
8155           goto out;
8156         }
8157
8158       if (DECL_P (val))
8159         mark_used (val);
8160
8161       /* Mere mortals can't copy arrays with aggregate initialization, so
8162          do some magic to make it work here.  */
8163       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
8164         val = build_array_copy (val);
8165       else if (DECL_NORMAL_CAPTURE_P (field)
8166                && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
8167         {
8168           /* "the entities that are captured by copy are used to
8169              direct-initialize each corresponding non-static data
8170              member of the resulting closure object."
8171
8172              There's normally no way to express direct-initialization
8173              from an element of a CONSTRUCTOR, so we build up a special
8174              TARGET_EXPR to bypass the usual copy-initialization.  */
8175           val = force_rvalue (val, tf_warning_or_error);
8176           if (TREE_CODE (val) == TARGET_EXPR)
8177             TARGET_EXPR_DIRECT_INIT_P (val) = true;
8178         }
8179
8180       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
8181     }
8182
8183   expr = build_constructor (init_list_type_node, elts);
8184   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
8185
8186   /* N2927: "[The closure] class type is not an aggregate."
8187      But we briefly treat it as an aggregate to make this simpler.  */
8188   type = TREE_TYPE (lambda_expr);
8189   CLASSTYPE_NON_AGGREGATE (type) = 0;
8190   expr = finish_compound_literal (type, expr, tf_warning_or_error);
8191   CLASSTYPE_NON_AGGREGATE (type) = 1;
8192
8193  out:
8194   input_location = saved_loc;
8195   return expr;
8196 }
8197
8198 /* Return an initialized RECORD_TYPE for LAMBDA.
8199    LAMBDA must have its explicit captures already.  */
8200
8201 tree
8202 begin_lambda_type (tree lambda)
8203 {
8204   tree type;
8205
8206   {
8207     /* Unique name.  This is just like an unnamed class, but we cannot use
8208        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
8209     tree name;
8210     name = make_lambda_name ();
8211
8212     /* Create the new RECORD_TYPE for this lambda.  */
8213     type = xref_tag (/*tag_code=*/record_type,
8214                      name,
8215                      /*scope=*/ts_within_enclosing_non_class,
8216                      /*template_header_p=*/false);
8217   }
8218
8219   /* Designate it as a struct so that we can use aggregate initialization.  */
8220   CLASSTYPE_DECLARED_CLASS (type) = false;
8221
8222   /* Clear base types.  */
8223   xref_basetypes (type, /*bases=*/NULL_TREE);
8224
8225   /* Start the class.  */
8226   type = begin_class_definition (type, /*attributes=*/NULL_TREE);
8227
8228   /* Cross-reference the expression and the type.  */
8229   TREE_TYPE (lambda) = type;
8230   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
8231
8232   return type;
8233 }
8234
8235 /* Returns the type to use for the return type of the operator() of a
8236    closure class.  */
8237
8238 tree
8239 lambda_return_type (tree expr)
8240 {
8241   tree type;
8242   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
8243     {
8244       warning (0, "cannot deduce lambda return type from a braced-init-list");
8245       return void_type_node;
8246     }
8247   if (type_dependent_expression_p (expr))
8248     {
8249       type = cxx_make_type (DECLTYPE_TYPE);
8250       DECLTYPE_TYPE_EXPR (type) = expr;
8251       DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
8252       SET_TYPE_STRUCTURAL_EQUALITY (type);
8253     }
8254   else
8255     type = type_decays_to (unlowered_expr_type (expr));
8256   return type;
8257 }
8258
8259 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
8260    closure type.  */
8261
8262 tree
8263 lambda_function (tree lambda)
8264 {
8265   tree type;
8266   if (TREE_CODE (lambda) == LAMBDA_EXPR)
8267     type = TREE_TYPE (lambda);
8268   else
8269     type = lambda;
8270   gcc_assert (LAMBDA_TYPE_P (type));
8271   /* Don't let debug_tree cause instantiation.  */
8272   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
8273       && !COMPLETE_OR_OPEN_TYPE_P (type))
8274     return NULL_TREE;
8275   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
8276                           /*protect=*/0, /*want_type=*/false);
8277   if (lambda)
8278     lambda = BASELINK_FUNCTIONS (lambda);
8279   return lambda;
8280 }
8281
8282 /* Returns the type to use for the FIELD_DECL corresponding to the
8283    capture of EXPR.
8284    The caller should add REFERENCE_TYPE for capture by reference.  */
8285
8286 tree
8287 lambda_capture_field_type (tree expr)
8288 {
8289   tree type;
8290   if (type_dependent_expression_p (expr))
8291     {
8292       type = cxx_make_type (DECLTYPE_TYPE);
8293       DECLTYPE_TYPE_EXPR (type) = expr;
8294       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
8295       SET_TYPE_STRUCTURAL_EQUALITY (type);
8296     }
8297   else
8298     type = non_reference (unlowered_expr_type (expr));
8299   return type;
8300 }
8301
8302 /* Recompute the return type for LAMBDA with body of the form:
8303      { return EXPR ; }  */
8304
8305 void
8306 apply_lambda_return_type (tree lambda, tree return_type)
8307 {
8308   tree fco = lambda_function (lambda);
8309   tree result;
8310
8311   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
8312
8313   /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
8314      it would interfere with instantiating the closure type.  */
8315   if (dependent_type_p (return_type))
8316     return;
8317   if (return_type == error_mark_node)
8318     return;
8319
8320   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
8321      TREE_TYPE (METHOD_TYPE)   == return-type  */
8322   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
8323
8324   result = DECL_RESULT (fco);
8325   if (result == NULL_TREE)
8326     return;
8327
8328   /* We already have a DECL_RESULT from start_preparsed_function.
8329      Now we need to redo the work it and allocate_struct_function
8330      did to reflect the new type.  */
8331   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
8332                        TYPE_MAIN_VARIANT (return_type));
8333   DECL_ARTIFICIAL (result) = 1;
8334   DECL_IGNORED_P (result) = 1;
8335   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
8336                                result);
8337
8338   DECL_RESULT (fco) = result;
8339
8340   if (!processing_template_decl && aggregate_value_p (result, fco))
8341     {
8342 #ifdef PCC_STATIC_STRUCT_RETURN
8343       cfun->returns_pcc_struct = 1;
8344 #endif
8345       cfun->returns_struct = 1;
8346     }
8347
8348 }
8349
8350 /* DECL is a local variable or parameter from the surrounding scope of a
8351    lambda-expression.  Returns the decltype for a use of the capture field
8352    for DECL even if it hasn't been captured yet.  */
8353
8354 static tree
8355 capture_decltype (tree decl)
8356 {
8357   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8358   /* FIXME do lookup instead of list walk? */
8359   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
8360   tree type;
8361
8362   if (cap)
8363     type = TREE_TYPE (TREE_PURPOSE (cap));
8364   else
8365     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
8366       {
8367       case CPLD_NONE:
8368         error ("%qD is not captured", decl);
8369         return error_mark_node;
8370
8371       case CPLD_COPY:
8372         type = TREE_TYPE (decl);
8373         if (TREE_CODE (type) == REFERENCE_TYPE
8374             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
8375           type = TREE_TYPE (type);
8376         break;
8377
8378       case CPLD_REFERENCE:
8379         type = TREE_TYPE (decl);
8380         if (TREE_CODE (type) != REFERENCE_TYPE)
8381           type = build_reference_type (TREE_TYPE (decl));
8382         break;
8383
8384       default:
8385         gcc_unreachable ();
8386       }
8387
8388   if (TREE_CODE (type) != REFERENCE_TYPE)
8389     {
8390       if (!LAMBDA_EXPR_MUTABLE_P (lam))
8391         type = cp_build_qualified_type (type, (cp_type_quals (type)
8392                                                |TYPE_QUAL_CONST));
8393       type = build_reference_type (type);
8394     }
8395   return type;
8396 }
8397
8398 /* From an ID and INITIALIZER, create a capture (by reference if
8399    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
8400    and return it.  */
8401
8402 tree
8403 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
8404              bool explicit_init_p)
8405 {
8406   tree type;
8407   tree member;
8408
8409   type = lambda_capture_field_type (initializer);
8410   if (by_reference_p)
8411     {
8412       type = build_reference_type (type);
8413       if (!real_lvalue_p (initializer))
8414         error ("cannot capture %qE by reference", initializer);
8415     }
8416
8417   /* Make member variable.  */
8418   member = build_lang_decl (FIELD_DECL, id, type);
8419   if (!explicit_init_p)
8420     /* Normal captures are invisible to name lookup but uses are replaced
8421        with references to the capture field; we implement this by only
8422        really making them invisible in unevaluated context; see
8423        qualify_lookup.  For now, let's make explicitly initialized captures
8424        always visible.  */
8425     DECL_NORMAL_CAPTURE_P (member) = true;
8426
8427   /* Add it to the appropriate closure class if we've started it.  */
8428   if (current_class_type && current_class_type == TREE_TYPE (lambda))
8429     finish_member_declaration (member);
8430
8431   LAMBDA_EXPR_CAPTURE_LIST (lambda)
8432     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
8433
8434   if (id == get_identifier ("__this"))
8435     {
8436       if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
8437         error ("already captured %<this%> in lambda expression");
8438       LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
8439     }
8440
8441   return member;
8442 }
8443
8444 /* Register all the capture members on the list CAPTURES, which is the
8445    LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
8446
8447 void register_capture_members (tree captures)
8448 {
8449   if (captures)
8450     {
8451       register_capture_members (TREE_CHAIN (captures));
8452       finish_member_declaration (TREE_PURPOSE (captures));
8453     }
8454 }
8455
8456 /* Given a FIELD_DECL decl belonging to a closure type, return a
8457    COMPONENT_REF of it relative to the 'this' parameter of the op() for
8458    that type.  */
8459
8460 static tree
8461 thisify_lambda_field (tree decl)
8462 {
8463   tree context = lambda_function (DECL_CONTEXT (decl));
8464   tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
8465                                        RO_NULL,
8466                                        tf_warning_or_error);
8467   return finish_non_static_data_member (decl, object,
8468                                         /*qualifying_scope*/NULL_TREE);
8469 }
8470
8471 /* Similar to add_capture, except this works on a stack of nested lambdas.
8472    BY_REFERENCE_P in this case is derived from the default capture mode.
8473    Returns the capture for the lambda at the bottom of the stack.  */
8474
8475 tree
8476 add_default_capture (tree lambda_stack, tree id, tree initializer)
8477 {
8478   bool this_capture_p = (id == get_identifier ("__this"));
8479
8480   tree member = NULL_TREE;
8481
8482   tree saved_class_type = current_class_type;
8483
8484   tree node;
8485
8486   for (node = lambda_stack;
8487        node;
8488        node = TREE_CHAIN (node))
8489     {
8490       tree lambda = TREE_VALUE (node);
8491
8492       current_class_type = TREE_TYPE (lambda);
8493       member = add_capture (lambda,
8494                             id,
8495                             initializer,
8496                             /*by_reference_p=*/
8497                             (!this_capture_p
8498                              && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
8499                                  == CPLD_REFERENCE)),
8500                             /*explicit_init_p=*/false);
8501       initializer = thisify_lambda_field (member);
8502     }
8503
8504   current_class_type = saved_class_type;
8505
8506   return member;
8507 }
8508
8509 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
8510    INDIRECT_REF, possibly adding it through default capturing.  */
8511
8512 tree
8513 lambda_expr_this_capture (tree lambda)
8514 {
8515   tree result;
8516
8517   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
8518
8519   /* Try to default capture 'this' if we can.  */
8520   if (!this_capture
8521       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
8522     {
8523       tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
8524       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
8525       tree init = NULL_TREE;
8526
8527       /* If we are in a lambda function, we can move out until we hit:
8528            1. a non-lambda function,
8529            2. a lambda function capturing 'this', or
8530            3. a non-default capturing lambda function.  */
8531       while (LAMBDA_FUNCTION_P (containing_function))
8532         {
8533           tree lambda
8534             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
8535
8536           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
8537             {
8538               /* An outer lambda has already captured 'this'.  */
8539               tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
8540               init = thisify_lambda_field (cap);
8541               break;
8542             }
8543
8544           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
8545             /* An outer lambda won't let us capture 'this'.  */
8546             break;
8547
8548           lambda_stack = tree_cons (NULL_TREE,
8549                                     lambda,
8550                                     lambda_stack);
8551
8552           containing_function = decl_function_context (containing_function);
8553         }
8554
8555       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
8556           && !LAMBDA_FUNCTION_P (containing_function))
8557         /* First parameter is 'this'.  */
8558         init = DECL_ARGUMENTS (containing_function);
8559
8560       if (init)
8561         this_capture = add_default_capture (lambda_stack,
8562                                             /*id=*/get_identifier ("__this"),
8563                                             init);
8564     }
8565
8566   if (!this_capture)
8567     {
8568       error ("%<this%> was not captured for this lambda function");
8569       result = error_mark_node;
8570     }
8571   else
8572     {
8573       /* To make sure that current_class_ref is for the lambda.  */
8574       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
8575
8576       result = finish_non_static_data_member (this_capture,
8577                                               NULL_TREE,
8578                                               /*qualifying_scope=*/NULL_TREE);
8579
8580       /* If 'this' is captured, each use of 'this' is transformed into an
8581          access to the corresponding unnamed data member of the closure
8582          type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
8583          ensures that the transformed expression is an rvalue. ] */
8584       result = rvalue (result);
8585     }
8586
8587   return result;
8588 }
8589
8590 /* Returns the method basetype of the innermost non-lambda function, or
8591    NULL_TREE if none.  */
8592
8593 tree
8594 nonlambda_method_basetype (void)
8595 {
8596   tree fn, type;
8597   if (!current_class_ref)
8598     return NULL_TREE;
8599
8600   type = current_class_type;
8601   if (!LAMBDA_TYPE_P (type))
8602     return type;
8603
8604   /* Find the nearest enclosing non-lambda function.  */
8605   fn = TYPE_NAME (type);
8606   do
8607     fn = decl_function_context (fn);
8608   while (fn && LAMBDA_FUNCTION_P (fn));
8609
8610   if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8611     return NULL_TREE;
8612
8613   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
8614 }
8615
8616 /* If the closure TYPE has a static op(), also add a conversion to function
8617    pointer.  */
8618
8619 void
8620 maybe_add_lambda_conv_op (tree type)
8621 {
8622   bool nested = (current_function_decl != NULL_TREE);
8623   tree callop = lambda_function (type);
8624   tree rettype, name, fntype, fn, body, compound_stmt;
8625   tree thistype, stattype, statfn, convfn, call, arg;
8626   VEC (tree, gc) *argvec;
8627
8628   if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
8629     return;
8630
8631   stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
8632                                   FUNCTION_ARG_CHAIN (callop));
8633
8634   /* First build up the conversion op.  */
8635
8636   rettype = build_pointer_type (stattype);
8637   name = mangle_conv_op_name_for_type (rettype);
8638   thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
8639   fntype = build_method_type_directly (thistype, rettype, void_list_node);
8640   fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
8641   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
8642
8643   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
8644       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
8645     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
8646
8647   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
8648   grokclassfn (type, fn, NO_SPECIAL);
8649   set_linkage_according_to_type (type, fn);
8650   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8651   DECL_IN_AGGR_P (fn) = 1;
8652   DECL_ARTIFICIAL (fn) = 1;
8653   DECL_NOT_REALLY_EXTERN (fn) = 1;
8654   DECL_DECLARED_INLINE_P (fn) = 1;
8655   DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
8656   if (nested)
8657     DECL_INTERFACE_KNOWN (fn) = 1;
8658
8659   add_method (type, fn, NULL_TREE);
8660
8661   /* Generic thunk code fails for varargs; we'll complain in mark_used if
8662      the conversion op is used.  */
8663   if (varargs_function_p (callop))
8664     {
8665       DECL_DELETED_FN (fn) = 1;
8666       return;
8667     }
8668
8669   /* Now build up the thunk to be returned.  */
8670
8671   name = get_identifier ("_FUN");
8672   fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
8673   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
8674   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
8675       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
8676     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
8677   grokclassfn (type, fn, NO_SPECIAL);
8678   set_linkage_according_to_type (type, fn);
8679   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8680   DECL_IN_AGGR_P (fn) = 1;
8681   DECL_ARTIFICIAL (fn) = 1;
8682   DECL_NOT_REALLY_EXTERN (fn) = 1;
8683   DECL_DECLARED_INLINE_P (fn) = 1;
8684   DECL_STATIC_FUNCTION_P (fn) = 1;
8685   DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
8686   for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
8687     DECL_CONTEXT (arg) = fn;
8688   if (nested)
8689     DECL_INTERFACE_KNOWN (fn) = 1;
8690
8691   add_method (type, fn, NULL_TREE);
8692
8693   if (nested)
8694     push_function_context ();
8695
8696   /* Generate the body of the thunk.  */
8697
8698   start_preparsed_function (statfn, NULL_TREE,
8699                             SF_PRE_PARSED | SF_INCLASS_INLINE);
8700   if (DECL_ONE_ONLY (statfn))
8701     {
8702       /* Put the thunk in the same comdat group as the call op.  */
8703       struct cgraph_node *callop_node, *thunk_node;
8704       DECL_COMDAT_GROUP (statfn) = cxx_comdat_group (callop);
8705       callop_node = cgraph_get_create_node (callop);
8706       thunk_node = cgraph_get_create_node (statfn);
8707       gcc_assert (callop_node->same_comdat_group == NULL);
8708       gcc_assert (thunk_node->same_comdat_group == NULL);
8709       callop_node->same_comdat_group = thunk_node;
8710       thunk_node->same_comdat_group = callop_node;
8711     }
8712   body = begin_function_body ();
8713   compound_stmt = begin_compound_stmt (0);
8714
8715   arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
8716                 null_pointer_node);
8717   argvec = make_tree_vector ();
8718   VEC_quick_push (tree, argvec, arg);
8719   for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
8720     VEC_safe_push (tree, gc, argvec, arg);
8721   call = build_call_a (callop, VEC_length (tree, argvec),
8722                        VEC_address (tree, argvec));
8723   CALL_FROM_THUNK_P (call) = 1;
8724   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
8725     call = build_cplus_new (TREE_TYPE (call), call, tf_warning_or_error);
8726   call = convert_from_reference (call);
8727   finish_return_stmt (call);
8728
8729   finish_compound_stmt (compound_stmt);
8730   finish_function_body (body);
8731
8732   expand_or_defer_fn (finish_function (2));
8733
8734   /* Generate the body of the conversion op.  */
8735
8736   start_preparsed_function (convfn, NULL_TREE,
8737                             SF_PRE_PARSED | SF_INCLASS_INLINE);
8738   body = begin_function_body ();
8739   compound_stmt = begin_compound_stmt (0);
8740
8741   finish_return_stmt (decay_conversion (statfn));
8742
8743   finish_compound_stmt (compound_stmt);
8744   finish_function_body (body);
8745
8746   expand_or_defer_fn (finish_function (2));
8747
8748   if (nested)
8749     pop_function_context ();
8750 }
8751 #include "gt-cp-semantics.h"