OSDN Git Service

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