OSDN Git Service

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