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