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