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