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