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