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