OSDN Git Service

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