OSDN Git Service

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