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