OSDN Git Service

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