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