OSDN Git Service

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