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