xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/cp/semantics.c (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1 /* Perform the semantic phase of parsing, i.e., the process of
2    building tree structure, checking semantic consistency, and
3    building RTL.  These routines are used both during actual parsing
4    and during the instantiation of template functions.
5 
6    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
7 		 2008, 2009 Free Software Foundation, Inc.
8    Written by Mark Mitchell (mmitchell@usa.net) based on code found
9    formerly in parse.y and pt.c.
10 
11    This file is part of GCC.
12 
13    GCC is free software; you can redistribute it and/or modify it
14    under the terms of the GNU General Public License as published by
15    the Free Software Foundation; either version 3, or (at your option)
16    any later version.
17 
18    GCC is distributed in the hope that it will be useful, but
19    WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    General Public License for more details.
22 
23 You should have received a copy of the GNU General Public License
24 along with GCC; see the file COPYING3.  If not see
25 <http://www.gnu.org/licenses/>.  */
26 
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "c-common.h"
34 #include "tree-inline.h"
35 #include "tree-mudflap.h"
36 #include "except.h"
37 #include "toplev.h"
38 #include "flags.h"
39 #include "rtl.h"
40 #include "expr.h"
41 #include "output.h"
42 #include "timevar.h"
43 #include "debug.h"
44 #include "diagnostic.h"
45 #include "cgraph.h"
46 #include "tree-iterator.h"
47 #include "vec.h"
48 #include "target.h"
49 #include "gimple.h"
50 
51 /* There routines provide a modular interface to perform many parsing
52    operations.  They may therefore be used during actual parsing, or
53    during template instantiation, which may be regarded as a
54    degenerate form of parsing.  */
55 
56 static tree maybe_convert_cond (tree);
57 static tree finalize_nrv_r (tree *, int *, void *);
58 static tree capture_decltype (tree);
59 static tree thisify_lambda_field (tree);
60 
61 
62 /* Deferred Access Checking Overview
63    ---------------------------------
64 
65    Most C++ expressions and declarations require access checking
66    to be performed during parsing.  However, in several cases,
67    this has to be treated differently.
68 
69    For member declarations, access checking has to be deferred
70    until more information about the declaration is known.  For
71    example:
72 
73      class A {
74 	 typedef int X;
75        public:
76 	 X f();
77      };
78 
79      A::X A::f();
80      A::X g();
81 
82    When we are parsing the function return type `A::X', we don't
83    really know if this is allowed until we parse the function name.
84 
85    Furthermore, some contexts require that access checking is
86    never performed at all.  These include class heads, and template
87    instantiations.
88 
89    Typical use of access checking functions is described here:
90 
91    1. When we enter a context that requires certain access checking
92       mode, the function `push_deferring_access_checks' is called with
93       DEFERRING argument specifying the desired mode.  Access checking
94       may be performed immediately (dk_no_deferred), deferred
95       (dk_deferred), or not performed (dk_no_check).
96 
97    2. When a declaration such as a type, or a variable, is encountered,
98       the function `perform_or_defer_access_check' is called.  It
99       maintains a VEC of all deferred checks.
100 
101    3. The global `current_class_type' or `current_function_decl' is then
102       setup by the parser.  `enforce_access' relies on these information
103       to check access.
104 
105    4. Upon exiting the context mentioned in step 1,
106       `perform_deferred_access_checks' is called to check all declaration
107       stored in the VEC. `pop_deferring_access_checks' is then
108       called to restore the previous access checking mode.
109 
110       In case of parsing error, we simply call `pop_deferring_access_checks'
111       without `perform_deferred_access_checks'.  */
112 
113 typedef struct GTY(()) deferred_access {
114   /* A VEC representing name-lookups for which we have deferred
115      checking access controls.  We cannot check the accessibility of
116      names used in a decl-specifier-seq until we know what is being
117      declared because code like:
118 
119        class A {
120 	 class B {};
121 	 B* f();
122        }
123 
124        A::B* A::f() { return 0; }
125 
126      is valid, even though `A::B' is not generally accessible.  */
127   VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
128 
129   /* The current mode of access checks.  */
130   enum deferring_kind deferring_access_checks_kind;
131 
132 } deferred_access;
133 DEF_VEC_O (deferred_access);
134 DEF_VEC_ALLOC_O (deferred_access,gc);
135 
136 /* Data for deferred access checking.  */
137 static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
138 static GTY(()) unsigned deferred_access_no_check;
139 
140 /* Save the current deferred access states and start deferred
141    access checking iff DEFER_P is true.  */
142 
143 void
144 push_deferring_access_checks (deferring_kind deferring)
145 {
146   /* For context like template instantiation, access checking
147      disabling applies to all nested context.  */
148   if (deferred_access_no_check || deferring == dk_no_check)
149     deferred_access_no_check++;
150   else
151     {
152       deferred_access *ptr;
153 
154       ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
155       ptr->deferred_access_checks = NULL;
156       ptr->deferring_access_checks_kind = deferring;
157     }
158 }
159 
160 /* Resume deferring access checks again after we stopped doing
161    this previously.  */
162 
163 void
164 resume_deferring_access_checks (void)
165 {
166   if (!deferred_access_no_check)
167     VEC_last (deferred_access, deferred_access_stack)
168       ->deferring_access_checks_kind = dk_deferred;
169 }
170 
171 /* Stop deferring access checks.  */
172 
173 void
174 stop_deferring_access_checks (void)
175 {
176   if (!deferred_access_no_check)
177     VEC_last (deferred_access, deferred_access_stack)
178       ->deferring_access_checks_kind = dk_no_deferred;
179 }
180 
181 /* Discard the current deferred access checks and restore the
182    previous states.  */
183 
184 void
185 pop_deferring_access_checks (void)
186 {
187   if (deferred_access_no_check)
188     deferred_access_no_check--;
189   else
190     VEC_pop (deferred_access, deferred_access_stack);
191 }
192 
193 /* Returns a TREE_LIST representing the deferred checks.
194    The TREE_PURPOSE of each node is the type through which the
195    access occurred; the TREE_VALUE is the declaration named.
196    */
197 
198 VEC (deferred_access_check,gc)*
199 get_deferred_access_checks (void)
200 {
201   if (deferred_access_no_check)
202     return NULL;
203   else
204     return (VEC_last (deferred_access, deferred_access_stack)
205 	    ->deferred_access_checks);
206 }
207 
208 /* Take current deferred checks and combine with the
209    previous states if we also defer checks previously.
210    Otherwise perform checks now.  */
211 
212 void
213 pop_to_parent_deferring_access_checks (void)
214 {
215   if (deferred_access_no_check)
216     deferred_access_no_check--;
217   else
218     {
219       VEC (deferred_access_check,gc) *checks;
220       deferred_access *ptr;
221 
222       checks = (VEC_last (deferred_access, deferred_access_stack)
223 		->deferred_access_checks);
224 
225       VEC_pop (deferred_access, deferred_access_stack);
226       ptr = VEC_last (deferred_access, deferred_access_stack);
227       if (ptr->deferring_access_checks_kind == dk_no_deferred)
228 	{
229 	  /* Check access.  */
230 	  perform_access_checks (checks);
231 	}
232       else
233 	{
234 	  /* Merge with parent.  */
235 	  int i, j;
236 	  deferred_access_check *chk, *probe;
237 
238 	  for (i = 0 ;
239 	       VEC_iterate (deferred_access_check, checks, i, chk) ;
240 	       ++i)
241 	    {
242 	      for (j = 0 ;
243 		   VEC_iterate (deferred_access_check,
244 				ptr->deferred_access_checks, j, probe) ;
245 		   ++j)
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 (deferred_access_check, gc,
254 			     ptr->deferred_access_checks, chk);
255 	    found:;
256 	    }
257 	}
258     }
259 }
260 
261 /* Perform the access checks in CHECKS.  The TREE_PURPOSE of each node
262    is the BINFO indicating the qualifying scope used to access the
263    DECL node stored in the TREE_VALUE of the node.  */
264 
265 void
266 perform_access_checks (VEC (deferred_access_check,gc)* checks)
267 {
268   int i;
269   deferred_access_check *chk;
270 
271   if (!checks)
272     return;
273 
274   for (i = 0 ; VEC_iterate (deferred_access_check, checks, i, chk) ; ++i)
275     enforce_access (chk->binfo, chk->decl, chk->diag_decl);
276 }
277 
278 /* Perform the deferred access checks.
279 
280    After performing the checks, we still have to keep the list
281    `deferred_access_stack->deferred_access_checks' since we may want
282    to check access for them again later in a different context.
283    For example:
284 
285      class A {
286        typedef int X;
287        static X a;
288      };
289      A::X A::a, x;	// No error for `A::a', error for `x'
290 
291    We have to perform deferred access of `A::X', first with `A::a',
292    next with `x'.  */
293 
294 void
295 perform_deferred_access_checks (void)
296 {
297   perform_access_checks (get_deferred_access_checks ());
298 }
299 
300 /* Defer checking the accessibility of DECL, when looked up in
301    BINFO. DIAG_DECL is the declaration to use to print diagnostics.  */
302 
303 void
304 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
305 {
306   int i;
307   deferred_access *ptr;
308   deferred_access_check *chk;
309   deferred_access_check *new_access;
310 
311 
312   /* Exit if we are in a context that no access checking is performed.
313      */
314   if (deferred_access_no_check)
315     return;
316 
317   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
318 
319   ptr = VEC_last (deferred_access, deferred_access_stack);
320 
321   /* If we are not supposed to defer access checks, just check now.  */
322   if (ptr->deferring_access_checks_kind == dk_no_deferred)
323     {
324       enforce_access (binfo, decl, diag_decl);
325       return;
326     }
327 
328   /* See if we are already going to perform this check.  */
329   for (i = 0 ;
330        VEC_iterate (deferred_access_check,
331 		    ptr->deferred_access_checks, i, chk) ;
332        ++i)
333     {
334       if (chk->decl == decl && chk->binfo == binfo &&
335 	  chk->diag_decl == diag_decl)
336 	{
337 	  return;
338 	}
339     }
340   /* If not, record the check.  */
341   new_access =
342     VEC_safe_push (deferred_access_check, gc,
343 		   ptr->deferred_access_checks, 0);
344   new_access->binfo = binfo;
345   new_access->decl = decl;
346   new_access->diag_decl = diag_decl;
347 }
348 
349 /* Returns nonzero if the current statement is a full expression,
350    i.e. temporaries created during that statement should be destroyed
351    at the end of the statement.  */
352 
353 int
354 stmts_are_full_exprs_p (void)
355 {
356   return current_stmt_tree ()->stmts_are_full_exprs_p;
357 }
358 
359 /* T is a statement.  Add it to the statement-tree.  This is the C++
360    version.  The C/ObjC frontends have a slightly different version of
361    this function.  */
362 
363 tree
364 add_stmt (tree t)
365 {
366   enum tree_code code = TREE_CODE (t);
367 
368   if (EXPR_P (t) && code != LABEL_EXPR)
369     {
370       if (!EXPR_HAS_LOCATION (t))
371 	SET_EXPR_LOCATION (t, input_location);
372 
373       /* When we expand a statement-tree, we must know whether or not the
374 	 statements are full-expressions.  We record that fact here.  */
375       STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
376     }
377 
378   /* Add T to the statement-tree.  Non-side-effect statements need to be
379      recorded during statement expressions.  */
380   append_to_statement_list_force (t, &cur_stmt_list);
381 
382   return t;
383 }
384 
385 /* Returns the stmt_tree to which statements are currently being added.  */
386 
387 stmt_tree
388 current_stmt_tree (void)
389 {
390   return (cfun
391 	  ? &cfun->language->base.x_stmt_tree
392 	  : &scope_chain->x_stmt_tree);
393 }
394 
395 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR.  */
396 
397 static tree
398 maybe_cleanup_point_expr (tree expr)
399 {
400   if (!processing_template_decl && stmts_are_full_exprs_p ())
401     expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
402   return expr;
403 }
404 
405 /* Like maybe_cleanup_point_expr except have the type of the new expression be
406    void so we don't need to create a temporary variable to hold the inner
407    expression.  The reason why we do this is because the original type might be
408    an aggregate and we cannot create a temporary variable for that type.  */
409 
410 static tree
411 maybe_cleanup_point_expr_void (tree expr)
412 {
413   if (!processing_template_decl && stmts_are_full_exprs_p ())
414     expr = fold_build_cleanup_point_expr (void_type_node, expr);
415   return expr;
416 }
417 
418 
419 
420 /* Create a declaration statement for the declaration given by the DECL.  */
421 
422 void
423 add_decl_expr (tree decl)
424 {
425   tree r = build_stmt (input_location, DECL_EXPR, decl);
426   if (DECL_INITIAL (decl)
427       || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
428     r = maybe_cleanup_point_expr_void (r);
429   add_stmt (r);
430 }
431 
432 /* Finish a scope.  */
433 
434 tree
435 do_poplevel (tree stmt_list)
436 {
437   tree block = NULL;
438 
439   if (stmts_are_full_exprs_p ())
440     block = poplevel (kept_level_p (), 1, 0);
441 
442   stmt_list = pop_stmt_list (stmt_list);
443 
444   if (!processing_template_decl)
445     {
446       stmt_list = c_build_bind_expr (input_location, block, stmt_list);
447       /* ??? See c_end_compound_stmt re statement expressions.  */
448     }
449 
450   return stmt_list;
451 }
452 
453 /* Begin a new scope.  */
454 
455 static tree
456 do_pushlevel (scope_kind sk)
457 {
458   tree ret = push_stmt_list ();
459   if (stmts_are_full_exprs_p ())
460     begin_scope (sk, NULL);
461   return ret;
462 }
463 
464 /* Queue a cleanup.  CLEANUP is an expression/statement to be executed
465    when the current scope is exited.  EH_ONLY is true when this is not
466    meant to apply to normal control flow transfer.  */
467 
468 void
469 push_cleanup (tree decl, tree cleanup, bool eh_only)
470 {
471   tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
472   CLEANUP_EH_ONLY (stmt) = eh_only;
473   add_stmt (stmt);
474   CLEANUP_BODY (stmt) = push_stmt_list ();
475 }
476 
477 /* Begin a conditional that might contain a declaration.  When generating
478    normal code, we want the declaration to appear before the statement
479    containing the conditional.  When generating template code, we want the
480    conditional to be rendered as the raw DECL_EXPR.  */
481 
482 static void
483 begin_cond (tree *cond_p)
484 {
485   if (processing_template_decl)
486     *cond_p = push_stmt_list ();
487 }
488 
489 /* Finish such a conditional.  */
490 
491 static void
492 finish_cond (tree *cond_p, tree expr)
493 {
494   if (processing_template_decl)
495     {
496       tree cond = pop_stmt_list (*cond_p);
497       if (TREE_CODE (cond) == DECL_EXPR)
498 	expr = cond;
499 
500       if (check_for_bare_parameter_packs (expr))
501         *cond_p = error_mark_node;
502     }
503   *cond_p = expr;
504 }
505 
506 /* If *COND_P specifies a conditional with a declaration, transform the
507    loop such that
508 	    while (A x = 42) { }
509 	    for (; A x = 42;) { }
510    becomes
511 	    while (true) { A x = 42; if (!x) break; }
512 	    for (;;) { A x = 42; if (!x) break; }
513    The statement list for BODY will be empty if the conditional did
514    not declare anything.  */
515 
516 static void
517 simplify_loop_decl_cond (tree *cond_p, tree body)
518 {
519   tree cond, if_stmt;
520 
521   if (!TREE_SIDE_EFFECTS (body))
522     return;
523 
524   cond = *cond_p;
525   *cond_p = boolean_true_node;
526 
527   if_stmt = begin_if_stmt ();
528   cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
529   finish_if_stmt_cond (cond, if_stmt);
530   finish_break_stmt ();
531   finish_then_clause (if_stmt);
532   finish_if_stmt (if_stmt);
533 }
534 
535 /* Finish a goto-statement.  */
536 
537 tree
538 finish_goto_stmt (tree destination)
539 {
540   if (TREE_CODE (destination) == IDENTIFIER_NODE)
541     destination = lookup_label (destination);
542 
543   /* We warn about unused labels with -Wunused.  That means we have to
544      mark the used labels as used.  */
545   if (TREE_CODE (destination) == LABEL_DECL)
546     TREE_USED (destination) = 1;
547   else
548     {
549       if (!processing_template_decl)
550 	{
551 	  destination = cp_convert (ptr_type_node, destination);
552 	  if (error_operand_p (destination))
553 	    return NULL_TREE;
554 	}
555       /* We don't inline calls to functions with computed gotos.
556 	 Those functions are typically up to some funny business,
557 	 and may be depending on the labels being at particular
558 	 addresses, or some such.  */
559       DECL_UNINLINABLE (current_function_decl) = 1;
560     }
561 
562   check_goto (destination);
563 
564   return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
565 }
566 
567 /* COND is the condition-expression for an if, while, etc.,
568    statement.  Convert it to a boolean value, if appropriate.
569    In addition, verify sequence points if -Wsequence-point is enabled.  */
570 
571 static tree
572 maybe_convert_cond (tree cond)
573 {
574   /* Empty conditions remain empty.  */
575   if (!cond)
576     return NULL_TREE;
577 
578   /* Wait until we instantiate templates before doing conversion.  */
579   if (processing_template_decl)
580     return cond;
581 
582   if (warn_sequence_point)
583     verify_sequence_points (cond);
584 
585   /* Do the conversion.  */
586   cond = convert_from_reference (cond);
587 
588   if (TREE_CODE (cond) == MODIFY_EXPR
589       && !TREE_NO_WARNING (cond)
590       && warn_parentheses)
591     {
592       warning (OPT_Wparentheses,
593 	       "suggest parentheses around assignment used as truth value");
594       TREE_NO_WARNING (cond) = 1;
595     }
596 
597   return condition_conversion (cond);
598 }
599 
600 /* Finish an expression-statement, whose EXPRESSION is as indicated.  */
601 
602 tree
603 finish_expr_stmt (tree expr)
604 {
605   tree r = NULL_TREE;
606 
607   if (expr != NULL_TREE)
608     {
609       if (!processing_template_decl)
610 	{
611 	  if (warn_sequence_point)
612 	    verify_sequence_points (expr);
613 	  expr = convert_to_void (expr, "statement", tf_warning_or_error);
614 	}
615       else if (!type_dependent_expression_p (expr))
616 	convert_to_void (build_non_dependent_expr (expr), "statement",
617                          tf_warning_or_error);
618 
619       if (check_for_bare_parameter_packs (expr))
620         expr = error_mark_node;
621 
622       /* Simplification of inner statement expressions, compound exprs,
623 	 etc can result in us already having an EXPR_STMT.  */
624       if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
625 	{
626 	  if (TREE_CODE (expr) != EXPR_STMT)
627 	    expr = build_stmt (input_location, EXPR_STMT, expr);
628 	  expr = maybe_cleanup_point_expr_void (expr);
629 	}
630 
631       r = add_stmt (expr);
632     }
633 
634   finish_stmt ();
635 
636   return r;
637 }
638 
639 
640 /* Begin an if-statement.  Returns a newly created IF_STMT if
641    appropriate.  */
642 
643 tree
644 begin_if_stmt (void)
645 {
646   tree r, scope;
647   scope = do_pushlevel (sk_block);
648   r = build_stmt (input_location, IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
649   TREE_CHAIN (r) = scope;
650   begin_cond (&IF_COND (r));
651   return r;
652 }
653 
654 /* Process the COND of an if-statement, which may be given by
655    IF_STMT.  */
656 
657 void
658 finish_if_stmt_cond (tree cond, tree if_stmt)
659 {
660   finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
661   add_stmt (if_stmt);
662   THEN_CLAUSE (if_stmt) = push_stmt_list ();
663 }
664 
665 /* Finish the then-clause of an if-statement, which may be given by
666    IF_STMT.  */
667 
668 tree
669 finish_then_clause (tree if_stmt)
670 {
671   THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
672   return if_stmt;
673 }
674 
675 /* Begin the else-clause of an if-statement.  */
676 
677 void
678 begin_else_clause (tree if_stmt)
679 {
680   ELSE_CLAUSE (if_stmt) = push_stmt_list ();
681 }
682 
683 /* Finish the else-clause of an if-statement, which may be given by
684    IF_STMT.  */
685 
686 void
687 finish_else_clause (tree if_stmt)
688 {
689   ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
690 }
691 
692 /* Finish an if-statement.  */
693 
694 void
695 finish_if_stmt (tree if_stmt)
696 {
697   tree scope = TREE_CHAIN (if_stmt);
698   TREE_CHAIN (if_stmt) = NULL;
699   add_stmt (do_poplevel (scope));
700   finish_stmt ();
701 }
702 
703 /* Begin a while-statement.  Returns a newly created WHILE_STMT if
704    appropriate.  */
705 
706 tree
707 begin_while_stmt (void)
708 {
709   tree r;
710   r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
711   add_stmt (r);
712   WHILE_BODY (r) = do_pushlevel (sk_block);
713   begin_cond (&WHILE_COND (r));
714   return r;
715 }
716 
717 /* Process the COND of a while-statement, which may be given by
718    WHILE_STMT.  */
719 
720 void
721 finish_while_stmt_cond (tree cond, tree while_stmt)
722 {
723   finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
724   simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
725 }
726 
727 /* Finish a while-statement, which may be given by WHILE_STMT.  */
728 
729 void
730 finish_while_stmt (tree while_stmt)
731 {
732   WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
733   finish_stmt ();
734 }
735 
736 /* Begin a do-statement.  Returns a newly created DO_STMT if
737    appropriate.  */
738 
739 tree
740 begin_do_stmt (void)
741 {
742   tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
743   add_stmt (r);
744   DO_BODY (r) = push_stmt_list ();
745   return r;
746 }
747 
748 /* Finish the body of a do-statement, which may be given by DO_STMT.  */
749 
750 void
751 finish_do_body (tree do_stmt)
752 {
753   tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
754 
755   if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
756     body = STATEMENT_LIST_TAIL (body)->stmt;
757 
758   if (IS_EMPTY_STMT (body))
759     warning (OPT_Wempty_body,
760             "suggest explicit braces around empty body in %<do%> statement");
761 }
762 
763 /* Finish a do-statement, which may be given by DO_STMT, and whose
764    COND is as indicated.  */
765 
766 void
767 finish_do_stmt (tree cond, tree do_stmt)
768 {
769   cond = maybe_convert_cond (cond);
770   DO_COND (do_stmt) = cond;
771   finish_stmt ();
772 }
773 
774 /* Finish a return-statement.  The EXPRESSION returned, if any, is as
775    indicated.  */
776 
777 tree
778 finish_return_stmt (tree expr)
779 {
780   tree r;
781   bool no_warning;
782 
783   expr = check_return_expr (expr, &no_warning);
784 
785   if (flag_openmp && !check_omp_return ())
786     return error_mark_node;
787   if (!processing_template_decl)
788     {
789       if (warn_sequence_point)
790 	verify_sequence_points (expr);
791 
792       if (DECL_DESTRUCTOR_P (current_function_decl)
793 	  || (DECL_CONSTRUCTOR_P (current_function_decl)
794 	      && targetm.cxx.cdtor_returns_this ()))
795 	{
796 	  /* Similarly, all destructors must run destructors for
797 	     base-classes before returning.  So, all returns in a
798 	     destructor get sent to the DTOR_LABEL; finish_function emits
799 	     code to return a value there.  */
800 	  return finish_goto_stmt (cdtor_label);
801 	}
802     }
803 
804   r = build_stmt (input_location, RETURN_EXPR, expr);
805   TREE_NO_WARNING (r) |= no_warning;
806   r = maybe_cleanup_point_expr_void (r);
807   r = add_stmt (r);
808   finish_stmt ();
809 
810   return r;
811 }
812 
813 /* Begin a for-statement.  Returns a new FOR_STMT if appropriate.  */
814 
815 tree
816 begin_for_stmt (void)
817 {
818   tree r;
819 
820   r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
821 		  NULL_TREE, NULL_TREE);
822 
823   if (flag_new_for_scope > 0)
824     TREE_CHAIN (r) = do_pushlevel (sk_for);
825 
826   if (processing_template_decl)
827     FOR_INIT_STMT (r) = push_stmt_list ();
828 
829   return r;
830 }
831 
832 /* Finish the for-init-statement of a for-statement, which may be
833    given by FOR_STMT.  */
834 
835 void
836 finish_for_init_stmt (tree for_stmt)
837 {
838   if (processing_template_decl)
839     FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
840   add_stmt (for_stmt);
841   FOR_BODY (for_stmt) = do_pushlevel (sk_block);
842   begin_cond (&FOR_COND (for_stmt));
843 }
844 
845 /* Finish the COND of a for-statement, which may be given by
846    FOR_STMT.  */
847 
848 void
849 finish_for_cond (tree cond, tree for_stmt)
850 {
851   finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
852   simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
853 }
854 
855 /* Finish the increment-EXPRESSION in a for-statement, which may be
856    given by FOR_STMT.  */
857 
858 void
859 finish_for_expr (tree expr, tree for_stmt)
860 {
861   if (!expr)
862     return;
863   /* If EXPR is an overloaded function, issue an error; there is no
864      context available to use to perform overload resolution.  */
865   if (type_unknown_p (expr))
866     {
867       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
868       expr = error_mark_node;
869     }
870   if (!processing_template_decl)
871     {
872       if (warn_sequence_point)
873 	verify_sequence_points (expr);
874       expr = convert_to_void (expr, "3rd expression in for",
875                               tf_warning_or_error);
876     }
877   else if (!type_dependent_expression_p (expr))
878     convert_to_void (build_non_dependent_expr (expr), "3rd expression in for",
879                      tf_warning_or_error);
880   expr = maybe_cleanup_point_expr_void (expr);
881   if (check_for_bare_parameter_packs (expr))
882     expr = error_mark_node;
883   FOR_EXPR (for_stmt) = expr;
884 }
885 
886 /* Finish the body of a for-statement, which may be given by
887    FOR_STMT.  The increment-EXPR for the loop must be
888    provided.  */
889 
890 void
891 finish_for_stmt (tree for_stmt)
892 {
893   FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
894 
895   /* Pop the scope for the body of the loop.  */
896   if (flag_new_for_scope > 0)
897     {
898       tree scope = TREE_CHAIN (for_stmt);
899       TREE_CHAIN (for_stmt) = NULL;
900       add_stmt (do_poplevel (scope));
901     }
902 
903   finish_stmt ();
904 }
905 
906 /* Finish a break-statement.  */
907 
908 tree
909 finish_break_stmt (void)
910 {
911   return add_stmt (build_stmt (input_location, BREAK_STMT));
912 }
913 
914 /* Finish a continue-statement.  */
915 
916 tree
917 finish_continue_stmt (void)
918 {
919   return add_stmt (build_stmt (input_location, CONTINUE_STMT));
920 }
921 
922 /* Begin a switch-statement.  Returns a new SWITCH_STMT if
923    appropriate.  */
924 
925 tree
926 begin_switch_stmt (void)
927 {
928   tree r, scope;
929 
930   r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
931 
932   scope = do_pushlevel (sk_block);
933   TREE_CHAIN (r) = scope;
934   begin_cond (&SWITCH_STMT_COND (r));
935 
936   return r;
937 }
938 
939 /* Finish the cond of a switch-statement.  */
940 
941 void
942 finish_switch_cond (tree cond, tree switch_stmt)
943 {
944   tree orig_type = NULL;
945   if (!processing_template_decl)
946     {
947       /* Convert the condition to an integer or enumeration type.  */
948       cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
949       if (cond == NULL_TREE)
950 	{
951 	  error ("switch quantity not an integer");
952 	  cond = error_mark_node;
953 	}
954       orig_type = TREE_TYPE (cond);
955       if (cond != error_mark_node)
956 	{
957 	  /* [stmt.switch]
958 
959 	     Integral promotions are performed.  */
960 	  cond = perform_integral_promotions (cond);
961 	  cond = maybe_cleanup_point_expr (cond);
962 	}
963     }
964   if (check_for_bare_parameter_packs (cond))
965     cond = error_mark_node;
966   else if (!processing_template_decl && warn_sequence_point)
967     verify_sequence_points (cond);
968 
969   finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
970   SWITCH_STMT_TYPE (switch_stmt) = orig_type;
971   add_stmt (switch_stmt);
972   push_switch (switch_stmt);
973   SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
974 }
975 
976 /* Finish the body of a switch-statement, which may be given by
977    SWITCH_STMT.  The COND to switch on is indicated.  */
978 
979 void
980 finish_switch_stmt (tree switch_stmt)
981 {
982   tree scope;
983 
984   SWITCH_STMT_BODY (switch_stmt) =
985     pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
986   pop_switch ();
987   finish_stmt ();
988 
989   scope = TREE_CHAIN (switch_stmt);
990   TREE_CHAIN (switch_stmt) = NULL;
991   add_stmt (do_poplevel (scope));
992 }
993 
994 /* Begin a try-block.  Returns a newly-created TRY_BLOCK if
995    appropriate.  */
996 
997 tree
998 begin_try_block (void)
999 {
1000   tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1001   add_stmt (r);
1002   TRY_STMTS (r) = push_stmt_list ();
1003   return r;
1004 }
1005 
1006 /* Likewise, for a function-try-block.  The block returned in
1007    *COMPOUND_STMT is an artificial outer scope, containing the
1008    function-try-block.  */
1009 
1010 tree
1011 begin_function_try_block (tree *compound_stmt)
1012 {
1013   tree r;
1014   /* This outer scope does not exist in the C++ standard, but we need
1015      a place to put __FUNCTION__ and similar variables.  */
1016   *compound_stmt = begin_compound_stmt (0);
1017   r = begin_try_block ();
1018   FN_TRY_BLOCK_P (r) = 1;
1019   return r;
1020 }
1021 
1022 /* Finish a try-block, which may be given by TRY_BLOCK.  */
1023 
1024 void
1025 finish_try_block (tree try_block)
1026 {
1027   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1028   TRY_HANDLERS (try_block) = push_stmt_list ();
1029 }
1030 
1031 /* Finish the body of a cleanup try-block, which may be given by
1032    TRY_BLOCK.  */
1033 
1034 void
1035 finish_cleanup_try_block (tree try_block)
1036 {
1037   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1038 }
1039 
1040 /* Finish an implicitly generated try-block, with a cleanup is given
1041    by CLEANUP.  */
1042 
1043 void
1044 finish_cleanup (tree cleanup, tree try_block)
1045 {
1046   TRY_HANDLERS (try_block) = cleanup;
1047   CLEANUP_P (try_block) = 1;
1048 }
1049 
1050 /* Likewise, for a function-try-block.  */
1051 
1052 void
1053 finish_function_try_block (tree try_block)
1054 {
1055   finish_try_block (try_block);
1056   /* FIXME : something queer about CTOR_INITIALIZER somehow following
1057      the try block, but moving it inside.  */
1058   in_function_try_handler = 1;
1059 }
1060 
1061 /* Finish a handler-sequence for a try-block, which may be given by
1062    TRY_BLOCK.  */
1063 
1064 void
1065 finish_handler_sequence (tree try_block)
1066 {
1067   TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1068   check_handlers (TRY_HANDLERS (try_block));
1069 }
1070 
1071 /* Finish the handler-seq for a function-try-block, given by
1072    TRY_BLOCK.  COMPOUND_STMT is the outer block created by
1073    begin_function_try_block.  */
1074 
1075 void
1076 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1077 {
1078   in_function_try_handler = 0;
1079   finish_handler_sequence (try_block);
1080   finish_compound_stmt (compound_stmt);
1081 }
1082 
1083 /* Begin a handler.  Returns a HANDLER if appropriate.  */
1084 
1085 tree
1086 begin_handler (void)
1087 {
1088   tree r;
1089 
1090   r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1091   add_stmt (r);
1092 
1093   /* Create a binding level for the eh_info and the exception object
1094      cleanup.  */
1095   HANDLER_BODY (r) = do_pushlevel (sk_catch);
1096 
1097   return r;
1098 }
1099 
1100 /* Finish the handler-parameters for a handler, which may be given by
1101    HANDLER.  DECL is the declaration for the catch parameter, or NULL
1102    if this is a `catch (...)' clause.  */
1103 
1104 void
1105 finish_handler_parms (tree decl, tree handler)
1106 {
1107   tree type = NULL_TREE;
1108   if (processing_template_decl)
1109     {
1110       if (decl)
1111 	{
1112 	  decl = pushdecl (decl);
1113 	  decl = push_template_decl (decl);
1114 	  HANDLER_PARMS (handler) = decl;
1115 	  type = TREE_TYPE (decl);
1116 	}
1117     }
1118   else
1119     type = expand_start_catch_block (decl);
1120   HANDLER_TYPE (handler) = type;
1121   if (!processing_template_decl && type)
1122     mark_used (eh_type_info (type));
1123 }
1124 
1125 /* Finish a handler, which may be given by HANDLER.  The BLOCKs are
1126    the return value from the matching call to finish_handler_parms.  */
1127 
1128 void
1129 finish_handler (tree handler)
1130 {
1131   if (!processing_template_decl)
1132     expand_end_catch_block ();
1133   HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1134 }
1135 
1136 /* Begin a compound statement.  FLAGS contains some bits that control the
1137    behavior and context.  If BCS_NO_SCOPE is set, the compound statement
1138    does not define a scope.  If BCS_FN_BODY is set, this is the outermost
1139    block of a function.  If BCS_TRY_BLOCK is set, this is the block
1140    created on behalf of a TRY statement.  Returns a token to be passed to
1141    finish_compound_stmt.  */
1142 
1143 tree
1144 begin_compound_stmt (unsigned int flags)
1145 {
1146   tree r;
1147 
1148   if (flags & BCS_NO_SCOPE)
1149     {
1150       r = push_stmt_list ();
1151       STATEMENT_LIST_NO_SCOPE (r) = 1;
1152 
1153       /* Normally, we try hard to keep the BLOCK for a statement-expression.
1154 	 But, if it's a statement-expression with a scopeless block, there's
1155 	 nothing to keep, and we don't want to accidentally keep a block
1156 	 *inside* the scopeless block.  */
1157       keep_next_level (false);
1158     }
1159   else
1160     r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1161 
1162   /* When processing a template, we need to remember where the braces were,
1163      so that we can set up identical scopes when instantiating the template
1164      later.  BIND_EXPR is a handy candidate for this.
1165      Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1166      result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1167      processing templates.  */
1168   if (processing_template_decl)
1169     {
1170       r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1171       BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1172       BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1173       TREE_SIDE_EFFECTS (r) = 1;
1174     }
1175 
1176   return r;
1177 }
1178 
1179 /* Finish a compound-statement, which is given by STMT.  */
1180 
1181 void
1182 finish_compound_stmt (tree stmt)
1183 {
1184   if (TREE_CODE (stmt) == BIND_EXPR)
1185     BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt));
1186   else if (STATEMENT_LIST_NO_SCOPE (stmt))
1187     stmt = pop_stmt_list (stmt);
1188   else
1189     {
1190       /* Destroy any ObjC "super" receivers that may have been
1191 	 created.  */
1192       objc_clear_super_receiver ();
1193 
1194       stmt = do_poplevel (stmt);
1195     }
1196 
1197   /* ??? See c_end_compound_stmt wrt statement expressions.  */
1198   add_stmt (stmt);
1199   finish_stmt ();
1200 }
1201 
1202 /* Finish an asm-statement, whose components are a STRING, some
1203    OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1204    LABELS.  Also note whether the asm-statement should be
1205    considered volatile.  */
1206 
1207 tree
1208 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1209 		 tree input_operands, tree clobbers, tree labels)
1210 {
1211   tree r;
1212   tree t;
1213   int ninputs = list_length (input_operands);
1214   int noutputs = list_length (output_operands);
1215 
1216   if (!processing_template_decl)
1217     {
1218       const char *constraint;
1219       const char **oconstraints;
1220       bool allows_mem, allows_reg, is_inout;
1221       tree operand;
1222       int i;
1223 
1224       oconstraints = (const char **) alloca (noutputs * sizeof (char *));
1225 
1226       string = resolve_asm_operand_names (string, output_operands,
1227 					  input_operands, labels);
1228 
1229       for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1230 	{
1231 	  operand = TREE_VALUE (t);
1232 
1233 	  /* ??? Really, this should not be here.  Users should be using a
1234 	     proper lvalue, dammit.  But there's a long history of using
1235 	     casts in the output operands.  In cases like longlong.h, this
1236 	     becomes a primitive form of typechecking -- if the cast can be
1237 	     removed, then the output operand had a type of the proper width;
1238 	     otherwise we'll get an error.  Gross, but ...  */
1239 	  STRIP_NOPS (operand);
1240 
1241 	  if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1242 	    operand = error_mark_node;
1243 
1244 	  if (operand != error_mark_node
1245 	      && (TREE_READONLY (operand)
1246 		  || CP_TYPE_CONST_P (TREE_TYPE (operand))
1247 		  /* Functions are not modifiable, even though they are
1248 		     lvalues.  */
1249 		  || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1250 		  || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1251 		  /* If it's an aggregate and any field is const, then it is
1252 		     effectively const.  */
1253 		  || (CLASS_TYPE_P (TREE_TYPE (operand))
1254 		      && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1255 	    readonly_error (operand, REK_ASSIGNMENT_ASM);
1256 
1257 	  constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1258 	  oconstraints[i] = constraint;
1259 
1260 	  if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1261 				       &allows_mem, &allows_reg, &is_inout))
1262 	    {
1263 	      /* If the operand is going to end up in memory,
1264 		 mark it addressable.  */
1265 	      if (!allows_reg && !cxx_mark_addressable (operand))
1266 		operand = error_mark_node;
1267 	    }
1268 	  else
1269 	    operand = error_mark_node;
1270 
1271 	  TREE_VALUE (t) = operand;
1272 	}
1273 
1274       for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1275 	{
1276 	  constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1277 	  operand = decay_conversion (TREE_VALUE (t));
1278 
1279 	  /* If the type of the operand hasn't been determined (e.g.,
1280 	     because it involves an overloaded function), then issue
1281 	     an error message.  There's no context available to
1282 	     resolve the overloading.  */
1283 	  if (TREE_TYPE (operand) == unknown_type_node)
1284 	    {
1285 	      error ("type of asm operand %qE could not be determined",
1286 		     TREE_VALUE (t));
1287 	      operand = error_mark_node;
1288 	    }
1289 
1290 	  if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1291 				      oconstraints, &allows_mem, &allows_reg))
1292 	    {
1293 	      /* If the operand is going to end up in memory,
1294 		 mark it addressable.  */
1295 	      if (!allows_reg && allows_mem)
1296 		{
1297 		  /* Strip the nops as we allow this case.  FIXME, this really
1298 		     should be rejected or made deprecated.  */
1299 		  STRIP_NOPS (operand);
1300 		  if (!cxx_mark_addressable (operand))
1301 		    operand = error_mark_node;
1302 		}
1303 	    }
1304 	  else
1305 	    operand = error_mark_node;
1306 
1307 	  TREE_VALUE (t) = operand;
1308 	}
1309     }
1310 
1311   r = build_stmt (input_location, ASM_EXPR, string,
1312 		  output_operands, input_operands,
1313 		  clobbers, labels);
1314   ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1315   r = maybe_cleanup_point_expr_void (r);
1316   return add_stmt (r);
1317 }
1318 
1319 /* Finish a label with the indicated NAME.  Returns the new label.  */
1320 
1321 tree
1322 finish_label_stmt (tree name)
1323 {
1324   tree decl = define_label (input_location, name);
1325 
1326   if (decl == error_mark_node)
1327     return error_mark_node;
1328 
1329   add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1330 
1331   return decl;
1332 }
1333 
1334 /* Finish a series of declarations for local labels.  G++ allows users
1335    to declare "local" labels, i.e., labels with scope.  This extension
1336    is useful when writing code involving statement-expressions.  */
1337 
1338 void
1339 finish_label_decl (tree name)
1340 {
1341   if (!at_function_scope_p ())
1342     {
1343       error ("__label__ declarations are only allowed in function scopes");
1344       return;
1345     }
1346 
1347   add_decl_expr (declare_local_label (name));
1348 }
1349 
1350 /* When DECL goes out of scope, make sure that CLEANUP is executed.  */
1351 
1352 void
1353 finish_decl_cleanup (tree decl, tree cleanup)
1354 {
1355   push_cleanup (decl, cleanup, false);
1356 }
1357 
1358 /* If the current scope exits with an exception, run CLEANUP.  */
1359 
1360 void
1361 finish_eh_cleanup (tree cleanup)
1362 {
1363   push_cleanup (NULL, cleanup, true);
1364 }
1365 
1366 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1367    order they were written by the user.  Each node is as for
1368    emit_mem_initializers.  */
1369 
1370 void
1371 finish_mem_initializers (tree mem_inits)
1372 {
1373   /* Reorder the MEM_INITS so that they are in the order they appeared
1374      in the source program.  */
1375   mem_inits = nreverse (mem_inits);
1376 
1377   if (processing_template_decl)
1378     {
1379       tree mem;
1380 
1381       for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1382         {
1383           /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1384              check for bare parameter packs in the TREE_VALUE, because
1385              any parameter packs in the TREE_VALUE have already been
1386              bound as part of the TREE_PURPOSE.  See
1387              make_pack_expansion for more information.  */
1388           if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1389               && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1390             TREE_VALUE (mem) = error_mark_node;
1391         }
1392 
1393       add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1394     }
1395   else
1396     emit_mem_initializers (mem_inits);
1397 }
1398 
1399 /* Finish a parenthesized expression EXPR.  */
1400 
1401 tree
1402 finish_parenthesized_expr (tree expr)
1403 {
1404   if (EXPR_P (expr))
1405     /* This inhibits warnings in c_common_truthvalue_conversion.  */
1406     TREE_NO_WARNING (expr) = 1;
1407 
1408   if (TREE_CODE (expr) == OFFSET_REF)
1409     /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1410        enclosed in parentheses.  */
1411     PTRMEM_OK_P (expr) = 0;
1412 
1413   if (TREE_CODE (expr) == STRING_CST)
1414     PAREN_STRING_LITERAL_P (expr) = 1;
1415 
1416   return expr;
1417 }
1418 
1419 /* Finish a reference to a non-static data member (DECL) that is not
1420    preceded by `.' or `->'.  */
1421 
1422 tree
1423 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1424 {
1425   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1426 
1427   if (!object && cp_unevaluated_operand != 0)
1428     {
1429       /* DR 613: Can use non-static data members without an associated
1430          object in sizeof/decltype/alignof.  */
1431       tree scope = qualifying_scope;
1432       if (scope == NULL_TREE)
1433 	scope = context_for_name_lookup (decl);
1434       object = maybe_dummy_object (scope, NULL);
1435     }
1436 
1437   if (!object)
1438     {
1439       if (current_function_decl
1440 	  && DECL_STATIC_FUNCTION_P (current_function_decl))
1441 	error ("invalid use of member %q+D in static member function", decl);
1442       else
1443 	error ("invalid use of non-static data member %q+D", decl);
1444       error ("from this location");
1445 
1446       return error_mark_node;
1447     }
1448 
1449   /* If decl is a non-capture field and object has a lambda type,
1450      then we have a reference to a member of 'this' from a
1451      lambda inside a non-static member function, and we must get to decl
1452      through the 'this' capture.  If decl is not a member of that object,
1453      either, then its access will still fail later.  */
1454   if (LAMBDA_TYPE_P (TREE_TYPE (object))
1455       && !LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
1456     object = cp_build_indirect_ref (lambda_expr_this_capture
1457 				    (CLASSTYPE_LAMBDA_EXPR
1458 				     (TREE_TYPE (object))),
1459                                     RO_NULL,
1460                                     /*complain=*/tf_warning_or_error);
1461 
1462   if (current_class_ptr)
1463     TREE_USED (current_class_ptr) = 1;
1464   if (processing_template_decl && !qualifying_scope)
1465     {
1466       tree type = TREE_TYPE (decl);
1467 
1468       if (TREE_CODE (type) == REFERENCE_TYPE)
1469 	type = TREE_TYPE (type);
1470       else
1471 	{
1472 	  /* Set the cv qualifiers.  */
1473 	  int quals = (current_class_ref
1474 		       ? cp_type_quals (TREE_TYPE (current_class_ref))
1475 		       : TYPE_UNQUALIFIED);
1476 
1477 	  if (DECL_MUTABLE_P (decl))
1478 	    quals &= ~TYPE_QUAL_CONST;
1479 
1480 	  quals |= cp_type_quals (TREE_TYPE (decl));
1481 	  type = cp_build_qualified_type (type, quals);
1482 	}
1483 
1484       return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
1485     }
1486   /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1487      QUALIFYING_SCOPE is also non-null.  Wrap this in a SCOPE_REF
1488      for now.  */
1489   else if (processing_template_decl)
1490     return build_qualified_name (TREE_TYPE (decl),
1491 				 qualifying_scope,
1492 				 DECL_NAME (decl),
1493 				 /*template_p=*/false);
1494   else
1495     {
1496       tree access_type = TREE_TYPE (object);
1497       tree lookup_context = context_for_name_lookup (decl);
1498 
1499       while (!DERIVED_FROM_P (lookup_context, access_type))
1500 	{
1501 	  access_type = TYPE_CONTEXT (access_type);
1502 	  while (access_type && DECL_P (access_type))
1503 	    access_type = DECL_CONTEXT (access_type);
1504 
1505 	  if (!access_type)
1506 	    {
1507 	      error ("object missing in reference to %q+D", decl);
1508 	      error ("from this location");
1509 	      return error_mark_node;
1510 	    }
1511 	}
1512 
1513       perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1514 				     decl);
1515 
1516       /* If the data member was named `C::M', convert `*this' to `C'
1517 	 first.  */
1518       if (qualifying_scope)
1519 	{
1520 	  tree binfo = NULL_TREE;
1521 	  object = build_scoped_ref (object, qualifying_scope,
1522 				     &binfo);
1523 	}
1524 
1525       return build_class_member_access_expr (object, decl,
1526 					     /*access_path=*/NULL_TREE,
1527 					     /*preserve_reference=*/false,
1528 					     tf_warning_or_error);
1529     }
1530 }
1531 
1532 /* If we are currently parsing a template and we encountered a typedef
1533    TYPEDEF_DECL that is being accessed though CONTEXT, this function
1534    adds the typedef to a list tied to the current template.
1535    At tempate instantiatin time, that list is walked and access check
1536    performed for each typedef.
1537    LOCATION is the location of the usage point of TYPEDEF_DECL.  */
1538 
1539 void
1540 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1541                                                   tree context,
1542 						  location_t location)
1543 {
1544     tree template_info = NULL;
1545     tree cs = current_scope ();
1546 
1547     if (!is_typedef_decl (typedef_decl)
1548 	|| !context
1549 	|| !CLASS_TYPE_P (context)
1550 	|| !cs)
1551       return;
1552 
1553     if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1554       template_info = get_template_info (cs);
1555 
1556     if (template_info
1557 	&& TI_TEMPLATE (template_info)
1558 	&& !currently_open_class (context))
1559       append_type_to_template_for_access_check (cs, typedef_decl,
1560 						context, location);
1561 }
1562 
1563 /* DECL was the declaration to which a qualified-id resolved.  Issue
1564    an error message if it is not accessible.  If OBJECT_TYPE is
1565    non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1566    type of `*x', or `x', respectively.  If the DECL was named as
1567    `A::B' then NESTED_NAME_SPECIFIER is `A'.  */
1568 
1569 void
1570 check_accessibility_of_qualified_id (tree decl,
1571 				     tree object_type,
1572 				     tree nested_name_specifier)
1573 {
1574   tree scope;
1575   tree qualifying_type = NULL_TREE;
1576 
1577   /* If we are parsing a template declaration and if decl is a typedef,
1578      add it to a list tied to the template.
1579      At template instantiation time, that list will be walked and
1580      access check performed.  */
1581   add_typedef_to_current_template_for_access_check (decl,
1582 						    nested_name_specifier
1583 						    ? nested_name_specifier
1584 						    : DECL_CONTEXT (decl),
1585 						    input_location);
1586 
1587   /* If we're not checking, return immediately.  */
1588   if (deferred_access_no_check)
1589     return;
1590 
1591   /* Determine the SCOPE of DECL.  */
1592   scope = context_for_name_lookup (decl);
1593   /* If the SCOPE is not a type, then DECL is not a member.  */
1594   if (!TYPE_P (scope))
1595     return;
1596   /* Compute the scope through which DECL is being accessed.  */
1597   if (object_type
1598       /* OBJECT_TYPE might not be a class type; consider:
1599 
1600 	   class A { typedef int I; };
1601 	   I *p;
1602 	   p->A::I::~I();
1603 
1604 	 In this case, we will have "A::I" as the DECL, but "I" as the
1605 	 OBJECT_TYPE.  */
1606       && CLASS_TYPE_P (object_type)
1607       && DERIVED_FROM_P (scope, object_type))
1608     /* If we are processing a `->' or `.' expression, use the type of the
1609        left-hand side.  */
1610     qualifying_type = object_type;
1611   else if (nested_name_specifier)
1612     {
1613       /* If the reference is to a non-static member of the
1614 	 current class, treat it as if it were referenced through
1615 	 `this'.  */
1616       if (DECL_NONSTATIC_MEMBER_P (decl)
1617 	  && current_class_ptr
1618 	  && DERIVED_FROM_P (scope, current_class_type))
1619 	qualifying_type = current_class_type;
1620       /* Otherwise, use the type indicated by the
1621 	 nested-name-specifier.  */
1622       else
1623 	qualifying_type = nested_name_specifier;
1624     }
1625   else
1626     /* Otherwise, the name must be from the current class or one of
1627        its bases.  */
1628     qualifying_type = currently_open_derived_class (scope);
1629 
1630   if (qualifying_type
1631       /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1632 	 or similar in a default argument value.  */
1633       && CLASS_TYPE_P (qualifying_type)
1634       && !dependent_type_p (qualifying_type))
1635     perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1636 				   decl);
1637 }
1638 
1639 /* EXPR is the result of a qualified-id.  The QUALIFYING_CLASS was the
1640    class named to the left of the "::" operator.  DONE is true if this
1641    expression is a complete postfix-expression; it is false if this
1642    expression is followed by '->', '[', '(', etc.  ADDRESS_P is true
1643    iff this expression is the operand of '&'.  TEMPLATE_P is true iff
1644    the qualified-id was of the form "A::template B".  TEMPLATE_ARG_P
1645    is true iff this qualified name appears as a template argument.  */
1646 
1647 tree
1648 finish_qualified_id_expr (tree qualifying_class,
1649 			  tree expr,
1650 			  bool done,
1651 			  bool address_p,
1652 			  bool template_p,
1653 			  bool template_arg_p)
1654 {
1655   gcc_assert (TYPE_P (qualifying_class));
1656 
1657   if (error_operand_p (expr))
1658     return error_mark_node;
1659 
1660   if (DECL_P (expr) || BASELINK_P (expr))
1661     mark_used (expr);
1662 
1663   if (template_p)
1664     check_template_keyword (expr);
1665 
1666   /* If EXPR occurs as the operand of '&', use special handling that
1667      permits a pointer-to-member.  */
1668   if (address_p && done)
1669     {
1670       if (TREE_CODE (expr) == SCOPE_REF)
1671 	expr = TREE_OPERAND (expr, 1);
1672       expr = build_offset_ref (qualifying_class, expr,
1673 			       /*address_p=*/true);
1674       return expr;
1675     }
1676 
1677   /* Within the scope of a class, turn references to non-static
1678      members into expression of the form "this->...".  */
1679   if (template_arg_p)
1680     /* But, within a template argument, we do not want make the
1681        transformation, as there is no "this" pointer.  */
1682     ;
1683   else if (TREE_CODE (expr) == FIELD_DECL)
1684     {
1685       push_deferring_access_checks (dk_no_check);
1686       expr = finish_non_static_data_member (expr, current_class_ref,
1687 					    qualifying_class);
1688       pop_deferring_access_checks ();
1689     }
1690   else if (BASELINK_P (expr) && !processing_template_decl)
1691     {
1692       tree fns;
1693 
1694       /* See if any of the functions are non-static members.  */
1695       fns = BASELINK_FUNCTIONS (expr);
1696       if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
1697 	fns = TREE_OPERAND (fns, 0);
1698       /* If so, the expression may be relative to 'this'.  */
1699       if (!shared_member_p (fns)
1700 	  && current_class_ref
1701 	  && DERIVED_FROM_P (qualifying_class, TREE_TYPE (current_class_ref)))
1702 	expr = (build_class_member_access_expr
1703 		(maybe_dummy_object (qualifying_class, NULL),
1704 		 expr,
1705 		 BASELINK_ACCESS_BINFO (expr),
1706 		 /*preserve_reference=*/false,
1707 		 tf_warning_or_error));
1708       else if (done)
1709 	/* The expression is a qualified name whose address is not
1710 	   being taken.  */
1711 	expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1712     }
1713 
1714   return expr;
1715 }
1716 
1717 /* Begin a statement-expression.  The value returned must be passed to
1718    finish_stmt_expr.  */
1719 
1720 tree
1721 begin_stmt_expr (void)
1722 {
1723   return push_stmt_list ();
1724 }
1725 
1726 /* Process the final expression of a statement expression. EXPR can be
1727    NULL, if the final expression is empty.  Return a STATEMENT_LIST
1728    containing all the statements in the statement-expression, or
1729    ERROR_MARK_NODE if there was an error.  */
1730 
1731 tree
1732 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1733 {
1734   if (error_operand_p (expr))
1735     {
1736       /* The type of the statement-expression is the type of the last
1737          expression.  */
1738       TREE_TYPE (stmt_expr) = error_mark_node;
1739       return error_mark_node;
1740     }
1741 
1742   /* If the last statement does not have "void" type, then the value
1743      of the last statement is the value of the entire expression.  */
1744   if (expr)
1745     {
1746       tree type = TREE_TYPE (expr);
1747 
1748       if (processing_template_decl)
1749 	{
1750 	  expr = build_stmt (input_location, EXPR_STMT, expr);
1751 	  expr = add_stmt (expr);
1752 	  /* Mark the last statement so that we can recognize it as such at
1753 	     template-instantiation time.  */
1754 	  EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1755 	}
1756       else if (VOID_TYPE_P (type))
1757 	{
1758 	  /* Just treat this like an ordinary statement.  */
1759 	  expr = finish_expr_stmt (expr);
1760 	}
1761       else
1762 	{
1763 	  /* It actually has a value we need to deal with.  First, force it
1764 	     to be an rvalue so that we won't need to build up a copy
1765 	     constructor call later when we try to assign it to something.  */
1766 	  expr = force_rvalue (expr);
1767 	  if (error_operand_p (expr))
1768 	    return error_mark_node;
1769 
1770 	  /* Update for array-to-pointer decay.  */
1771 	  type = TREE_TYPE (expr);
1772 
1773 	  /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1774 	     normal statement, but don't convert to void or actually add
1775 	     the EXPR_STMT.  */
1776 	  if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1777 	    expr = maybe_cleanup_point_expr (expr);
1778 	  add_stmt (expr);
1779 	}
1780 
1781       /* The type of the statement-expression is the type of the last
1782 	 expression.  */
1783       TREE_TYPE (stmt_expr) = type;
1784     }
1785 
1786   return stmt_expr;
1787 }
1788 
1789 /* Finish a statement-expression.  EXPR should be the value returned
1790    by the previous begin_stmt_expr.  Returns an expression
1791    representing the statement-expression.  */
1792 
1793 tree
1794 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1795 {
1796   tree type;
1797   tree result;
1798 
1799   if (error_operand_p (stmt_expr))
1800     {
1801       pop_stmt_list (stmt_expr);
1802       return error_mark_node;
1803     }
1804 
1805   gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1806 
1807   type = TREE_TYPE (stmt_expr);
1808   result = pop_stmt_list (stmt_expr);
1809   TREE_TYPE (result) = type;
1810 
1811   if (processing_template_decl)
1812     {
1813       result = build_min (STMT_EXPR, type, result);
1814       TREE_SIDE_EFFECTS (result) = 1;
1815       STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1816     }
1817   else if (CLASS_TYPE_P (type))
1818     {
1819       /* Wrap the statement-expression in a TARGET_EXPR so that the
1820 	 temporary object created by the final expression is destroyed at
1821 	 the end of the full-expression containing the
1822 	 statement-expression.  */
1823       result = force_target_expr (type, result);
1824     }
1825 
1826   return result;
1827 }
1828 
1829 /* Returns the expression which provides the value of STMT_EXPR.  */
1830 
1831 tree
1832 stmt_expr_value_expr (tree stmt_expr)
1833 {
1834   tree t = STMT_EXPR_STMT (stmt_expr);
1835 
1836   if (TREE_CODE (t) == BIND_EXPR)
1837     t = BIND_EXPR_BODY (t);
1838 
1839   if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1840     t = STATEMENT_LIST_TAIL (t)->stmt;
1841 
1842   if (TREE_CODE (t) == EXPR_STMT)
1843     t = EXPR_STMT_EXPR (t);
1844 
1845   return t;
1846 }
1847 
1848 /* Return TRUE iff EXPR_STMT is an empty list of
1849    expression statements.  */
1850 
1851 bool
1852 empty_expr_stmt_p (tree expr_stmt)
1853 {
1854   tree body = NULL_TREE;
1855 
1856   if (expr_stmt == void_zero_node)
1857     return true;
1858 
1859   if (expr_stmt)
1860     {
1861       if (TREE_CODE (expr_stmt) == EXPR_STMT)
1862 	body = EXPR_STMT_EXPR (expr_stmt);
1863       else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1864 	body = expr_stmt;
1865     }
1866 
1867   if (body)
1868     {
1869       if (TREE_CODE (body) == STATEMENT_LIST)
1870 	return tsi_end_p (tsi_start (body));
1871       else
1872 	return empty_expr_stmt_p (body);
1873     }
1874   return false;
1875 }
1876 
1877 /* Perform Koenig lookup.  FN is the postfix-expression representing
1878    the function (or functions) to call; ARGS are the arguments to the
1879    call.  Returns the functions to be considered by overload
1880    resolution.  */
1881 
1882 tree
1883 perform_koenig_lookup (tree fn, VEC(tree,gc) *args)
1884 {
1885   tree identifier = NULL_TREE;
1886   tree functions = NULL_TREE;
1887   tree tmpl_args = NULL_TREE;
1888   bool template_id = false;
1889 
1890   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1891     {
1892       /* Use a separate flag to handle null args.  */
1893       template_id = true;
1894       tmpl_args = TREE_OPERAND (fn, 1);
1895       fn = TREE_OPERAND (fn, 0);
1896     }
1897 
1898   /* Find the name of the overloaded function.  */
1899   if (TREE_CODE (fn) == IDENTIFIER_NODE)
1900     identifier = fn;
1901   else if (is_overloaded_fn (fn))
1902     {
1903       functions = fn;
1904       identifier = DECL_NAME (get_first_fn (functions));
1905     }
1906   else if (DECL_P (fn))
1907     {
1908       functions = fn;
1909       identifier = DECL_NAME (fn);
1910     }
1911 
1912   /* A call to a namespace-scope function using an unqualified name.
1913 
1914      Do Koenig lookup -- unless any of the arguments are
1915      type-dependent.  */
1916   if (!any_type_dependent_arguments_p (args)
1917       && !any_dependent_template_arguments_p (tmpl_args))
1918     {
1919       fn = lookup_arg_dependent (identifier, functions, args);
1920       if (!fn)
1921 	/* The unqualified name could not be resolved.  */
1922 	fn = unqualified_fn_lookup_error (identifier);
1923     }
1924 
1925   if (fn && template_id)
1926     fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
1927 
1928   return fn;
1929 }
1930 
1931 /* Generate an expression for `FN (ARGS)'.  This may change the
1932    contents of ARGS.
1933 
1934    If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1935    as a virtual call, even if FN is virtual.  (This flag is set when
1936    encountering an expression where the function name is explicitly
1937    qualified.  For example a call to `X::f' never generates a virtual
1938    call.)
1939 
1940    Returns code for the call.  */
1941 
1942 tree
1943 finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
1944 		  bool koenig_p, tsubst_flags_t complain)
1945 {
1946   tree result;
1947   tree orig_fn;
1948   VEC(tree,gc) *orig_args = NULL;
1949 
1950   if (fn == error_mark_node)
1951     return error_mark_node;
1952 
1953   gcc_assert (!TYPE_P (fn));
1954 
1955   orig_fn = fn;
1956 
1957   if (processing_template_decl)
1958     {
1959       if (type_dependent_expression_p (fn)
1960 	  || any_type_dependent_arguments_p (*args))
1961 	{
1962 	  result = build_nt_call_vec (fn, *args);
1963 	  KOENIG_LOOKUP_P (result) = koenig_p;
1964 	  if (cfun)
1965 	    {
1966 	      do
1967 		{
1968 		  tree fndecl = OVL_CURRENT (fn);
1969 		  if (TREE_CODE (fndecl) != FUNCTION_DECL
1970 		      || !TREE_THIS_VOLATILE (fndecl))
1971 		    break;
1972 		  fn = OVL_NEXT (fn);
1973 		}
1974 	      while (fn);
1975 	      if (!fn)
1976 		current_function_returns_abnormally = 1;
1977 	    }
1978 	  return result;
1979 	}
1980       orig_args = make_tree_vector_copy (*args);
1981       if (!BASELINK_P (fn)
1982 	  && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1983 	  && TREE_TYPE (fn) != unknown_type_node)
1984 	fn = build_non_dependent_expr (fn);
1985       make_args_non_dependent (*args);
1986     }
1987 
1988   if (is_overloaded_fn (fn))
1989     fn = baselink_for_fns (fn);
1990 
1991   result = NULL_TREE;
1992   if (BASELINK_P (fn))
1993     {
1994       tree object;
1995 
1996       /* A call to a member function.  From [over.call.func]:
1997 
1998 	   If the keyword this is in scope and refers to the class of
1999 	   that member function, or a derived class thereof, then the
2000 	   function call is transformed into a qualified function call
2001 	   using (*this) as the postfix-expression to the left of the
2002 	   . operator.... [Otherwise] a contrived object of type T
2003 	   becomes the implied object argument.
2004 
2005 	This paragraph is unclear about this situation:
2006 
2007 	  struct A { void f(); };
2008 	  struct B : public A {};
2009 	  struct C : public A { void g() { B::f(); }};
2010 
2011 	In particular, for `B::f', this paragraph does not make clear
2012 	whether "the class of that member function" refers to `A' or
2013 	to `B'.  We believe it refers to `B'.  */
2014       if (current_class_type
2015 	  && DERIVED_FROM_P (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2016 			     current_class_type)
2017 	  && current_class_ref)
2018 	object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2019 				     NULL);
2020       else
2021 	{
2022 	  tree representative_fn;
2023 
2024 	  representative_fn = BASELINK_FUNCTIONS (fn);
2025 	  if (TREE_CODE (representative_fn) == TEMPLATE_ID_EXPR)
2026 	    representative_fn = TREE_OPERAND (representative_fn, 0);
2027 	  representative_fn = get_first_fn (representative_fn);
2028 	  object = build_dummy_object (DECL_CONTEXT (representative_fn));
2029 	}
2030 
2031       if (processing_template_decl)
2032 	{
2033 	  if (type_dependent_expression_p (object))
2034 	    {
2035 	      tree ret = build_nt_call_vec (orig_fn, orig_args);
2036 	      release_tree_vector (orig_args);
2037 	      return ret;
2038 	    }
2039 	  object = build_non_dependent_expr (object);
2040 	}
2041 
2042       result = build_new_method_call (object, fn, args, NULL_TREE,
2043 				      (disallow_virtual
2044 				       ? LOOKUP_NONVIRTUAL : 0),
2045 				      /*fn_p=*/NULL,
2046 				      complain);
2047     }
2048   else if (is_overloaded_fn (fn))
2049     {
2050       /* If the function is an overloaded builtin, resolve it.  */
2051       if (TREE_CODE (fn) == FUNCTION_DECL
2052 	  && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2053 	      || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2054 	result = resolve_overloaded_builtin (input_location, fn, *args);
2055 
2056       if (!result)
2057 	/* A call to a namespace-scope function.  */
2058 	result = build_new_function_call (fn, args, koenig_p, complain);
2059     }
2060   else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2061     {
2062       if (!VEC_empty (tree, *args))
2063 	error ("arguments to destructor are not allowed");
2064       /* Mark the pseudo-destructor call as having side-effects so
2065 	 that we do not issue warnings about its use.  */
2066       result = build1 (NOP_EXPR,
2067 		       void_type_node,
2068 		       TREE_OPERAND (fn, 0));
2069       TREE_SIDE_EFFECTS (result) = 1;
2070     }
2071   else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2072     /* If the "function" is really an object of class type, it might
2073        have an overloaded `operator ()'.  */
2074     result = build_op_call (fn, args, complain);
2075 
2076   if (!result)
2077     /* A call where the function is unknown.  */
2078     result = cp_build_function_call_vec (fn, args, complain);
2079 
2080   if (processing_template_decl)
2081     {
2082       result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2083       KOENIG_LOOKUP_P (result) = koenig_p;
2084       release_tree_vector (orig_args);
2085     }
2086 
2087   return result;
2088 }
2089 
2090 /* Finish a call to a postfix increment or decrement or EXPR.  (Which
2091    is indicated by CODE, which should be POSTINCREMENT_EXPR or
2092    POSTDECREMENT_EXPR.)  */
2093 
2094 tree
2095 finish_increment_expr (tree expr, enum tree_code code)
2096 {
2097   return build_x_unary_op (code, expr, tf_warning_or_error);
2098 }
2099 
2100 /* Finish a use of `this'.  Returns an expression for `this'.  */
2101 
2102 tree
2103 finish_this_expr (void)
2104 {
2105   tree result;
2106 
2107   if (current_class_ptr)
2108     {
2109       tree type = TREE_TYPE (current_class_ref);
2110 
2111       /* In a lambda expression, 'this' refers to the captured 'this'.  */
2112       if (LAMBDA_TYPE_P (type))
2113         result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2114       else
2115         result = current_class_ptr;
2116 
2117     }
2118   else if (current_function_decl
2119 	   && DECL_STATIC_FUNCTION_P (current_function_decl))
2120     {
2121       error ("%<this%> is unavailable for static member functions");
2122       result = error_mark_node;
2123     }
2124   else
2125     {
2126       if (current_function_decl)
2127 	error ("invalid use of %<this%> in non-member function");
2128       else
2129 	error ("invalid use of %<this%> at top level");
2130       result = error_mark_node;
2131     }
2132 
2133   return result;
2134 }
2135 
2136 /* Finish a pseudo-destructor expression.  If SCOPE is NULL, the
2137    expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2138    the TYPE for the type given.  If SCOPE is non-NULL, the expression
2139    was of the form `OBJECT.SCOPE::~DESTRUCTOR'.  */
2140 
2141 tree
2142 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2143 {
2144   if (object == error_mark_node || destructor == error_mark_node)
2145     return error_mark_node;
2146 
2147   gcc_assert (TYPE_P (destructor));
2148 
2149   if (!processing_template_decl)
2150     {
2151       if (scope == error_mark_node)
2152 	{
2153 	  error ("invalid qualifying scope in pseudo-destructor name");
2154 	  return error_mark_node;
2155 	}
2156       if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2157 	{
2158 	  error ("qualified type %qT does not match destructor name ~%qT",
2159 		 scope, destructor);
2160 	  return error_mark_node;
2161 	}
2162 
2163 
2164       /* [expr.pseudo] says both:
2165 
2166 	   The type designated by the pseudo-destructor-name shall be
2167 	   the same as the object type.
2168 
2169 	 and:
2170 
2171 	   The cv-unqualified versions of the object type and of the
2172 	   type designated by the pseudo-destructor-name shall be the
2173 	   same type.
2174 
2175 	 We implement the more generous second sentence, since that is
2176 	 what most other compilers do.  */
2177       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2178 						      destructor))
2179 	{
2180 	  error ("%qE is not of type %qT", object, destructor);
2181 	  return error_mark_node;
2182 	}
2183     }
2184 
2185   return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2186 }
2187 
2188 /* Finish an expression of the form CODE EXPR.  */
2189 
2190 tree
2191 finish_unary_op_expr (enum tree_code code, tree expr)
2192 {
2193   tree result = build_x_unary_op (code, expr, tf_warning_or_error);
2194   /* Inside a template, build_x_unary_op does not fold the
2195      expression. So check whether the result is folded before
2196      setting TREE_NEGATED_INT.  */
2197   if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
2198       && TREE_CODE (result) == INTEGER_CST
2199       && !TYPE_UNSIGNED (TREE_TYPE (result))
2200       && INT_CST_LT (result, integer_zero_node))
2201     {
2202       /* RESULT may be a cached INTEGER_CST, so we must copy it before
2203 	 setting TREE_NEGATED_INT.  */
2204       result = copy_node (result);
2205       TREE_NEGATED_INT (result) = 1;
2206     }
2207   if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2208     overflow_warning (input_location, result);
2209 
2210   return result;
2211 }
2212 
2213 /* Finish a compound-literal expression.  TYPE is the type to which
2214    the CONSTRUCTOR in COMPOUND_LITERAL is being cast.  */
2215 
2216 tree
2217 finish_compound_literal (tree type, tree compound_literal)
2218 {
2219   if (type == error_mark_node)
2220     return error_mark_node;
2221 
2222   if (!TYPE_OBJ_P (type))
2223     {
2224       error ("compound literal of non-object type %qT", type);
2225       return error_mark_node;
2226     }
2227 
2228   if (processing_template_decl)
2229     {
2230       TREE_TYPE (compound_literal) = type;
2231       /* Mark the expression as a compound literal.  */
2232       TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2233       return compound_literal;
2234     }
2235 
2236   type = complete_type (type);
2237 
2238   if (TYPE_NON_AGGREGATE_CLASS (type))
2239     {
2240       /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2241 	 everywhere that deals with function arguments would be a pain, so
2242 	 just wrap it in a TREE_LIST.  The parser set a flag so we know
2243 	 that it came from T{} rather than T({}).  */
2244       CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2245       compound_literal = build_tree_list (NULL_TREE, compound_literal);
2246       return build_functional_cast (type, compound_literal, tf_error);
2247     }
2248 
2249   if (TREE_CODE (type) == ARRAY_TYPE
2250       && check_array_initializer (NULL_TREE, type, compound_literal))
2251     return error_mark_node;
2252   compound_literal = reshape_init (type, compound_literal);
2253   if (TREE_CODE (type) == ARRAY_TYPE)
2254     cp_complete_array_type (&type, compound_literal, false);
2255   compound_literal = digest_init (type, compound_literal);
2256   if ((!at_function_scope_p () || cp_type_readonly (type))
2257       && initializer_constant_valid_p (compound_literal, type))
2258     {
2259       tree decl = create_temporary_var (type);
2260       DECL_INITIAL (decl) = compound_literal;
2261       TREE_STATIC (decl) = 1;
2262       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
2263       decl = pushdecl_top_level (decl);
2264       DECL_NAME (decl) = make_anon_name ();
2265       SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2266       return decl;
2267     }
2268   else
2269     return get_target_expr (compound_literal);
2270 }
2271 
2272 /* Return the declaration for the function-name variable indicated by
2273    ID.  */
2274 
2275 tree
2276 finish_fname (tree id)
2277 {
2278   tree decl;
2279 
2280   decl = fname_decl (input_location, C_RID_CODE (id), id);
2281   if (processing_template_decl)
2282     decl = DECL_NAME (decl);
2283   return decl;
2284 }
2285 
2286 /* Finish a translation unit.  */
2287 
2288 void
2289 finish_translation_unit (void)
2290 {
2291   /* In case there were missing closebraces,
2292      get us back to the global binding level.  */
2293   pop_everything ();
2294   while (current_namespace != global_namespace)
2295     pop_namespace ();
2296 
2297   /* Do file scope __FUNCTION__ et al.  */
2298   finish_fname_decls ();
2299 }
2300 
2301 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2302    Returns the parameter.  */
2303 
2304 tree
2305 finish_template_type_parm (tree aggr, tree identifier)
2306 {
2307   if (aggr != class_type_node)
2308     {
2309       permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2310       aggr = class_type_node;
2311     }
2312 
2313   return build_tree_list (aggr, identifier);
2314 }
2315 
2316 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2317    Returns the parameter.  */
2318 
2319 tree
2320 finish_template_template_parm (tree aggr, tree identifier)
2321 {
2322   tree decl = build_decl (input_location,
2323 			  TYPE_DECL, identifier, NULL_TREE);
2324   tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2325   DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2326   DECL_TEMPLATE_RESULT (tmpl) = decl;
2327   DECL_ARTIFICIAL (decl) = 1;
2328   end_template_decl ();
2329 
2330   gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2331 
2332   check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2333 			   /*is_primary=*/true, /*is_partial=*/false,
2334 			   /*is_friend=*/0);
2335 
2336   return finish_template_type_parm (aggr, tmpl);
2337 }
2338 
2339 /* ARGUMENT is the default-argument value for a template template
2340    parameter.  If ARGUMENT is invalid, issue error messages and return
2341    the ERROR_MARK_NODE.  Otherwise, ARGUMENT itself is returned.  */
2342 
2343 tree
2344 check_template_template_default_arg (tree argument)
2345 {
2346   if (TREE_CODE (argument) != TEMPLATE_DECL
2347       && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2348       && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2349     {
2350       if (TREE_CODE (argument) == TYPE_DECL)
2351 	error ("invalid use of type %qT as a default value for a template "
2352 	       "template-parameter", TREE_TYPE (argument));
2353       else
2354 	error ("invalid default argument for a template template parameter");
2355       return error_mark_node;
2356     }
2357 
2358   return argument;
2359 }
2360 
2361 /* Begin a class definition, as indicated by T.  */
2362 
2363 tree
2364 begin_class_definition (tree t, tree attributes)
2365 {
2366   if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2367     return error_mark_node;
2368 
2369   if (processing_template_parmlist)
2370     {
2371       error ("definition of %q#T inside template parameter list", t);
2372       return error_mark_node;
2373     }
2374 
2375   /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2376      are passed the same as decimal scalar types.  */
2377   if (TREE_CODE (t) == RECORD_TYPE
2378       && !processing_template_decl)
2379     {
2380       tree ns = TYPE_CONTEXT (t);
2381       if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2382 	  && DECL_CONTEXT (ns) == std_node
2383 	  && DECL_NAME (ns)
2384 	  && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2385 	{
2386 	  const char *n = TYPE_NAME_STRING (t);
2387 	  if ((strcmp (n, "decimal32") == 0)
2388 	      || (strcmp (n, "decimal64") == 0)
2389 	      || (strcmp (n, "decimal128") == 0))
2390 	    TYPE_TRANSPARENT_AGGR (t) = 1;
2391 	}
2392     }
2393 
2394   /* A non-implicit typename comes from code like:
2395 
2396        template <typename T> struct A {
2397 	 template <typename U> struct A<T>::B ...
2398 
2399      This is erroneous.  */
2400   else if (TREE_CODE (t) == TYPENAME_TYPE)
2401     {
2402       error ("invalid definition of qualified type %qT", t);
2403       t = error_mark_node;
2404     }
2405 
2406   if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2407     {
2408       t = make_class_type (RECORD_TYPE);
2409       pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2410     }
2411 
2412   /* Update the location of the decl.  */
2413   DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
2414 
2415   if (TYPE_BEING_DEFINED (t))
2416     {
2417       t = make_class_type (TREE_CODE (t));
2418       pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2419     }
2420   maybe_process_partial_specialization (t);
2421   pushclass (t);
2422   TYPE_BEING_DEFINED (t) = 1;
2423 
2424   cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2425 
2426   if (flag_pack_struct)
2427     {
2428       tree v;
2429       TYPE_PACKED (t) = 1;
2430       /* Even though the type is being defined for the first time
2431 	 here, there might have been a forward declaration, so there
2432 	 might be cv-qualified variants of T.  */
2433       for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2434 	TYPE_PACKED (v) = 1;
2435     }
2436   /* Reset the interface data, at the earliest possible
2437      moment, as it might have been set via a class foo;
2438      before.  */
2439   if (! TYPE_ANONYMOUS_P (t))
2440     {
2441       struct c_fileinfo *finfo = get_fileinfo (input_filename);
2442       CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2443       SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2444 	(t, finfo->interface_unknown);
2445     }
2446   reset_specialization();
2447 
2448   /* Make a declaration for this class in its own scope.  */
2449   build_self_reference ();
2450 
2451   return t;
2452 }
2453 
2454 /* Finish the member declaration given by DECL.  */
2455 
2456 void
2457 finish_member_declaration (tree decl)
2458 {
2459   if (decl == error_mark_node || decl == NULL_TREE)
2460     return;
2461 
2462   if (decl == void_type_node)
2463     /* The COMPONENT was a friend, not a member, and so there's
2464        nothing for us to do.  */
2465     return;
2466 
2467   /* We should see only one DECL at a time.  */
2468   gcc_assert (TREE_CHAIN (decl) == NULL_TREE);
2469 
2470   /* Set up access control for DECL.  */
2471   TREE_PRIVATE (decl)
2472     = (current_access_specifier == access_private_node);
2473   TREE_PROTECTED (decl)
2474     = (current_access_specifier == access_protected_node);
2475   if (TREE_CODE (decl) == TEMPLATE_DECL)
2476     {
2477       TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2478       TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2479     }
2480 
2481   /* Mark the DECL as a member of the current class.  */
2482   DECL_CONTEXT (decl) = current_class_type;
2483 
2484   /* Check for bare parameter packs in the member variable declaration.  */
2485   if (TREE_CODE (decl) == FIELD_DECL)
2486     {
2487       if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2488         TREE_TYPE (decl) = error_mark_node;
2489       if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2490         DECL_ATTRIBUTES (decl) = NULL_TREE;
2491     }
2492 
2493   /* [dcl.link]
2494 
2495      A C language linkage is ignored for the names of class members
2496      and the member function type of class member functions.  */
2497   if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2498     SET_DECL_LANGUAGE (decl, lang_cplusplus);
2499 
2500   /* Put functions on the TYPE_METHODS list and everything else on the
2501      TYPE_FIELDS list.  Note that these are built up in reverse order.
2502      We reverse them (to obtain declaration order) in finish_struct.  */
2503   if (TREE_CODE (decl) == FUNCTION_DECL
2504       || DECL_FUNCTION_TEMPLATE_P (decl))
2505     {
2506       /* We also need to add this function to the
2507 	 CLASSTYPE_METHOD_VEC.  */
2508       if (add_method (current_class_type, decl, NULL_TREE))
2509 	{
2510 	  TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2511 	  TYPE_METHODS (current_class_type) = decl;
2512 
2513 	  maybe_add_class_template_decl_list (current_class_type, decl,
2514 					      /*friend_p=*/0);
2515 	}
2516     }
2517   /* Enter the DECL into the scope of the class.  */
2518   else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2519 	   || pushdecl_class_level (decl))
2520     {
2521       /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2522 	 go at the beginning.  The reason is that lookup_field_1
2523 	 searches the list in order, and we want a field name to
2524 	 override a type name so that the "struct stat hack" will
2525 	 work.  In particular:
2526 
2527 	   struct S { enum E { }; int E } s;
2528 	   s.E = 3;
2529 
2530 	 is valid.  In addition, the FIELD_DECLs must be maintained in
2531 	 declaration order so that class layout works as expected.
2532 	 However, we don't need that order until class layout, so we
2533 	 save a little time by putting FIELD_DECLs on in reverse order
2534 	 here, and then reversing them in finish_struct_1.  (We could
2535 	 also keep a pointer to the correct insertion points in the
2536 	 list.)  */
2537 
2538       if (TREE_CODE (decl) == TYPE_DECL)
2539 	TYPE_FIELDS (current_class_type)
2540 	  = chainon (TYPE_FIELDS (current_class_type), decl);
2541       else
2542 	{
2543 	  TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2544 	  TYPE_FIELDS (current_class_type) = decl;
2545 	}
2546 
2547       maybe_add_class_template_decl_list (current_class_type, decl,
2548 					  /*friend_p=*/0);
2549     }
2550 
2551   if (pch_file)
2552     note_decl_for_pch (decl);
2553 }
2554 
2555 /* DECL has been declared while we are building a PCH file.  Perform
2556    actions that we might normally undertake lazily, but which can be
2557    performed now so that they do not have to be performed in
2558    translation units which include the PCH file.  */
2559 
2560 void
2561 note_decl_for_pch (tree decl)
2562 {
2563   gcc_assert (pch_file);
2564 
2565   /* There's a good chance that we'll have to mangle names at some
2566      point, even if only for emission in debugging information.  */
2567   if ((TREE_CODE (decl) == VAR_DECL
2568        || TREE_CODE (decl) == FUNCTION_DECL)
2569       && !processing_template_decl)
2570     mangle_decl (decl);
2571 }
2572 
2573 /* Finish processing a complete template declaration.  The PARMS are
2574    the template parameters.  */
2575 
2576 void
2577 finish_template_decl (tree parms)
2578 {
2579   if (parms)
2580     end_template_decl ();
2581   else
2582     end_specialization ();
2583 }
2584 
2585 /* Finish processing a template-id (which names a type) of the form
2586    NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2587    template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2588    the scope of template-id indicated.  */
2589 
2590 tree
2591 finish_template_type (tree name, tree args, int entering_scope)
2592 {
2593   tree decl;
2594 
2595   decl = lookup_template_class (name, args,
2596 				NULL_TREE, NULL_TREE, entering_scope,
2597 				tf_warning_or_error | tf_user);
2598   if (decl != error_mark_node)
2599     decl = TYPE_STUB_DECL (decl);
2600 
2601   return decl;
2602 }
2603 
2604 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2605    Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2606    BASE_CLASS, or NULL_TREE if an error occurred.  The
2607    ACCESS_SPECIFIER is one of
2608    access_{default,public,protected_private}_node.  For a virtual base
2609    we set TREE_TYPE.  */
2610 
2611 tree
2612 finish_base_specifier (tree base, tree access, bool virtual_p)
2613 {
2614   tree result;
2615 
2616   if (base == error_mark_node)
2617     {
2618       error ("invalid base-class specification");
2619       result = NULL_TREE;
2620     }
2621   else if (! MAYBE_CLASS_TYPE_P (base))
2622     {
2623       error ("%qT is not a class type", base);
2624       result = NULL_TREE;
2625     }
2626   else
2627     {
2628       if (cp_type_quals (base) != 0)
2629 	{
2630 	  error ("base class %qT has cv qualifiers", base);
2631 	  base = TYPE_MAIN_VARIANT (base);
2632 	}
2633       result = build_tree_list (access, base);
2634       if (virtual_p)
2635 	TREE_TYPE (result) = integer_type_node;
2636     }
2637 
2638   return result;
2639 }
2640 
2641 /* Issue a diagnostic that NAME cannot be found in SCOPE.  DECL is
2642    what we found when we tried to do the lookup.
2643    LOCATION is the location of the NAME identifier;
2644    The location is used in the error message*/
2645 
2646 void
2647 qualified_name_lookup_error (tree scope, tree name,
2648 			     tree decl, location_t location)
2649 {
2650   if (scope == error_mark_node)
2651     ; /* We already complained.  */
2652   else if (TYPE_P (scope))
2653     {
2654       if (!COMPLETE_TYPE_P (scope))
2655 	error_at (location, "incomplete type %qT used in nested name specifier",
2656 		  scope);
2657       else if (TREE_CODE (decl) == TREE_LIST)
2658 	{
2659 	  error_at (location, "reference to %<%T::%D%> is ambiguous",
2660 		    scope, name);
2661 	  print_candidates (decl);
2662 	}
2663       else
2664 	error_at (location, "%qD is not a member of %qT", name, scope);
2665     }
2666   else if (scope != global_namespace)
2667     error_at (location, "%qD is not a member of %qD", name, scope);
2668   else
2669     error_at (location, "%<::%D%> has not been declared", name);
2670 }
2671 
2672 /* If FNS is a member function, a set of member functions, or a
2673    template-id referring to one or more member functions, return a
2674    BASELINK for FNS, incorporating the current access context.
2675    Otherwise, return FNS unchanged.  */
2676 
2677 tree
2678 baselink_for_fns (tree fns)
2679 {
2680   tree fn;
2681   tree cl;
2682 
2683   if (BASELINK_P (fns)
2684       || error_operand_p (fns))
2685     return fns;
2686 
2687   fn = fns;
2688   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2689     fn = TREE_OPERAND (fn, 0);
2690   fn = get_first_fn (fn);
2691   if (!DECL_FUNCTION_MEMBER_P (fn))
2692     return fns;
2693 
2694   cl = currently_open_derived_class (DECL_CONTEXT (fn));
2695   if (!cl)
2696     cl = DECL_CONTEXT (fn);
2697   cl = TYPE_BINFO (cl);
2698   return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2699 }
2700 
2701 /* Returns true iff DECL is an automatic variable from a function outside
2702    the current one.  */
2703 
2704 static bool
2705 outer_automatic_var_p (tree decl)
2706 {
2707   return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2708 	  && DECL_FUNCTION_SCOPE_P (decl)
2709 	  && !TREE_STATIC (decl)
2710 	  && DECL_CONTEXT (decl) != current_function_decl);
2711 }
2712 
2713 /* Returns true iff DECL is a capture field from a lambda that is not our
2714    immediate context.  */
2715 
2716 static bool
2717 outer_lambda_capture_p (tree decl)
2718 {
2719   return (TREE_CODE (decl) == FIELD_DECL
2720 	  && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2721 	  && (!current_class_type
2722 	      || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2723 }
2724 
2725 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2726    id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2727    if non-NULL, is the type or namespace used to explicitly qualify
2728    ID_EXPRESSION.  DECL is the entity to which that name has been
2729    resolved.
2730 
2731    *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2732    constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2733    be set to true if this expression isn't permitted in a
2734    constant-expression, but it is otherwise not set by this function.
2735    *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2736    constant-expression, but a non-constant expression is also
2737    permissible.
2738 
2739    DONE is true if this expression is a complete postfix-expression;
2740    it is false if this expression is followed by '->', '[', '(', etc.
2741    ADDRESS_P is true iff this expression is the operand of '&'.
2742    TEMPLATE_P is true iff the qualified-id was of the form
2743    "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2744    appears as a template argument.
2745 
2746    If an error occurs, and it is the kind of error that might cause
2747    the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2748    is the caller's responsibility to issue the message.  *ERROR_MSG
2749    will be a string with static storage duration, so the caller need
2750    not "free" it.
2751 
2752    Return an expression for the entity, after issuing appropriate
2753    diagnostics.  This function is also responsible for transforming a
2754    reference to a non-static member into a COMPONENT_REF that makes
2755    the use of "this" explicit.
2756 
2757    Upon return, *IDK will be filled in appropriately.  */
2758 tree
2759 finish_id_expression (tree id_expression,
2760 		      tree decl,
2761 		      tree scope,
2762 		      cp_id_kind *idk,
2763 		      bool integral_constant_expression_p,
2764 		      bool allow_non_integral_constant_expression_p,
2765 		      bool *non_integral_constant_expression_p,
2766 		      bool template_p,
2767 		      bool done,
2768 		      bool address_p,
2769 		      bool template_arg_p,
2770 		      const char **error_msg,
2771 		      location_t location)
2772 {
2773   /* Initialize the output parameters.  */
2774   *idk = CP_ID_KIND_NONE;
2775   *error_msg = NULL;
2776 
2777   if (id_expression == error_mark_node)
2778     return error_mark_node;
2779   /* If we have a template-id, then no further lookup is
2780      required.  If the template-id was for a template-class, we
2781      will sometimes have a TYPE_DECL at this point.  */
2782   else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2783 	   || TREE_CODE (decl) == TYPE_DECL)
2784     ;
2785   /* Look up the name.  */
2786   else
2787     {
2788       if (decl == error_mark_node)
2789 	{
2790 	  /* Name lookup failed.  */
2791 	  if (scope
2792 	      && (!TYPE_P (scope)
2793 		  || (!dependent_type_p (scope)
2794 		      && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2795 			   && IDENTIFIER_TYPENAME_P (id_expression)
2796 			   && dependent_type_p (TREE_TYPE (id_expression))))))
2797 	    {
2798 	      /* If the qualifying type is non-dependent (and the name
2799 		 does not name a conversion operator to a dependent
2800 		 type), issue an error.  */
2801 	      qualified_name_lookup_error (scope, id_expression, decl, location);
2802 	      return error_mark_node;
2803 	    }
2804 	  else if (!scope)
2805 	    {
2806 	      /* It may be resolved via Koenig lookup.  */
2807 	      *idk = CP_ID_KIND_UNQUALIFIED;
2808 	      return id_expression;
2809 	    }
2810 	  else
2811 	    decl = id_expression;
2812 	}
2813       /* If DECL is a variable that would be out of scope under
2814 	 ANSI/ISO rules, but in scope in the ARM, name lookup
2815 	 will succeed.  Issue a diagnostic here.  */
2816       else
2817 	decl = check_for_out_of_scope_variable (decl);
2818 
2819       /* Remember that the name was used in the definition of
2820 	 the current class so that we can check later to see if
2821 	 the meaning would have been different after the class
2822 	 was entirely defined.  */
2823       if (!scope && decl != error_mark_node)
2824 	maybe_note_name_used_in_class (id_expression, decl);
2825 
2826       /* Disallow uses of local variables from containing functions, except
2827 	 within lambda-expressions.  */
2828       if ((outer_automatic_var_p (decl)
2829 	   || outer_lambda_capture_p (decl))
2830 	  /* It's not a use (3.2) if we're in an unevaluated context.  */
2831 	  && !cp_unevaluated_operand)
2832 	{
2833 	  tree context = DECL_CONTEXT (decl);
2834 	  tree containing_function = current_function_decl;
2835 	  tree lambda_stack = NULL_TREE;
2836 	  tree lambda_expr = NULL_TREE;
2837 	  tree initializer = decl;
2838 
2839 	  /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2840 	     support for an approach in which a reference to a local
2841 	     [constant] automatic variable in a nested class or lambda body
2842 	     would enter the expression as an rvalue, which would reduce
2843 	     the complexity of the problem"
2844 
2845 	     FIXME update for final resolution of core issue 696.  */
2846 	  if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
2847 	    return integral_constant_value (decl);
2848 
2849 	  if (TYPE_P (context))
2850 	    {
2851 	      /* Implicit capture of an explicit capture.  */
2852 	      context = lambda_function (context);
2853 	      initializer = thisify_lambda_field (decl);
2854 	    }
2855 
2856 	  /* If we are in a lambda function, we can move out until we hit
2857 	     1. the context,
2858 	     2. a non-lambda function, or
2859 	     3. a non-default capturing lambda function.  */
2860 	  while (context != containing_function
2861 		 && LAMBDA_FUNCTION_P (containing_function))
2862 	    {
2863 	      lambda_expr = CLASSTYPE_LAMBDA_EXPR
2864 		(DECL_CONTEXT (containing_function));
2865 
2866 	      if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2867 		  == CPLD_NONE)
2868 		break;
2869 
2870 	      lambda_stack = tree_cons (NULL_TREE,
2871 					lambda_expr,
2872 					lambda_stack);
2873 
2874 	      containing_function
2875 		= decl_function_context (containing_function);
2876 	    }
2877 
2878 	  if (context == containing_function)
2879 	    {
2880 	      decl = add_default_capture (lambda_stack,
2881 					  /*id=*/DECL_NAME (decl),
2882 					  initializer);
2883 	    }
2884 	  else if (lambda_expr)
2885 	    {
2886 	      error ("%qD is not captured", decl);
2887 	      return error_mark_node;
2888 	    }
2889 	  else
2890 	    {
2891 	      error (TREE_CODE (decl) == VAR_DECL
2892 		     ? "use of %<auto%> variable from containing function"
2893 		     : "use of parameter from containing function");
2894 	      error ("  %q+#D declared here", decl);
2895 	      return error_mark_node;
2896 	    }
2897 	}
2898     }
2899 
2900   /* If we didn't find anything, or what we found was a type,
2901      then this wasn't really an id-expression.  */
2902   if (TREE_CODE (decl) == TEMPLATE_DECL
2903       && !DECL_FUNCTION_TEMPLATE_P (decl))
2904     {
2905       *error_msg = "missing template arguments";
2906       return error_mark_node;
2907     }
2908   else if (TREE_CODE (decl) == TYPE_DECL
2909 	   || TREE_CODE (decl) == NAMESPACE_DECL)
2910     {
2911       *error_msg = "expected primary-expression";
2912       return error_mark_node;
2913     }
2914 
2915   /* If the name resolved to a template parameter, there is no
2916      need to look it up again later.  */
2917   if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2918       || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2919     {
2920       tree r;
2921 
2922       *idk = CP_ID_KIND_NONE;
2923       if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2924 	decl = TEMPLATE_PARM_DECL (decl);
2925       r = convert_from_reference (DECL_INITIAL (decl));
2926 
2927       if (integral_constant_expression_p
2928 	  && !dependent_type_p (TREE_TYPE (decl))
2929 	  && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2930 	{
2931 	  if (!allow_non_integral_constant_expression_p)
2932 	    error ("template parameter %qD of type %qT is not allowed in "
2933 		   "an integral constant expression because it is not of "
2934 		   "integral or enumeration type", decl, TREE_TYPE (decl));
2935 	  *non_integral_constant_expression_p = true;
2936 	}
2937       return r;
2938     }
2939   /* Similarly, we resolve enumeration constants to their
2940      underlying values.  */
2941   else if (TREE_CODE (decl) == CONST_DECL)
2942     {
2943       *idk = CP_ID_KIND_NONE;
2944       if (!processing_template_decl)
2945 	{
2946 	  used_types_insert (TREE_TYPE (decl));
2947 	  return DECL_INITIAL (decl);
2948 	}
2949       return decl;
2950     }
2951   else
2952     {
2953       bool dependent_p;
2954 
2955       /* If the declaration was explicitly qualified indicate
2956 	 that.  The semantics of `A::f(3)' are different than
2957 	 `f(3)' if `f' is virtual.  */
2958       *idk = (scope
2959 	      ? CP_ID_KIND_QUALIFIED
2960 	      : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2961 		 ? CP_ID_KIND_TEMPLATE_ID
2962 		 : CP_ID_KIND_UNQUALIFIED));
2963 
2964 
2965       /* [temp.dep.expr]
2966 
2967 	 An id-expression is type-dependent if it contains an
2968 	 identifier that was declared with a dependent type.
2969 
2970 	 The standard is not very specific about an id-expression that
2971 	 names a set of overloaded functions.  What if some of them
2972 	 have dependent types and some of them do not?  Presumably,
2973 	 such a name should be treated as a dependent name.  */
2974       /* Assume the name is not dependent.  */
2975       dependent_p = false;
2976       if (!processing_template_decl)
2977 	/* No names are dependent outside a template.  */
2978 	;
2979       /* A template-id where the name of the template was not resolved
2980 	 is definitely dependent.  */
2981       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2982 	       && (TREE_CODE (TREE_OPERAND (decl, 0))
2983 		   == IDENTIFIER_NODE))
2984 	dependent_p = true;
2985       /* For anything except an overloaded function, just check its
2986 	 type.  */
2987       else if (!is_overloaded_fn (decl))
2988 	dependent_p
2989 	  = dependent_type_p (TREE_TYPE (decl));
2990       /* For a set of overloaded functions, check each of the
2991 	 functions.  */
2992       else
2993 	{
2994 	  tree fns = decl;
2995 
2996 	  if (BASELINK_P (fns))
2997 	    fns = BASELINK_FUNCTIONS (fns);
2998 
2999 	  /* For a template-id, check to see if the template
3000 	     arguments are dependent.  */
3001 	  if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3002 	    {
3003 	      tree args = TREE_OPERAND (fns, 1);
3004 	      dependent_p = any_dependent_template_arguments_p (args);
3005 	      /* The functions are those referred to by the
3006 		 template-id.  */
3007 	      fns = TREE_OPERAND (fns, 0);
3008 	    }
3009 
3010 	  /* If there are no dependent template arguments, go through
3011 	     the overloaded functions.  */
3012 	  while (fns && !dependent_p)
3013 	    {
3014 	      tree fn = OVL_CURRENT (fns);
3015 
3016 	      /* Member functions of dependent classes are
3017 		 dependent.  */
3018 	      if (TREE_CODE (fn) == FUNCTION_DECL
3019 		  && type_dependent_expression_p (fn))
3020 		dependent_p = true;
3021 	      else if (TREE_CODE (fn) == TEMPLATE_DECL
3022 		       && dependent_template_p (fn))
3023 		dependent_p = true;
3024 
3025 	      fns = OVL_NEXT (fns);
3026 	    }
3027 	}
3028 
3029       /* If the name was dependent on a template parameter, we will
3030 	 resolve the name at instantiation time.  */
3031       if (dependent_p)
3032 	{
3033 	  /* Create a SCOPE_REF for qualified names, if the scope is
3034 	     dependent.  */
3035 	  if (scope)
3036 	    {
3037 	      if (TYPE_P (scope))
3038 		{
3039 		  if (address_p && done)
3040 		    decl = finish_qualified_id_expr (scope, decl,
3041 						     done, address_p,
3042 						     template_p,
3043 						     template_arg_p);
3044 		  else
3045 		    {
3046 		      tree type = NULL_TREE;
3047 		      if (DECL_P (decl) && !dependent_scope_p (scope))
3048 			type = TREE_TYPE (decl);
3049 		      decl = build_qualified_name (type,
3050 						   scope,
3051 						   id_expression,
3052 						   template_p);
3053 		    }
3054 		}
3055 	      if (TREE_TYPE (decl))
3056 		decl = convert_from_reference (decl);
3057 	      return decl;
3058 	    }
3059 	  /* A TEMPLATE_ID already contains all the information we
3060 	     need.  */
3061 	  if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3062 	    return id_expression;
3063 	  *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3064 	  /* If we found a variable, then name lookup during the
3065 	     instantiation will always resolve to the same VAR_DECL
3066 	     (or an instantiation thereof).  */
3067 	  if (TREE_CODE (decl) == VAR_DECL
3068 	      || TREE_CODE (decl) == PARM_DECL)
3069 	    return convert_from_reference (decl);
3070 	  /* The same is true for FIELD_DECL, but we also need to
3071 	     make sure that the syntax is correct.  */
3072 	  else if (TREE_CODE (decl) == FIELD_DECL)
3073 	    {
3074 	      /* Since SCOPE is NULL here, this is an unqualified name.
3075 		 Access checking has been performed during name lookup
3076 		 already.  Turn off checking to avoid duplicate errors.  */
3077 	      push_deferring_access_checks (dk_no_check);
3078 	      decl = finish_non_static_data_member
3079 		       (decl, current_class_ref,
3080 			/*qualifying_scope=*/NULL_TREE);
3081 	      pop_deferring_access_checks ();
3082 	      return decl;
3083 	    }
3084 	  return id_expression;
3085 	}
3086 
3087       /* Only certain kinds of names are allowed in constant
3088 	 expression.  Enumerators and template parameters have already
3089 	 been handled above.  */
3090       if (integral_constant_expression_p
3091 	  && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
3092 	  && ! builtin_valid_in_constant_expr_p (decl))
3093 	{
3094 	  if (!allow_non_integral_constant_expression_p)
3095 	    {
3096 	      error ("%qD cannot appear in a constant-expression", decl);
3097 	      return error_mark_node;
3098 	    }
3099 	  *non_integral_constant_expression_p = true;
3100 	}
3101 
3102       if (TREE_CODE (decl) == NAMESPACE_DECL)
3103 	{
3104 	  error ("use of namespace %qD as expression", decl);
3105 	  return error_mark_node;
3106 	}
3107       else if (DECL_CLASS_TEMPLATE_P (decl))
3108 	{
3109 	  error ("use of class template %qT as expression", decl);
3110 	  return error_mark_node;
3111 	}
3112       else if (TREE_CODE (decl) == TREE_LIST)
3113 	{
3114 	  /* Ambiguous reference to base members.  */
3115 	  error ("request for member %qD is ambiguous in "
3116 		 "multiple inheritance lattice", id_expression);
3117 	  print_candidates (decl);
3118 	  return error_mark_node;
3119 	}
3120 
3121       /* Mark variable-like entities as used.  Functions are similarly
3122 	 marked either below or after overload resolution.  */
3123       if (TREE_CODE (decl) == VAR_DECL
3124 	  || TREE_CODE (decl) == PARM_DECL
3125 	  || TREE_CODE (decl) == RESULT_DECL)
3126 	mark_used (decl);
3127 
3128       if (scope)
3129 	{
3130 	  decl = (adjust_result_of_qualified_name_lookup
3131 		  (decl, scope, current_class_type));
3132 
3133 	  if (TREE_CODE (decl) == FUNCTION_DECL)
3134 	    mark_used (decl);
3135 
3136 	  if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3137 	    decl = finish_qualified_id_expr (scope,
3138 					     decl,
3139 					     done,
3140 					     address_p,
3141 					     template_p,
3142 					     template_arg_p);
3143 	  else
3144 	    {
3145 	      tree r = convert_from_reference (decl);
3146 
3147 	      /* In a template, return a SCOPE_REF for most qualified-ids
3148 		 so that we can check access at instantiation time.  But if
3149 		 we're looking at a member of the current instantiation, we
3150 		 know we have access and building up the SCOPE_REF confuses
3151 		 non-type template argument handling.  */
3152 	      if (processing_template_decl && TYPE_P (scope)
3153 		  && !currently_open_class (scope))
3154 		r = build_qualified_name (TREE_TYPE (r),
3155 					  scope, decl,
3156 					  template_p);
3157 	      decl = r;
3158 	    }
3159 	}
3160       else if (TREE_CODE (decl) == FIELD_DECL)
3161 	{
3162 	  /* Since SCOPE is NULL here, this is an unqualified name.
3163 	     Access checking has been performed during name lookup
3164 	     already.  Turn off checking to avoid duplicate errors.  */
3165 	  push_deferring_access_checks (dk_no_check);
3166 	  decl = finish_non_static_data_member (decl, current_class_ref,
3167 						/*qualifying_scope=*/NULL_TREE);
3168 	  pop_deferring_access_checks ();
3169 	}
3170       else if (is_overloaded_fn (decl))
3171 	{
3172 	  tree first_fn;
3173 
3174 	  first_fn = decl;
3175 	  if (TREE_CODE (first_fn) == TEMPLATE_ID_EXPR)
3176 	    first_fn = TREE_OPERAND (first_fn, 0);
3177 	  first_fn = get_first_fn (first_fn);
3178 	  if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3179 	    first_fn = DECL_TEMPLATE_RESULT (first_fn);
3180 
3181 	  if (!really_overloaded_fn (decl))
3182 	    mark_used (first_fn);
3183 
3184 	  if (!template_arg_p
3185 	      && TREE_CODE (first_fn) == FUNCTION_DECL
3186 	      && DECL_FUNCTION_MEMBER_P (first_fn)
3187 	      && !shared_member_p (decl))
3188 	    {
3189 	      /* A set of member functions.  */
3190 	      decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3191 	      return finish_class_member_access_expr (decl, id_expression,
3192 						      /*template_p=*/false,
3193 						      tf_warning_or_error);
3194 	    }
3195 
3196 	  decl = baselink_for_fns (decl);
3197 	}
3198       else
3199 	{
3200 	  if (DECL_P (decl) && DECL_NONLOCAL (decl)
3201 	      && DECL_CLASS_SCOPE_P (decl))
3202 	    {
3203 	      tree context = context_for_name_lookup (decl);
3204 	      if (context != current_class_type)
3205 		{
3206 		  tree path = currently_open_derived_class (context);
3207 		  perform_or_defer_access_check (TYPE_BINFO (path),
3208 						 decl, decl);
3209 		}
3210 	    }
3211 
3212 	  decl = convert_from_reference (decl);
3213 	}
3214     }
3215 
3216   if (TREE_DEPRECATED (decl))
3217     warn_deprecated_use (decl, NULL_TREE);
3218 
3219   return decl;
3220 }
3221 
3222 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3223    use as a type-specifier.  */
3224 
3225 tree
3226 finish_typeof (tree expr)
3227 {
3228   tree type;
3229 
3230   if (type_dependent_expression_p (expr))
3231     {
3232       type = cxx_make_type (TYPEOF_TYPE);
3233       TYPEOF_TYPE_EXPR (type) = expr;
3234       SET_TYPE_STRUCTURAL_EQUALITY (type);
3235 
3236       return type;
3237     }
3238 
3239   type = unlowered_expr_type (expr);
3240 
3241   if (!type || type == unknown_type_node)
3242     {
3243       error ("type of %qE is unknown", expr);
3244       return error_mark_node;
3245     }
3246 
3247   return type;
3248 }
3249 
3250 /* Perform C++-specific checks for __builtin_offsetof before calling
3251    fold_offsetof.  */
3252 
3253 tree
3254 finish_offsetof (tree expr)
3255 {
3256   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3257     {
3258       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3259 	      TREE_OPERAND (expr, 2));
3260       return error_mark_node;
3261     }
3262   if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3263       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3264       || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
3265     {
3266       if (TREE_CODE (expr) == COMPONENT_REF
3267 	  || TREE_CODE (expr) == COMPOUND_EXPR)
3268 	expr = TREE_OPERAND (expr, 1);
3269       error ("cannot apply %<offsetof%> to member function %qD", expr);
3270       return error_mark_node;
3271     }
3272   if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3273     expr = TREE_OPERAND (expr, 0);
3274   return fold_offsetof (expr, NULL_TREE);
3275 }
3276 
3277 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3278    function is broken out from the above for the benefit of the tree-ssa
3279    project.  */
3280 
3281 void
3282 simplify_aggr_init_expr (tree *tp)
3283 {
3284   tree aggr_init_expr = *tp;
3285 
3286   /* Form an appropriate CALL_EXPR.  */
3287   tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3288   tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3289   tree type = TREE_TYPE (slot);
3290 
3291   tree call_expr;
3292   enum style_t { ctor, arg, pcc } style;
3293 
3294   if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3295     style = ctor;
3296 #ifdef PCC_STATIC_STRUCT_RETURN
3297   else if (1)
3298     style = pcc;
3299 #endif
3300   else
3301     {
3302       gcc_assert (TREE_ADDRESSABLE (type));
3303       style = arg;
3304     }
3305 
3306   call_expr = build_call_array_loc (input_location,
3307 				    TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3308 				    fn,
3309 				    aggr_init_expr_nargs (aggr_init_expr),
3310 				    AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3311 
3312   if (style == ctor)
3313     {
3314       /* Replace the first argument to the ctor with the address of the
3315 	 slot.  */
3316       cxx_mark_addressable (slot);
3317       CALL_EXPR_ARG (call_expr, 0) =
3318 	build1 (ADDR_EXPR, build_pointer_type (type), slot);
3319     }
3320   else if (style == arg)
3321     {
3322       /* Just mark it addressable here, and leave the rest to
3323 	 expand_call{,_inline}.  */
3324       cxx_mark_addressable (slot);
3325       CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3326       call_expr = build2 (MODIFY_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3327     }
3328   else if (style == pcc)
3329     {
3330       /* If we're using the non-reentrant PCC calling convention, then we
3331 	 need to copy the returned value out of the static buffer into the
3332 	 SLOT.  */
3333       push_deferring_access_checks (dk_no_check);
3334       call_expr = build_aggr_init (slot, call_expr,
3335 				   DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3336                                    tf_warning_or_error);
3337       pop_deferring_access_checks ();
3338       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3339     }
3340 
3341   if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3342     {
3343       tree init = build_zero_init (type, NULL_TREE,
3344 				   /*static_storage_p=*/false);
3345       init = build2 (INIT_EXPR, void_type_node, slot, init);
3346       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3347 			  init, call_expr);
3348     }
3349 
3350   *tp = call_expr;
3351 }
3352 
3353 /* Emit all thunks to FN that should be emitted when FN is emitted.  */
3354 
3355 void
3356 emit_associated_thunks (tree fn)
3357 {
3358   /* When we use vcall offsets, we emit thunks with the virtual
3359      functions to which they thunk. The whole point of vcall offsets
3360      is so that you can know statically the entire set of thunks that
3361      will ever be needed for a given virtual function, thereby
3362      enabling you to output all the thunks with the function itself.  */
3363   if (DECL_VIRTUAL_P (fn)
3364       /* Do not emit thunks for extern template instantiations.  */
3365       && ! DECL_REALLY_EXTERN (fn))
3366     {
3367       tree thunk;
3368 
3369       for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
3370 	{
3371 	  if (!THUNK_ALIAS (thunk))
3372 	    {
3373 	      use_thunk (thunk, /*emit_p=*/1);
3374 	      if (DECL_RESULT_THUNK_P (thunk))
3375 		{
3376 		  tree probe;
3377 
3378 		  for (probe = DECL_THUNKS (thunk);
3379 		       probe; probe = TREE_CHAIN (probe))
3380 		    use_thunk (probe, /*emit_p=*/1);
3381 		}
3382 	    }
3383 	  else
3384 	    gcc_assert (!DECL_THUNKS (thunk));
3385 	}
3386     }
3387 }
3388 
3389 /* Generate RTL for FN.  */
3390 
3391 bool
3392 expand_or_defer_fn_1 (tree fn)
3393 {
3394   /* When the parser calls us after finishing the body of a template
3395      function, we don't really want to expand the body.  */
3396   if (processing_template_decl)
3397     {
3398       /* Normally, collection only occurs in rest_of_compilation.  So,
3399 	 if we don't collect here, we never collect junk generated
3400 	 during the processing of templates until we hit a
3401 	 non-template function.  It's not safe to do this inside a
3402 	 nested class, though, as the parser may have local state that
3403 	 is not a GC root.  */
3404       if (!function_depth)
3405 	ggc_collect ();
3406       return false;
3407     }
3408 
3409   gcc_assert (DECL_SAVED_TREE (fn));
3410 
3411   /* If this is a constructor or destructor body, we have to clone
3412      it.  */
3413   if (maybe_clone_body (fn))
3414     {
3415       /* We don't want to process FN again, so pretend we've written
3416 	 it out, even though we haven't.  */
3417       TREE_ASM_WRITTEN (fn) = 1;
3418       DECL_SAVED_TREE (fn) = NULL_TREE;
3419       return false;
3420     }
3421 
3422   /* We make a decision about linkage for these functions at the end
3423      of the compilation.  Until that point, we do not want the back
3424      end to output them -- but we do want it to see the bodies of
3425      these functions so that it can inline them as appropriate.  */
3426   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3427     {
3428       if (DECL_INTERFACE_KNOWN (fn))
3429 	/* We've already made a decision as to how this function will
3430 	   be handled.  */;
3431       else if (!at_eof)
3432 	{
3433 	  DECL_EXTERNAL (fn) = 1;
3434 	  DECL_NOT_REALLY_EXTERN (fn) = 1;
3435 	  note_vague_linkage_fn (fn);
3436 	  /* A non-template inline function with external linkage will
3437 	     always be COMDAT.  As we must eventually determine the
3438 	     linkage of all functions, and as that causes writes to
3439 	     the data mapped in from the PCH file, it's advantageous
3440 	     to mark the functions at this point.  */
3441 	  if (!DECL_IMPLICIT_INSTANTIATION (fn))
3442 	    {
3443 	      /* This function must have external linkage, as
3444 		 otherwise DECL_INTERFACE_KNOWN would have been
3445 		 set.  */
3446 	      gcc_assert (TREE_PUBLIC (fn));
3447 	      comdat_linkage (fn);
3448 	      DECL_INTERFACE_KNOWN (fn) = 1;
3449 	    }
3450 	}
3451       else
3452 	import_export_decl (fn);
3453 
3454       /* If the user wants us to keep all inline functions, then mark
3455 	 this function as needed so that finish_file will make sure to
3456 	 output it later.  Similarly, all dllexport'd functions must
3457 	 be emitted; there may be callers in other DLLs.  */
3458       if ((flag_keep_inline_functions
3459 	   && DECL_DECLARED_INLINE_P (fn)
3460 	   && !DECL_REALLY_EXTERN (fn))
3461 	  || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
3462 	mark_needed (fn);
3463     }
3464 
3465   /* There's no reason to do any of the work here if we're only doing
3466      semantic analysis; this code just generates RTL.  */
3467   if (flag_syntax_only)
3468     return false;
3469 
3470   return true;
3471 }
3472 
3473 void
3474 expand_or_defer_fn (tree fn)
3475 {
3476   if (expand_or_defer_fn_1 (fn))
3477     {
3478       function_depth++;
3479 
3480       /* Expand or defer, at the whim of the compilation unit manager.  */
3481       cgraph_finalize_function (fn, function_depth > 1);
3482       emit_associated_thunks (fn);
3483 
3484       function_depth--;
3485     }
3486 }
3487 
3488 struct nrv_data
3489 {
3490   tree var;
3491   tree result;
3492   htab_t visited;
3493 };
3494 
3495 /* Helper function for walk_tree, used by finalize_nrv below.  */
3496 
3497 static tree
3498 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3499 {
3500   struct nrv_data *dp = (struct nrv_data *)data;
3501   void **slot;
3502 
3503   /* No need to walk into types.  There wouldn't be any need to walk into
3504      non-statements, except that we have to consider STMT_EXPRs.  */
3505   if (TYPE_P (*tp))
3506     *walk_subtrees = 0;
3507   /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3508      but differs from using NULL_TREE in that it indicates that we care
3509      about the value of the RESULT_DECL.  */
3510   else if (TREE_CODE (*tp) == RETURN_EXPR)
3511     TREE_OPERAND (*tp, 0) = dp->result;
3512   /* Change all cleanups for the NRV to only run when an exception is
3513      thrown.  */
3514   else if (TREE_CODE (*tp) == CLEANUP_STMT
3515 	   && CLEANUP_DECL (*tp) == dp->var)
3516     CLEANUP_EH_ONLY (*tp) = 1;
3517   /* Replace the DECL_EXPR for the NRV with an initialization of the
3518      RESULT_DECL, if needed.  */
3519   else if (TREE_CODE (*tp) == DECL_EXPR
3520 	   && DECL_EXPR_DECL (*tp) == dp->var)
3521     {
3522       tree init;
3523       if (DECL_INITIAL (dp->var)
3524 	  && DECL_INITIAL (dp->var) != error_mark_node)
3525 	init = build2 (INIT_EXPR, void_type_node, dp->result,
3526 		       DECL_INITIAL (dp->var));
3527       else
3528 	init = build_empty_stmt (EXPR_LOCATION (*tp));
3529       DECL_INITIAL (dp->var) = NULL_TREE;
3530       SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3531       *tp = init;
3532     }
3533   /* And replace all uses of the NRV with the RESULT_DECL.  */
3534   else if (*tp == dp->var)
3535     *tp = dp->result;
3536 
3537   /* Avoid walking into the same tree more than once.  Unfortunately, we
3538      can't just use walk_tree_without duplicates because it would only call
3539      us for the first occurrence of dp->var in the function body.  */
3540   slot = htab_find_slot (dp->visited, *tp, INSERT);
3541   if (*slot)
3542     *walk_subtrees = 0;
3543   else
3544     *slot = *tp;
3545 
3546   /* Keep iterating.  */
3547   return NULL_TREE;
3548 }
3549 
3550 /* Called from finish_function to implement the named return value
3551    optimization by overriding all the RETURN_EXPRs and pertinent
3552    CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3553    RESULT_DECL for the function.  */
3554 
3555 void
3556 finalize_nrv (tree *tp, tree var, tree result)
3557 {
3558   struct nrv_data data;
3559 
3560   /* Copy debugging information from VAR to RESULT.  */
3561   DECL_NAME (result) = DECL_NAME (var);
3562   DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3563   DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
3564   DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3565   DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3566   /* Don't forget that we take its address.  */
3567   TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3568 
3569   data.var = var;
3570   data.result = result;
3571   data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3572   cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3573   htab_delete (data.visited);
3574 }
3575 
3576 /* Return the declaration for the function called by CALL_EXPR T,
3577    TYPE is the class type of the clause decl.  */
3578 
3579 static tree
3580 omp_clause_info_fndecl (tree t, tree type)
3581 {
3582   tree ret = get_callee_fndecl (t);
3583 
3584   if (ret)
3585     return ret;
3586 
3587   gcc_assert (TREE_CODE (t) == CALL_EXPR);
3588   t = CALL_EXPR_FN (t);
3589   STRIP_NOPS (t);
3590   if (TREE_CODE (t) == OBJ_TYPE_REF)
3591     {
3592       t = cp_fold_obj_type_ref (t, type);
3593       if (TREE_CODE (t) == ADDR_EXPR
3594 	  && TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL)
3595 	return TREE_OPERAND (t, 0);
3596     }
3597 
3598   return NULL_TREE;
3599 }
3600 
3601 /* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
3602 
3603 bool
3604 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3605 			    bool need_copy_ctor, bool need_copy_assignment)
3606 {
3607   int save_errorcount = errorcount;
3608   tree info, t;
3609 
3610   /* Always allocate 3 elements for simplicity.  These are the
3611      function decls for the ctor, dtor, and assignment op.
3612      This layout is known to the three lang hooks,
3613      cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3614      and cxx_omp_clause_assign_op.  */
3615   info = make_tree_vec (3);
3616   CP_OMP_CLAUSE_INFO (c) = info;
3617 
3618   if (need_default_ctor
3619       || (need_copy_ctor && !TYPE_HAS_TRIVIAL_INIT_REF (type)))
3620     {
3621       VEC(tree,gc) *vec;
3622 
3623       if (need_default_ctor)
3624 	vec = NULL;
3625       else
3626 	{
3627 	  t = build_int_cst (build_pointer_type (type), 0);
3628 	  t = build1 (INDIRECT_REF, type, t);
3629 	  vec = make_tree_vector_single (t);
3630 	}
3631       t = build_special_member_call (NULL_TREE, complete_ctor_identifier,
3632 				     &vec, type, LOOKUP_NORMAL,
3633 				     tf_warning_or_error);
3634 
3635       if (vec != NULL)
3636 	release_tree_vector (vec);
3637 
3638       if (targetm.cxx.cdtor_returns_this () || errorcount)
3639 	/* Because constructors and destructors return this,
3640 	   the call will have been cast to "void".  Remove the
3641 	   cast here.  We would like to use STRIP_NOPS, but it
3642 	   wouldn't work here because TYPE_MODE (t) and
3643 	   TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3644 	   They are VOIDmode and Pmode, respectively.  */
3645 	if (TREE_CODE (t) == NOP_EXPR)
3646 	  t = TREE_OPERAND (t, 0);
3647 
3648       TREE_VEC_ELT (info, 0) = get_callee_fndecl (t);
3649     }
3650 
3651   if ((need_default_ctor || need_copy_ctor)
3652       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3653     {
3654       t = build_int_cst (build_pointer_type (type), 0);
3655       t = build1 (INDIRECT_REF, type, t);
3656       t = build_special_member_call (t, complete_dtor_identifier,
3657 				     NULL, type, LOOKUP_NORMAL,
3658 				     tf_warning_or_error);
3659 
3660       if (targetm.cxx.cdtor_returns_this () || errorcount)
3661 	/* Because constructors and destructors return this,
3662 	   the call will have been cast to "void".  Remove the
3663 	   cast here.  We would like to use STRIP_NOPS, but it
3664 	   wouldn't work here because TYPE_MODE (t) and
3665 	   TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3666 	   They are VOIDmode and Pmode, respectively.  */
3667 	if (TREE_CODE (t) == NOP_EXPR)
3668 	  t = TREE_OPERAND (t, 0);
3669 
3670       TREE_VEC_ELT (info, 1) = omp_clause_info_fndecl (t, type);
3671     }
3672 
3673   if (need_copy_assignment && !TYPE_HAS_TRIVIAL_ASSIGN_REF (type))
3674     {
3675       VEC(tree,gc) *vec;
3676 
3677       t = build_int_cst (build_pointer_type (type), 0);
3678       t = build1 (INDIRECT_REF, type, t);
3679       vec = make_tree_vector_single (t);
3680       t = build_special_member_call (t, ansi_assopname (NOP_EXPR),
3681 				     &vec, type, LOOKUP_NORMAL,
3682 				     tf_warning_or_error);
3683       release_tree_vector (vec);
3684 
3685       /* We'll have called convert_from_reference on the call, which
3686 	 may well have added an indirect_ref.  It's unneeded here,
3687 	 and in the way, so kill it.  */
3688       if (TREE_CODE (t) == INDIRECT_REF)
3689 	t = TREE_OPERAND (t, 0);
3690 
3691       TREE_VEC_ELT (info, 2) = omp_clause_info_fndecl (t, type);
3692     }
3693 
3694   return errorcount != save_errorcount;
3695 }
3696 
3697 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3698    Remove any elements from the list that are invalid.  */
3699 
3700 tree
3701 finish_omp_clauses (tree clauses)
3702 {
3703   bitmap_head generic_head, firstprivate_head, lastprivate_head;
3704   tree c, t, *pc = &clauses;
3705   const char *name;
3706 
3707   bitmap_obstack_initialize (NULL);
3708   bitmap_initialize (&generic_head, &bitmap_default_obstack);
3709   bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3710   bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3711 
3712   for (pc = &clauses, c = clauses; c ; c = *pc)
3713     {
3714       bool remove = false;
3715 
3716       switch (OMP_CLAUSE_CODE (c))
3717 	{
3718 	case OMP_CLAUSE_SHARED:
3719 	  name = "shared";
3720 	  goto check_dup_generic;
3721 	case OMP_CLAUSE_PRIVATE:
3722 	  name = "private";
3723 	  goto check_dup_generic;
3724 	case OMP_CLAUSE_REDUCTION:
3725 	  name = "reduction";
3726 	  goto check_dup_generic;
3727 	case OMP_CLAUSE_COPYPRIVATE:
3728 	  name = "copyprivate";
3729 	  goto check_dup_generic;
3730 	case OMP_CLAUSE_COPYIN:
3731 	  name = "copyin";
3732 	  goto check_dup_generic;
3733 	check_dup_generic:
3734 	  t = OMP_CLAUSE_DECL (c);
3735 	  if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3736 	    {
3737 	      if (processing_template_decl)
3738 		break;
3739 	      if (DECL_P (t))
3740 		error ("%qD is not a variable in clause %qs", t, name);
3741 	      else
3742 		error ("%qE is not a variable in clause %qs", t, name);
3743 	      remove = true;
3744 	    }
3745 	  else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3746 		   || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3747 		   || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3748 	    {
3749 	      error ("%qD appears more than once in data clauses", t);
3750 	      remove = true;
3751 	    }
3752 	  else
3753 	    bitmap_set_bit (&generic_head, DECL_UID (t));
3754 	  break;
3755 
3756 	case OMP_CLAUSE_FIRSTPRIVATE:
3757 	  t = OMP_CLAUSE_DECL (c);
3758 	  if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3759 	    {
3760 	      if (processing_template_decl)
3761 		break;
3762 	      if (DECL_P (t))
3763 		error ("%qD is not a variable in clause %<firstprivate%>", t);
3764 	      else
3765 		error ("%qE is not a variable in clause %<firstprivate%>", t);
3766 	      remove = true;
3767 	    }
3768 	  else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3769 		   || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3770 	    {
3771 	      error ("%qD appears more than once in data clauses", t);
3772 	      remove = true;
3773 	    }
3774 	  else
3775 	    bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3776 	  break;
3777 
3778 	case OMP_CLAUSE_LASTPRIVATE:
3779 	  t = OMP_CLAUSE_DECL (c);
3780 	  if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3781 	    {
3782 	      if (processing_template_decl)
3783 		break;
3784 	      if (DECL_P (t))
3785 		error ("%qD is not a variable in clause %<lastprivate%>", t);
3786 	      else
3787 		error ("%qE is not a variable in clause %<lastprivate%>", t);
3788 	      remove = true;
3789 	    }
3790 	  else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3791 		   || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3792 	    {
3793 	      error ("%qD appears more than once in data clauses", t);
3794 	      remove = true;
3795 	    }
3796 	  else
3797 	    bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3798 	  break;
3799 
3800 	case OMP_CLAUSE_IF:
3801 	  t = OMP_CLAUSE_IF_EXPR (c);
3802 	  t = maybe_convert_cond (t);
3803 	  if (t == error_mark_node)
3804 	    remove = true;
3805 	  OMP_CLAUSE_IF_EXPR (c) = t;
3806 	  break;
3807 
3808 	case OMP_CLAUSE_NUM_THREADS:
3809 	  t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3810 	  if (t == error_mark_node)
3811 	    remove = true;
3812 	  else if (!type_dependent_expression_p (t)
3813 		   && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3814 	    {
3815 	      error ("num_threads expression must be integral");
3816 	      remove = true;
3817 	    }
3818 	  break;
3819 
3820 	case OMP_CLAUSE_SCHEDULE:
3821 	  t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3822 	  if (t == NULL)
3823 	    ;
3824 	  else if (t == error_mark_node)
3825 	    remove = true;
3826 	  else if (!type_dependent_expression_p (t)
3827 		   && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3828 	    {
3829 	      error ("schedule chunk size expression must be integral");
3830 	      remove = true;
3831 	    }
3832 	  break;
3833 
3834 	case OMP_CLAUSE_NOWAIT:
3835 	case OMP_CLAUSE_ORDERED:
3836 	case OMP_CLAUSE_DEFAULT:
3837 	case OMP_CLAUSE_UNTIED:
3838 	case OMP_CLAUSE_COLLAPSE:
3839 	  break;
3840 
3841 	default:
3842 	  gcc_unreachable ();
3843 	}
3844 
3845       if (remove)
3846 	*pc = OMP_CLAUSE_CHAIN (c);
3847       else
3848 	pc = &OMP_CLAUSE_CHAIN (c);
3849     }
3850 
3851   for (pc = &clauses, c = clauses; c ; c = *pc)
3852     {
3853       enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3854       bool remove = false;
3855       bool need_complete_non_reference = false;
3856       bool need_default_ctor = false;
3857       bool need_copy_ctor = false;
3858       bool need_copy_assignment = false;
3859       bool need_implicitly_determined = false;
3860       tree type, inner_type;
3861 
3862       switch (c_kind)
3863 	{
3864 	case OMP_CLAUSE_SHARED:
3865 	  name = "shared";
3866 	  need_implicitly_determined = true;
3867 	  break;
3868 	case OMP_CLAUSE_PRIVATE:
3869 	  name = "private";
3870 	  need_complete_non_reference = true;
3871 	  need_default_ctor = true;
3872 	  need_implicitly_determined = true;
3873 	  break;
3874 	case OMP_CLAUSE_FIRSTPRIVATE:
3875 	  name = "firstprivate";
3876 	  need_complete_non_reference = true;
3877 	  need_copy_ctor = true;
3878 	  need_implicitly_determined = true;
3879 	  break;
3880 	case OMP_CLAUSE_LASTPRIVATE:
3881 	  name = "lastprivate";
3882 	  need_complete_non_reference = true;
3883 	  need_copy_assignment = true;
3884 	  need_implicitly_determined = true;
3885 	  break;
3886 	case OMP_CLAUSE_REDUCTION:
3887 	  name = "reduction";
3888 	  need_implicitly_determined = true;
3889 	  break;
3890 	case OMP_CLAUSE_COPYPRIVATE:
3891 	  name = "copyprivate";
3892 	  need_copy_assignment = true;
3893 	  break;
3894 	case OMP_CLAUSE_COPYIN:
3895 	  name = "copyin";
3896 	  need_copy_assignment = true;
3897 	  break;
3898 	default:
3899 	  pc = &OMP_CLAUSE_CHAIN (c);
3900 	  continue;
3901 	}
3902 
3903       t = OMP_CLAUSE_DECL (c);
3904       if (processing_template_decl
3905 	  && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3906 	{
3907 	  pc = &OMP_CLAUSE_CHAIN (c);
3908 	  continue;
3909 	}
3910 
3911       switch (c_kind)
3912 	{
3913 	case OMP_CLAUSE_LASTPRIVATE:
3914 	  if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3915 	    need_default_ctor = true;
3916 	  break;
3917 
3918 	case OMP_CLAUSE_REDUCTION:
3919 	  if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3920 	      || POINTER_TYPE_P (TREE_TYPE (t)))
3921 	    {
3922 	      error ("%qE has invalid type for %<reduction%>", t);
3923 	      remove = true;
3924 	    }
3925 	  else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3926 	    {
3927 	      enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3928 	      switch (r_code)
3929 		{
3930 		case PLUS_EXPR:
3931 		case MULT_EXPR:
3932 		case MINUS_EXPR:
3933 		  break;
3934 		default:
3935 		  error ("%qE has invalid type for %<reduction(%s)%>",
3936 			 t, operator_name_info[r_code].name);
3937 		  remove = true;
3938 		}
3939 	    }
3940 	  break;
3941 
3942 	case OMP_CLAUSE_COPYIN:
3943 	  if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3944 	    {
3945 	      error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3946 	      remove = true;
3947 	    }
3948 	  break;
3949 
3950 	default:
3951 	  break;
3952 	}
3953 
3954       if (need_complete_non_reference)
3955 	{
3956 	  t = require_complete_type (t);
3957 	  if (t == error_mark_node)
3958 	    remove = true;
3959 	  else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3960 	    {
3961 	      error ("%qE has reference type for %qs", t, name);
3962 	      remove = true;
3963 	    }
3964 	}
3965       if (need_implicitly_determined)
3966 	{
3967 	  const char *share_name = NULL;
3968 
3969 	  if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3970 	    share_name = "threadprivate";
3971 	  else switch (cxx_omp_predetermined_sharing (t))
3972 	    {
3973 	    case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3974 	      break;
3975 	    case OMP_CLAUSE_DEFAULT_SHARED:
3976 	      share_name = "shared";
3977 	      break;
3978 	    case OMP_CLAUSE_DEFAULT_PRIVATE:
3979 	      share_name = "private";
3980 	      break;
3981 	    default:
3982 	      gcc_unreachable ();
3983 	    }
3984 	  if (share_name)
3985 	    {
3986 	      error ("%qE is predetermined %qs for %qs",
3987 		     t, share_name, name);
3988 	      remove = true;
3989 	    }
3990 	}
3991 
3992       /* We're interested in the base element, not arrays.  */
3993       inner_type = type = TREE_TYPE (t);
3994       while (TREE_CODE (inner_type) == ARRAY_TYPE)
3995 	inner_type = TREE_TYPE (inner_type);
3996 
3997       /* Check for special function availability by building a call to one.
3998 	 Save the results, because later we won't be in the right context
3999 	 for making these queries.  */
4000       if (CLASS_TYPE_P (inner_type)
4001 	  && (need_default_ctor || need_copy_ctor || need_copy_assignment)
4002 	  && !type_dependent_expression_p (t)
4003 	  && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
4004 					 need_copy_ctor, need_copy_assignment))
4005 	remove = true;
4006 
4007       if (remove)
4008 	*pc = OMP_CLAUSE_CHAIN (c);
4009       else
4010 	pc = &OMP_CLAUSE_CHAIN (c);
4011     }
4012 
4013   bitmap_obstack_release (NULL);
4014   return clauses;
4015 }
4016 
4017 /* For all variables in the tree_list VARS, mark them as thread local.  */
4018 
4019 void
4020 finish_omp_threadprivate (tree vars)
4021 {
4022   tree t;
4023 
4024   /* Mark every variable in VARS to be assigned thread local storage.  */
4025   for (t = vars; t; t = TREE_CHAIN (t))
4026     {
4027       tree v = TREE_PURPOSE (t);
4028 
4029       if (error_operand_p (v))
4030 	;
4031       else if (TREE_CODE (v) != VAR_DECL)
4032 	error ("%<threadprivate%> %qD is not file, namespace "
4033 	       "or block scope variable", v);
4034       /* If V had already been marked threadprivate, it doesn't matter
4035 	 whether it had been used prior to this point.  */
4036       else if (TREE_USED (v)
4037 	  && (DECL_LANG_SPECIFIC (v) == NULL
4038 	      || !CP_DECL_THREADPRIVATE_P (v)))
4039 	error ("%qE declared %<threadprivate%> after first use", v);
4040       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
4041 	error ("automatic variable %qE cannot be %<threadprivate%>", v);
4042       else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
4043 	error ("%<threadprivate%> %qE has incomplete type", v);
4044       else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
4045 	       && CP_DECL_CONTEXT (v) != current_class_type)
4046 	error ("%<threadprivate%> %qE directive not "
4047 	       "in %qT definition", v, CP_DECL_CONTEXT (v));
4048       else
4049 	{
4050 	  /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
4051 	  if (DECL_LANG_SPECIFIC (v) == NULL)
4052 	    {
4053 	      retrofit_lang_decl (v);
4054 
4055 	      /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4056 		 after the allocation of the lang_decl structure.  */
4057 	      if (DECL_DISCRIMINATOR_P (v))
4058 		DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
4059 	    }
4060 
4061 	  if (! DECL_THREAD_LOCAL_P (v))
4062 	    {
4063 	      DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4064 	      /* If rtl has been already set for this var, call
4065 		 make_decl_rtl once again, so that encode_section_info
4066 		 has a chance to look at the new decl flags.  */
4067 	      if (DECL_RTL_SET_P (v))
4068 		make_decl_rtl (v);
4069 	    }
4070 	  CP_DECL_THREADPRIVATE_P (v) = 1;
4071 	}
4072     }
4073 }
4074 
4075 /* Build an OpenMP structured block.  */
4076 
4077 tree
4078 begin_omp_structured_block (void)
4079 {
4080   return do_pushlevel (sk_omp);
4081 }
4082 
4083 tree
4084 finish_omp_structured_block (tree block)
4085 {
4086   return do_poplevel (block);
4087 }
4088 
4089 /* Similarly, except force the retention of the BLOCK.  */
4090 
4091 tree
4092 begin_omp_parallel (void)
4093 {
4094   keep_next_level (true);
4095   return begin_omp_structured_block ();
4096 }
4097 
4098 tree
4099 finish_omp_parallel (tree clauses, tree body)
4100 {
4101   tree stmt;
4102 
4103   body = finish_omp_structured_block (body);
4104 
4105   stmt = make_node (OMP_PARALLEL);
4106   TREE_TYPE (stmt) = void_type_node;
4107   OMP_PARALLEL_CLAUSES (stmt) = clauses;
4108   OMP_PARALLEL_BODY (stmt) = body;
4109 
4110   return add_stmt (stmt);
4111 }
4112 
4113 tree
4114 begin_omp_task (void)
4115 {
4116   keep_next_level (true);
4117   return begin_omp_structured_block ();
4118 }
4119 
4120 tree
4121 finish_omp_task (tree clauses, tree body)
4122 {
4123   tree stmt;
4124 
4125   body = finish_omp_structured_block (body);
4126 
4127   stmt = make_node (OMP_TASK);
4128   TREE_TYPE (stmt) = void_type_node;
4129   OMP_TASK_CLAUSES (stmt) = clauses;
4130   OMP_TASK_BODY (stmt) = body;
4131 
4132   return add_stmt (stmt);
4133 }
4134 
4135 /* Helper function for finish_omp_for.  Convert Ith random access iterator
4136    into integral iterator.  Return FALSE if successful.  */
4137 
4138 static bool
4139 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4140 			       tree condv, tree incrv, tree *body,
4141 			       tree *pre_body, tree clauses)
4142 {
4143   tree diff, iter_init, iter_incr = NULL, last;
4144   tree incr_var = NULL, orig_pre_body, orig_body, c;
4145   tree decl = TREE_VEC_ELT (declv, i);
4146   tree init = TREE_VEC_ELT (initv, i);
4147   tree cond = TREE_VEC_ELT (condv, i);
4148   tree incr = TREE_VEC_ELT (incrv, i);
4149   tree iter = decl;
4150   location_t elocus = locus;
4151 
4152   if (init && EXPR_HAS_LOCATION (init))
4153     elocus = EXPR_LOCATION (init);
4154 
4155   switch (TREE_CODE (cond))
4156     {
4157     case GT_EXPR:
4158     case GE_EXPR:
4159     case LT_EXPR:
4160     case LE_EXPR:
4161       if (TREE_OPERAND (cond, 1) == iter)
4162 	cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4163 		       TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4164       if (TREE_OPERAND (cond, 0) != iter)
4165 	cond = error_mark_node;
4166       else
4167 	{
4168 	  tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4169 					TREE_OPERAND (cond, 1), ERROR_MARK,
4170 					NULL, tf_warning_or_error);
4171 	  if (error_operand_p (tem))
4172 	    return true;
4173 	}
4174       break;
4175     default:
4176       cond = error_mark_node;
4177       break;
4178     }
4179   if (cond == error_mark_node)
4180     {
4181       error_at (elocus, "invalid controlling predicate");
4182       return true;
4183     }
4184   diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4185 			    ERROR_MARK, iter, ERROR_MARK, NULL,
4186 			    tf_warning_or_error);
4187   if (error_operand_p (diff))
4188     return true;
4189   if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4190     {
4191       error_at (elocus, "difference between %qE and %qD does not have integer type",
4192 		TREE_OPERAND (cond, 1), iter);
4193       return true;
4194     }
4195 
4196   switch (TREE_CODE (incr))
4197     {
4198     case PREINCREMENT_EXPR:
4199     case PREDECREMENT_EXPR:
4200     case POSTINCREMENT_EXPR:
4201     case POSTDECREMENT_EXPR:
4202       if (TREE_OPERAND (incr, 0) != iter)
4203 	{
4204 	  incr = error_mark_node;
4205 	  break;
4206 	}
4207       iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4208 				    tf_warning_or_error);
4209       if (error_operand_p (iter_incr))
4210 	return true;
4211       else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4212 	       || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4213 	incr = integer_one_node;
4214       else
4215 	incr = integer_minus_one_node;
4216       break;
4217     case MODIFY_EXPR:
4218       if (TREE_OPERAND (incr, 0) != iter)
4219 	incr = error_mark_node;
4220       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4221 	       || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4222 	{
4223 	  tree rhs = TREE_OPERAND (incr, 1);
4224 	  if (TREE_OPERAND (rhs, 0) == iter)
4225 	    {
4226 	      if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4227 		  != INTEGER_TYPE)
4228 		incr = error_mark_node;
4229 	      else
4230 		{
4231 		  iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4232 						   TREE_OPERAND (rhs, 1),
4233 						   tf_warning_or_error);
4234 		  if (error_operand_p (iter_incr))
4235 		    return true;
4236 		  incr = TREE_OPERAND (rhs, 1);
4237 		  incr = cp_convert (TREE_TYPE (diff), incr);
4238 		  if (TREE_CODE (rhs) == MINUS_EXPR)
4239 		    {
4240 		      incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4241 		      incr = fold_if_not_in_template (incr);
4242 		    }
4243 		  if (TREE_CODE (incr) != INTEGER_CST
4244 		      && (TREE_CODE (incr) != NOP_EXPR
4245 			  || (TREE_CODE (TREE_OPERAND (incr, 0))
4246 			      != INTEGER_CST)))
4247 		    iter_incr = NULL;
4248 		}
4249 	    }
4250 	  else if (TREE_OPERAND (rhs, 1) == iter)
4251 	    {
4252 	      if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4253 		  || TREE_CODE (rhs) != PLUS_EXPR)
4254 		incr = error_mark_node;
4255 	      else
4256 		{
4257 		  iter_incr = build_x_binary_op (PLUS_EXPR,
4258 						 TREE_OPERAND (rhs, 0),
4259 						 ERROR_MARK, iter,
4260 						 ERROR_MARK, NULL,
4261 						 tf_warning_or_error);
4262 		  if (error_operand_p (iter_incr))
4263 		    return true;
4264 		  iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4265 						   iter_incr,
4266 						   tf_warning_or_error);
4267 		  if (error_operand_p (iter_incr))
4268 		    return true;
4269 		  incr = TREE_OPERAND (rhs, 0);
4270 		  iter_incr = NULL;
4271 		}
4272 	    }
4273 	  else
4274 	    incr = error_mark_node;
4275 	}
4276       else
4277 	incr = error_mark_node;
4278       break;
4279     default:
4280       incr = error_mark_node;
4281       break;
4282     }
4283 
4284   if (incr == error_mark_node)
4285     {
4286       error_at (elocus, "invalid increment expression");
4287       return true;
4288     }
4289 
4290   incr = cp_convert (TREE_TYPE (diff), incr);
4291   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4292     if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4293 	&& OMP_CLAUSE_DECL (c) == iter)
4294       break;
4295 
4296   decl = create_temporary_var (TREE_TYPE (diff));
4297   pushdecl (decl);
4298   add_decl_expr (decl);
4299   last = create_temporary_var (TREE_TYPE (diff));
4300   pushdecl (last);
4301   add_decl_expr (last);
4302   if (c && iter_incr == NULL)
4303     {
4304       incr_var = create_temporary_var (TREE_TYPE (diff));
4305       pushdecl (incr_var);
4306       add_decl_expr (incr_var);
4307     }
4308   gcc_assert (stmts_are_full_exprs_p ());
4309 
4310   orig_pre_body = *pre_body;
4311   *pre_body = push_stmt_list ();
4312   if (orig_pre_body)
4313     add_stmt (orig_pre_body);
4314   if (init != NULL)
4315     finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4316 					   tf_warning_or_error));
4317   init = build_int_cst (TREE_TYPE (diff), 0);
4318   if (c && iter_incr == NULL)
4319     {
4320       finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4321 					     incr, tf_warning_or_error));
4322       incr = incr_var;
4323       iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4324 				       tf_warning_or_error);
4325     }
4326   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4327 					 tf_warning_or_error));
4328   *pre_body = pop_stmt_list (*pre_body);
4329 
4330   cond = cp_build_binary_op (elocus,
4331 			     TREE_CODE (cond), decl, diff,
4332 			     tf_warning_or_error);
4333   incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4334 			    elocus, incr, NULL_TREE);
4335 
4336   orig_body = *body;
4337   *body = push_stmt_list ();
4338   iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4339   iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4340 				   tf_warning_or_error);
4341   iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4342   finish_expr_stmt (iter_init);
4343   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4344 					 tf_warning_or_error));
4345   add_stmt (orig_body);
4346   *body = pop_stmt_list (*body);
4347 
4348   if (c)
4349     {
4350       OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4351       finish_expr_stmt (iter_incr);
4352       OMP_CLAUSE_LASTPRIVATE_STMT (c)
4353 	= pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4354     }
4355 
4356   TREE_VEC_ELT (declv, i) = decl;
4357   TREE_VEC_ELT (initv, i) = init;
4358   TREE_VEC_ELT (condv, i) = cond;
4359   TREE_VEC_ELT (incrv, i) = incr;
4360 
4361   return false;
4362 }
4363 
4364 /* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
4365    are directly for their associated operands in the statement.  DECL
4366    and INIT are a combo; if DECL is NULL then INIT ought to be a
4367    MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
4368    optional statements that need to go before the loop into its
4369    sk_omp scope.  */
4370 
4371 tree
4372 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4373 		tree incrv, tree body, tree pre_body, tree clauses)
4374 {
4375   tree omp_for = NULL, orig_incr = NULL;
4376   tree decl, init, cond, incr;
4377   location_t elocus;
4378   int i;
4379 
4380   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4381   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4382   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4383   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4384     {
4385       decl = TREE_VEC_ELT (declv, i);
4386       init = TREE_VEC_ELT (initv, i);
4387       cond = TREE_VEC_ELT (condv, i);
4388       incr = TREE_VEC_ELT (incrv, i);
4389       elocus = locus;
4390 
4391       if (decl == NULL)
4392 	{
4393 	  if (init != NULL)
4394 	    switch (TREE_CODE (init))
4395 	      {
4396 	      case MODIFY_EXPR:
4397 		decl = TREE_OPERAND (init, 0);
4398 		init = TREE_OPERAND (init, 1);
4399 		break;
4400 	      case MODOP_EXPR:
4401 		if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4402 		  {
4403 		    decl = TREE_OPERAND (init, 0);
4404 		    init = TREE_OPERAND (init, 2);
4405 		  }
4406 		break;
4407 	      default:
4408 		break;
4409 	      }
4410 
4411 	  if (decl == NULL)
4412 	    {
4413 	      error_at (locus,
4414 			"expected iteration declaration or initialization");
4415 	      return NULL;
4416 	    }
4417 	}
4418 
4419       if (init && EXPR_HAS_LOCATION (init))
4420 	elocus = EXPR_LOCATION (init);
4421 
4422       if (cond == NULL)
4423 	{
4424 	  error_at (elocus, "missing controlling predicate");
4425 	  return NULL;
4426 	}
4427 
4428       if (incr == NULL)
4429 	{
4430 	  error_at (elocus, "missing increment expression");
4431 	  return NULL;
4432 	}
4433 
4434       TREE_VEC_ELT (declv, i) = decl;
4435       TREE_VEC_ELT (initv, i) = init;
4436     }
4437 
4438   if (dependent_omp_for_p (declv, initv, condv, incrv))
4439     {
4440       tree stmt;
4441 
4442       stmt = make_node (OMP_FOR);
4443 
4444       for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4445 	{
4446 	  /* This is really just a place-holder.  We'll be decomposing this
4447 	     again and going through the cp_build_modify_expr path below when
4448 	     we instantiate the thing.  */
4449 	  TREE_VEC_ELT (initv, i)
4450 	    = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4451 		      TREE_VEC_ELT (initv, i));
4452 	}
4453 
4454       TREE_TYPE (stmt) = void_type_node;
4455       OMP_FOR_INIT (stmt) = initv;
4456       OMP_FOR_COND (stmt) = condv;
4457       OMP_FOR_INCR (stmt) = incrv;
4458       OMP_FOR_BODY (stmt) = body;
4459       OMP_FOR_PRE_BODY (stmt) = pre_body;
4460       OMP_FOR_CLAUSES (stmt) = clauses;
4461 
4462       SET_EXPR_LOCATION (stmt, locus);
4463       return add_stmt (stmt);
4464     }
4465 
4466   if (processing_template_decl)
4467     orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4468 
4469   for (i = 0; i < TREE_VEC_LENGTH (declv); )
4470     {
4471       decl = TREE_VEC_ELT (declv, i);
4472       init = TREE_VEC_ELT (initv, i);
4473       cond = TREE_VEC_ELT (condv, i);
4474       incr = TREE_VEC_ELT (incrv, i);
4475       if (orig_incr)
4476 	TREE_VEC_ELT (orig_incr, i) = incr;
4477       elocus = locus;
4478 
4479       if (init && EXPR_HAS_LOCATION (init))
4480 	elocus = EXPR_LOCATION (init);
4481 
4482       if (!DECL_P (decl))
4483 	{
4484 	  error_at (elocus, "expected iteration declaration or initialization");
4485 	  return NULL;
4486 	}
4487 
4488       if (incr && TREE_CODE (incr) == MODOP_EXPR)
4489 	{
4490 	  if (orig_incr)
4491 	    TREE_VEC_ELT (orig_incr, i) = incr;
4492 	  incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4493 				       TREE_CODE (TREE_OPERAND (incr, 1)),
4494 				       TREE_OPERAND (incr, 2),
4495 				       tf_warning_or_error);
4496 	}
4497 
4498       if (CLASS_TYPE_P (TREE_TYPE (decl)))
4499 	{
4500 	  if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4501 					     incrv, &body, &pre_body, clauses))
4502 	    return NULL;
4503 	  continue;
4504 	}
4505 
4506       if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4507 	  && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4508 	{
4509 	  error_at (elocus, "invalid type for iteration variable %qE", decl);
4510 	  return NULL;
4511 	}
4512 
4513       if (!processing_template_decl)
4514 	{
4515 	  init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4516 	  init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4517 	}
4518       else
4519 	init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4520       if (cond
4521 	  && TREE_SIDE_EFFECTS (cond)
4522 	  && COMPARISON_CLASS_P (cond)
4523 	  && !processing_template_decl)
4524 	{
4525 	  tree t = TREE_OPERAND (cond, 0);
4526 	  if (TREE_SIDE_EFFECTS (t)
4527 	      && t != decl
4528 	      && (TREE_CODE (t) != NOP_EXPR
4529 		  || TREE_OPERAND (t, 0) != decl))
4530 	    TREE_OPERAND (cond, 0)
4531 	      = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4532 
4533 	  t = TREE_OPERAND (cond, 1);
4534 	  if (TREE_SIDE_EFFECTS (t)
4535 	      && t != decl
4536 	      && (TREE_CODE (t) != NOP_EXPR
4537 		  || TREE_OPERAND (t, 0) != decl))
4538 	    TREE_OPERAND (cond, 1)
4539 	      = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4540 	}
4541       if (decl == error_mark_node || init == error_mark_node)
4542 	return NULL;
4543 
4544       TREE_VEC_ELT (declv, i) = decl;
4545       TREE_VEC_ELT (initv, i) = init;
4546       TREE_VEC_ELT (condv, i) = cond;
4547       TREE_VEC_ELT (incrv, i) = incr;
4548       i++;
4549     }
4550 
4551   if (IS_EMPTY_STMT (pre_body))
4552     pre_body = NULL;
4553 
4554   omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4555 			      body, pre_body);
4556 
4557   if (omp_for == NULL)
4558     return NULL;
4559 
4560   for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4561     {
4562       decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4563       incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4564 
4565       if (TREE_CODE (incr) != MODIFY_EXPR)
4566 	continue;
4567 
4568       if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4569 	  && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4570 	  && !processing_template_decl)
4571 	{
4572 	  tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4573 	  if (TREE_SIDE_EFFECTS (t)
4574 	      && t != decl
4575 	      && (TREE_CODE (t) != NOP_EXPR
4576 		  || TREE_OPERAND (t, 0) != decl))
4577 	    TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4578 	      = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4579 
4580 	  t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4581 	  if (TREE_SIDE_EFFECTS (t)
4582 	      && t != decl
4583 	      && (TREE_CODE (t) != NOP_EXPR
4584 		  || TREE_OPERAND (t, 0) != decl))
4585 	    TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4586 	      = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4587 	}
4588 
4589       if (orig_incr)
4590 	TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4591     }
4592   if (omp_for != NULL)
4593     OMP_FOR_CLAUSES (omp_for) = clauses;
4594   return omp_for;
4595 }
4596 
4597 void
4598 finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4599 {
4600   tree orig_lhs;
4601   tree orig_rhs;
4602   bool dependent_p;
4603   tree stmt;
4604 
4605   orig_lhs = lhs;
4606   orig_rhs = rhs;
4607   dependent_p = false;
4608   stmt = NULL_TREE;
4609 
4610   /* Even in a template, we can detect invalid uses of the atomic
4611      pragma if neither LHS nor RHS is type-dependent.  */
4612   if (processing_template_decl)
4613     {
4614       dependent_p = (type_dependent_expression_p (lhs)
4615 		     || type_dependent_expression_p (rhs));
4616       if (!dependent_p)
4617 	{
4618 	  lhs = build_non_dependent_expr (lhs);
4619 	  rhs = build_non_dependent_expr (rhs);
4620 	}
4621     }
4622   if (!dependent_p)
4623     {
4624       stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4625       if (stmt == error_mark_node)
4626 	return;
4627     }
4628   if (processing_template_decl)
4629     stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4630 		   build2 (code, void_type_node, orig_lhs, orig_rhs));
4631   add_stmt (stmt);
4632 }
4633 
4634 void
4635 finish_omp_barrier (void)
4636 {
4637   tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4638   VEC(tree,gc) *vec = make_tree_vector ();
4639   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4640   release_tree_vector (vec);
4641   finish_expr_stmt (stmt);
4642 }
4643 
4644 void
4645 finish_omp_flush (void)
4646 {
4647   tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4648   VEC(tree,gc) *vec = make_tree_vector ();
4649   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4650   release_tree_vector (vec);
4651   finish_expr_stmt (stmt);
4652 }
4653 
4654 void
4655 finish_omp_taskwait (void)
4656 {
4657   tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4658   VEC(tree,gc) *vec = make_tree_vector ();
4659   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4660   release_tree_vector (vec);
4661   finish_expr_stmt (stmt);
4662 }
4663 
4664 void
4665 init_cp_semantics (void)
4666 {
4667 }
4668 
4669 /* Build a STATIC_ASSERT for a static assertion with the condition
4670    CONDITION and the message text MESSAGE.  LOCATION is the location
4671    of the static assertion in the source code.  When MEMBER_P, this
4672    static assertion is a member of a class.  */
4673 void
4674 finish_static_assert (tree condition, tree message, location_t location,
4675                       bool member_p)
4676 {
4677   if (check_for_bare_parameter_packs (condition))
4678     condition = error_mark_node;
4679 
4680   if (type_dependent_expression_p (condition)
4681       || value_dependent_expression_p (condition))
4682     {
4683       /* We're in a template; build a STATIC_ASSERT and put it in
4684          the right place. */
4685       tree assertion;
4686 
4687       assertion = make_node (STATIC_ASSERT);
4688       STATIC_ASSERT_CONDITION (assertion) = condition;
4689       STATIC_ASSERT_MESSAGE (assertion) = message;
4690       STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4691 
4692       if (member_p)
4693         maybe_add_class_template_decl_list (current_class_type,
4694                                             assertion,
4695                                             /*friend_p=*/0);
4696       else
4697         add_stmt (assertion);
4698 
4699       return;
4700     }
4701 
4702   /* Fold the expression and convert it to a boolean value. */
4703   condition = fold_non_dependent_expr (condition);
4704   condition = cp_convert (boolean_type_node, condition);
4705 
4706   if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4707     /* Do nothing; the condition is satisfied. */
4708     ;
4709   else
4710     {
4711       location_t saved_loc = input_location;
4712 
4713       input_location = location;
4714       if (TREE_CODE (condition) == INTEGER_CST
4715           && integer_zerop (condition))
4716         /* Report the error. */
4717         error ("static assertion failed: %E", message);
4718       else if (condition && condition != error_mark_node)
4719         error ("non-constant condition for static assertion");
4720       input_location = saved_loc;
4721     }
4722 }
4723 
4724 /* Returns the type of EXPR for cases where we can determine it even though
4725    EXPR is a type-dependent expression.  */
4726 
4727 tree
4728 describable_type (tree expr)
4729 {
4730   tree type = NULL_TREE;
4731 
4732   if (! type_dependent_expression_p (expr)
4733       && ! type_unknown_p (expr))
4734     {
4735       type = unlowered_expr_type (expr);
4736       if (real_lvalue_p (expr))
4737 	type = build_reference_type (type);
4738     }
4739 
4740   if (type)
4741     return type;
4742 
4743   switch (TREE_CODE (expr))
4744     {
4745     case VAR_DECL:
4746     case PARM_DECL:
4747     case RESULT_DECL:
4748     case FUNCTION_DECL:
4749       return TREE_TYPE (expr);
4750       break;
4751 
4752     case NEW_EXPR:
4753     case CONST_DECL:
4754     case TEMPLATE_PARM_INDEX:
4755     case CAST_EXPR:
4756     case STATIC_CAST_EXPR:
4757     case REINTERPRET_CAST_EXPR:
4758     case CONST_CAST_EXPR:
4759     case DYNAMIC_CAST_EXPR:
4760       type = TREE_TYPE (expr);
4761       break;
4762 
4763     case INDIRECT_REF:
4764       {
4765 	tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4766 	if (ptrtype && POINTER_TYPE_P (ptrtype))
4767 	  type = build_reference_type (TREE_TYPE (ptrtype));
4768       }
4769       break;
4770 
4771     default:
4772       if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4773 	type = TREE_TYPE (expr);
4774       break;
4775     }
4776 
4777   if (type && type_uses_auto (type))
4778     return NULL_TREE;
4779   else
4780     return type;
4781 }
4782 
4783 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
4784    suitable for use as a type-specifier.
4785 
4786    ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4787    id-expression or a class member access, FALSE when it was parsed as
4788    a full expression.  */
4789 
4790 tree
4791 finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4792 {
4793   tree orig_expr = expr;
4794   tree type = NULL_TREE;
4795 
4796   if (!expr || error_operand_p (expr))
4797     return error_mark_node;
4798 
4799   if (TYPE_P (expr)
4800       || TREE_CODE (expr) == TYPE_DECL
4801       || (TREE_CODE (expr) == BIT_NOT_EXPR
4802 	  && TYPE_P (TREE_OPERAND (expr, 0))))
4803     {
4804       error ("argument to decltype must be an expression");
4805       return error_mark_node;
4806     }
4807 
4808   if (type_dependent_expression_p (expr)
4809       /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4810 	 if it isn't dependent, so that we can check access control at
4811 	 instantiation time, so defer the decltype as well (PR 42277).  */
4812       || (id_expression_or_member_access_p
4813 	  && processing_template_decl
4814 	  && TREE_CODE (expr) == COMPONENT_REF))
4815     {
4816       if (id_expression_or_member_access_p)
4817 	{
4818 	  switch (TREE_CODE (expr))
4819 	    {
4820 	    case VAR_DECL:
4821 	    case PARM_DECL:
4822 	    case RESULT_DECL:
4823 	    case FUNCTION_DECL:
4824 	    case CONST_DECL:
4825 	    case TEMPLATE_PARM_INDEX:
4826 	      type = TREE_TYPE (expr);
4827 	      break;
4828 
4829 	    default:
4830 	      break;
4831 	    }
4832 	}
4833 
4834       if (type && !type_uses_auto (type))
4835 	return type;
4836 
4837     treat_as_dependent:
4838       type = cxx_make_type (DECLTYPE_TYPE);
4839       DECLTYPE_TYPE_EXPR (type) = expr;
4840       DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4841         = id_expression_or_member_access_p;
4842       SET_TYPE_STRUCTURAL_EQUALITY (type);
4843 
4844       return type;
4845     }
4846 
4847   /* The type denoted by decltype(e) is defined as follows:  */
4848 
4849   expr = resolve_nondeduced_context (expr);
4850   if (id_expression_or_member_access_p)
4851     {
4852       /* If e is an id-expression or a class member access (5.2.5
4853          [expr.ref]), decltype(e) is defined as the type of the entity
4854          named by e. If there is no such entity, or e names a set of
4855          overloaded functions, the program is ill-formed.  */
4856       if (TREE_CODE (expr) == IDENTIFIER_NODE)
4857         expr = lookup_name (expr);
4858 
4859       if (TREE_CODE (expr) == INDIRECT_REF)
4860         /* This can happen when the expression is, e.g., "a.b". Just
4861            look at the underlying operand.  */
4862         expr = TREE_OPERAND (expr, 0);
4863 
4864       if (TREE_CODE (expr) == OFFSET_REF
4865           || TREE_CODE (expr) == MEMBER_REF)
4866         /* We're only interested in the field itself. If it is a
4867            BASELINK, we will need to see through it in the next
4868            step.  */
4869         expr = TREE_OPERAND (expr, 1);
4870 
4871       if (TREE_CODE (expr) == BASELINK)
4872         /* See through BASELINK nodes to the underlying functions.  */
4873         expr = BASELINK_FUNCTIONS (expr);
4874 
4875       if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4876 	expr = TREE_OPERAND (expr, 0);
4877 
4878       if (TREE_CODE (expr) == OVERLOAD)
4879         {
4880           if (OVL_CHAIN (expr)
4881 	      || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
4882             {
4883               error ("%qE refers to a set of overloaded functions", orig_expr);
4884               return error_mark_node;
4885             }
4886           else
4887             /* An overload set containing only one function: just look
4888                at that function.  */
4889             expr = OVL_FUNCTION (expr);
4890         }
4891 
4892       switch (TREE_CODE (expr))
4893         {
4894         case FIELD_DECL:
4895           if (DECL_BIT_FIELD_TYPE (expr))
4896             {
4897               type = DECL_BIT_FIELD_TYPE (expr);
4898               break;
4899             }
4900           /* Fall through for fields that aren't bitfields.  */
4901 
4902         case FUNCTION_DECL:
4903         case VAR_DECL:
4904         case CONST_DECL:
4905         case PARM_DECL:
4906         case RESULT_DECL:
4907         case TEMPLATE_PARM_INDEX:
4908           type = TREE_TYPE (expr);
4909           break;
4910 
4911         case ERROR_MARK:
4912           type = error_mark_node;
4913           break;
4914 
4915         case COMPONENT_REF:
4916           type = is_bitfield_expr_with_lowered_type (expr);
4917           if (!type)
4918             type = TREE_TYPE (TREE_OPERAND (expr, 1));
4919           break;
4920 
4921         case BIT_FIELD_REF:
4922           gcc_unreachable ();
4923 
4924         case INTEGER_CST:
4925           /* We can get here when the id-expression refers to an
4926              enumerator.  */
4927           type = TREE_TYPE (expr);
4928           break;
4929 
4930         default:
4931 	  gcc_assert (TYPE_P (expr) || DECL_P (expr)
4932 		      || TREE_CODE (expr) == SCOPE_REF);
4933           error ("argument to decltype must be an expression");
4934           return error_mark_node;
4935         }
4936     }
4937   else
4938     {
4939       /* Expressions of reference type are sometimes wrapped in
4940          INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
4941          representation, not part of the language, so we have to look
4942          through them.  */
4943       if (TREE_CODE (expr) == INDIRECT_REF
4944           && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4945   	  == REFERENCE_TYPE)
4946         expr = TREE_OPERAND (expr, 0);
4947 
4948       if (TREE_CODE (expr) == CALL_EXPR)
4949         {
4950           /* If e is a function call (5.2.2 [expr.call]) or an
4951            invocation of an overloaded operator (parentheses around e
4952            are ignored), decltype(e) is defined as the return type of
4953            that function.  */
4954           tree fndecl = get_callee_fndecl (expr);
4955           if (fndecl && fndecl != error_mark_node)
4956             type = TREE_TYPE (TREE_TYPE (fndecl));
4957           else
4958             {
4959               tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4960               if ((TREE_CODE (target_type) == REFERENCE_TYPE
4961                    || TREE_CODE (target_type) == POINTER_TYPE)
4962                   && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4963                       || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4964                 type = TREE_TYPE (TREE_TYPE (target_type));
4965 	      else if (processing_template_decl)
4966 		/* Within a template finish_call_expr doesn't resolve
4967 		   CALL_EXPR_FN, so even though this decltype isn't really
4968 		   dependent let's defer resolving it.  */
4969 		goto treat_as_dependent;
4970               else
4971                 sorry ("unable to determine the declared type of expression %<%E%>",
4972                        expr);
4973             }
4974         }
4975       else
4976         {
4977           type = is_bitfield_expr_with_lowered_type (expr);
4978           if (type)
4979             {
4980               /* Bitfields are special, because their type encodes the
4981                  number of bits they store.  If the expression referenced a
4982                  bitfield, TYPE now has the declared type of that
4983                  bitfield.  */
4984               type = cp_build_qualified_type (type,
4985                                               cp_type_quals (TREE_TYPE (expr)));
4986 
4987               if (real_lvalue_p (expr))
4988                 type = build_reference_type (type);
4989             }
4990 	  /* Within a lambda-expression:
4991 
4992 	     Every occurrence of decltype((x)) where x is a possibly
4993 	     parenthesized id-expression that names an entity of
4994 	     automatic storage duration is treated as if x were
4995 	     transformed into an access to a corresponding data member
4996 	     of the closure type that would have been declared if x
4997 	     were a use of the denoted entity.  */
4998 	  else if (outer_automatic_var_p (expr)
4999 		   && current_function_decl
5000 		   && LAMBDA_FUNCTION_P (current_function_decl))
5001 	    type = capture_decltype (expr);
5002           else
5003             {
5004               /* Otherwise, where T is the type of e, if e is an lvalue,
5005                  decltype(e) is defined as T&, otherwise decltype(e) is
5006                  defined as T.  */
5007               type = TREE_TYPE (expr);
5008               if (type == error_mark_node)
5009                 return error_mark_node;
5010               else if (expr == current_class_ptr)
5011                 /* If the expression is just "this", we want the
5012                    cv-unqualified pointer for the "this" type.  */
5013                 type = TYPE_MAIN_VARIANT (type);
5014               else if (real_lvalue_p (expr))
5015                 {
5016                   if (TREE_CODE (type) != REFERENCE_TYPE
5017 		      || TYPE_REF_IS_RVALUE (type))
5018                     type = build_reference_type (non_reference (type));
5019                 }
5020               else
5021                 type = non_reference (type);
5022             }
5023         }
5024     }
5025 
5026   if (!type || type == unknown_type_node)
5027     {
5028       error ("type of %qE is unknown", expr);
5029       return error_mark_node;
5030     }
5031 
5032   return type;
5033 }
5034 
5035 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or
5036    __has_nothrow_copy, depending on assign_p.  */
5037 
5038 static bool
5039 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
5040 {
5041   tree fns;
5042 
5043   if (assign_p)
5044     {
5045       int ix;
5046       ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5047       if (ix < 0)
5048 	return false;
5049       fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
5050     }
5051   else if (TYPE_HAS_INIT_REF (type))
5052     {
5053       /* If construction of the copy constructor was postponed, create
5054 	 it now.  */
5055       if (CLASSTYPE_LAZY_COPY_CTOR (type))
5056 	lazily_declare_fn (sfk_copy_constructor, type);
5057       if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5058 	lazily_declare_fn (sfk_move_constructor, type);
5059       fns = CLASSTYPE_CONSTRUCTORS (type);
5060     }
5061   else
5062     return false;
5063 
5064   for (; fns; fns = OVL_NEXT (fns))
5065     {
5066       tree fn = OVL_CURRENT (fns);
5067 
5068       if (assign_p)
5069 	{
5070 	  if (copy_fn_p (fn) == 0)
5071 	    continue;
5072 	}
5073       else if (copy_fn_p (fn) <= 0)
5074 	continue;
5075 
5076       if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5077 	return false;
5078     }
5079 
5080   return true;
5081 }
5082 
5083 /* Actually evaluates the trait.  */
5084 
5085 static bool
5086 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5087 {
5088   enum tree_code type_code1;
5089   tree t;
5090 
5091   type_code1 = TREE_CODE (type1);
5092 
5093   switch (kind)
5094     {
5095     case CPTK_HAS_NOTHROW_ASSIGN:
5096       type1 = strip_array_types (type1);
5097       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5098 	      && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5099 		  || (CLASS_TYPE_P (type1)
5100 		      && classtype_has_nothrow_assign_or_copy_p (type1,
5101 								 true))));
5102 
5103     case CPTK_HAS_TRIVIAL_ASSIGN:
5104       /* ??? The standard seems to be missing the "or array of such a class
5105 	 type" wording for this trait.  */
5106       type1 = strip_array_types (type1);
5107       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5108 	      && (trivial_type_p (type1)
5109 		    || (CLASS_TYPE_P (type1)
5110 			&& TYPE_HAS_TRIVIAL_ASSIGN_REF (type1))));
5111 
5112     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5113       type1 = strip_array_types (type1);
5114       return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5115 	      || (CLASS_TYPE_P (type1)
5116 		  && (t = locate_ctor (type1, NULL))
5117 		  && TYPE_NOTHROW_P (TREE_TYPE (t))));
5118 
5119     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5120       type1 = strip_array_types (type1);
5121       return (trivial_type_p (type1)
5122 	      || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5123 
5124     case CPTK_HAS_NOTHROW_COPY:
5125       type1 = strip_array_types (type1);
5126       return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5127 	      || (CLASS_TYPE_P (type1)
5128 		  && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5129 
5130     case CPTK_HAS_TRIVIAL_COPY:
5131       /* ??? The standard seems to be missing the "or array of such a class
5132 	 type" wording for this trait.  */
5133       type1 = strip_array_types (type1);
5134       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5135 	      || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_INIT_REF (type1)));
5136 
5137     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5138       type1 = strip_array_types (type1);
5139       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5140 	      || (CLASS_TYPE_P (type1)
5141 		  && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5142 
5143     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5144       return (CLASS_TYPE_P (type1)
5145 	      && (t = locate_dtor (type1, NULL)) && DECL_VIRTUAL_P (t));
5146 
5147     case CPTK_IS_ABSTRACT:
5148       return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5149 
5150     case CPTK_IS_BASE_OF:
5151       return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5152 	      && DERIVED_FROM_P (type1, type2));
5153 
5154     case CPTK_IS_CLASS:
5155       return (NON_UNION_CLASS_TYPE_P (type1));
5156 
5157     case CPTK_IS_CONVERTIBLE_TO:
5158       /* TODO  */
5159       return false;
5160 
5161     case CPTK_IS_EMPTY:
5162       return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5163 
5164     case CPTK_IS_ENUM:
5165       return (type_code1 == ENUMERAL_TYPE);
5166 
5167     case CPTK_IS_POD:
5168       return (pod_type_p (type1));
5169 
5170     case CPTK_IS_POLYMORPHIC:
5171       return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5172 
5173     case CPTK_IS_STD_LAYOUT:
5174       return (std_layout_type_p (type1));
5175 
5176     case CPTK_IS_TRIVIAL:
5177       return (trivial_type_p (type1));
5178 
5179     case CPTK_IS_UNION:
5180       return (type_code1 == UNION_TYPE);
5181 
5182     default:
5183       gcc_unreachable ();
5184       return false;
5185     }
5186 }
5187 
5188 /* Returns true if TYPE is a complete type, an array of unknown bound,
5189    or (possibly cv-qualified) void, returns false otherwise.  */
5190 
5191 static bool
5192 check_trait_type (tree type)
5193 {
5194   if (COMPLETE_TYPE_P (type))
5195     return true;
5196 
5197   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
5198     return true;
5199 
5200   if (VOID_TYPE_P (type))
5201     return true;
5202 
5203   return false;
5204 }
5205 
5206 /* Process a trait expression.  */
5207 
5208 tree
5209 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5210 {
5211   gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5212 	      || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5213 	      || kind == CPTK_HAS_NOTHROW_COPY
5214 	      || kind == CPTK_HAS_TRIVIAL_ASSIGN
5215 	      || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5216 	      || kind == CPTK_HAS_TRIVIAL_COPY
5217 	      || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5218 	      || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5219 	      || kind == CPTK_IS_ABSTRACT
5220 	      || kind == CPTK_IS_BASE_OF
5221 	      || kind == CPTK_IS_CLASS
5222 	      || kind == CPTK_IS_CONVERTIBLE_TO
5223 	      || kind == CPTK_IS_EMPTY
5224 	      || kind == CPTK_IS_ENUM
5225 	      || kind == CPTK_IS_POD
5226 	      || kind == CPTK_IS_POLYMORPHIC
5227 	      || kind == CPTK_IS_STD_LAYOUT
5228 	      || kind == CPTK_IS_TRIVIAL
5229 	      || kind == CPTK_IS_UNION);
5230 
5231   if (kind == CPTK_IS_CONVERTIBLE_TO)
5232     {
5233       sorry ("__is_convertible_to");
5234       return error_mark_node;
5235     }
5236 
5237   if (type1 == error_mark_node
5238       || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5239 	  && type2 == error_mark_node))
5240     return error_mark_node;
5241 
5242   if (processing_template_decl)
5243     {
5244       tree trait_expr = make_node (TRAIT_EXPR);
5245       TREE_TYPE (trait_expr) = boolean_type_node;
5246       TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5247       TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5248       TRAIT_EXPR_KIND (trait_expr) = kind;
5249       return trait_expr;
5250     }
5251 
5252   complete_type (type1);
5253   if (type2)
5254     complete_type (type2);
5255 
5256   switch (kind)
5257     {
5258     case CPTK_HAS_NOTHROW_ASSIGN:
5259     case CPTK_HAS_TRIVIAL_ASSIGN:
5260     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5261     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5262     case CPTK_HAS_NOTHROW_COPY:
5263     case CPTK_HAS_TRIVIAL_COPY:
5264     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5265     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5266     case CPTK_IS_ABSTRACT:
5267     case CPTK_IS_EMPTY:
5268     case CPTK_IS_POD:
5269     case CPTK_IS_POLYMORPHIC:
5270     case CPTK_IS_STD_LAYOUT:
5271     case CPTK_IS_TRIVIAL:
5272       if (!check_trait_type (type1))
5273 	{
5274 	  error ("incomplete type %qT not allowed", type1);
5275 	  return error_mark_node;
5276 	}
5277       break;
5278 
5279     case CPTK_IS_BASE_OF:
5280       if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5281 	  && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5282 	  && !COMPLETE_TYPE_P (type2))
5283 	{
5284 	  error ("incomplete type %qT not allowed", type2);
5285 	  return error_mark_node;
5286 	}
5287       break;
5288 
5289     case CPTK_IS_CLASS:
5290     case CPTK_IS_ENUM:
5291     case CPTK_IS_UNION:
5292       break;
5293 
5294     case CPTK_IS_CONVERTIBLE_TO:
5295     default:
5296       gcc_unreachable ();
5297     }
5298 
5299   return (trait_expr_value (kind, type1, type2)
5300 	  ? boolean_true_node : boolean_false_node);
5301 }
5302 
5303 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5304    which is ignored for C++.  */
5305 
5306 void
5307 set_float_const_decimal64 (void)
5308 {
5309 }
5310 
5311 void
5312 clear_float_const_decimal64 (void)
5313 {
5314 }
5315 
5316 bool
5317 float_const_decimal64_p (void)
5318 {
5319   return 0;
5320 }
5321 
5322 /* Return true if T is a literal type.   */
5323 
5324 bool
5325 literal_type_p (tree t)
5326 {
5327   if (SCALAR_TYPE_P (t))
5328     return true;
5329   if (CLASS_TYPE_P (t))
5330     return CLASSTYPE_LITERAL_P (t);
5331   if (TREE_CODE (t) == ARRAY_TYPE)
5332     return literal_type_p (strip_array_types (t));
5333   return false;
5334 }
5335 
5336 
5337 /* If DECL is a variable declared `constexpr', require its type
5338    be literal.  Return the DECL if OK, otherwise NULL.  */
5339 
5340 tree
5341 ensure_literal_type_for_constexpr_object (tree decl)
5342 {
5343   tree type = TREE_TYPE (decl);
5344   if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5345       && !processing_template_decl && !literal_type_p (type))
5346     {
5347       error ("the type %qT of constexpr variable %qD is not literal",
5348              type, decl);
5349       return NULL;
5350     }
5351   return decl;
5352 }
5353 
5354 /* Return non-null if FUN certainly designates a valid constexpr function
5355    declaration.  Otherwise return NULL.  Issue appropriate diagnostics
5356    if necessary.  Note that we only check the declaration, not the body
5357    of the function.  */
5358 
5359 tree
5360 validate_constexpr_fundecl (tree fun)
5361 {
5362   tree rettype = NULL;
5363   tree parm = NULL;
5364 
5365   /* Don't bother if FUN is not marked constexpr.  */
5366   if (!DECL_DECLARED_CONSTEXPR_P (fun))
5367     return NULL;
5368 
5369   /* For a function template, we have absolutely no guarantee that all
5370      instantiations will be constexpr.  */
5371   if (TREE_CODE (fun) == TEMPLATE_DECL)
5372     return NULL;
5373 
5374   parm = FUNCTION_FIRST_USER_PARM (fun);
5375   for (; parm != NULL; parm = TREE_CHAIN (parm))
5376     {
5377       tree type = TREE_TYPE (parm);
5378       if (dependent_type_p (type))
5379         return NULL;
5380       if (!literal_type_p (type))
5381         {
5382            error ("parameter %q#D is not of literal type", parm);
5383           return NULL;
5384         }
5385     }
5386 
5387   if (DECL_CONSTRUCTOR_P (fun))
5388     return fun;
5389 
5390   rettype = TREE_TYPE (TREE_TYPE (fun));
5391   if (dependent_type_p (rettype))
5392     return NULL;
5393   if (!literal_type_p (rettype))
5394     {
5395       error ("return type %qT of function %qD is not a literal type",
5396              TREE_TYPE (TREE_TYPE (fun)), fun);
5397       return NULL;
5398     }
5399   return fun;
5400 }
5401 
5402 
5403 /* Constructor for a lambda expression.  */
5404 
5405 tree
5406 build_lambda_expr (void)
5407 {
5408   tree lambda = make_node (LAMBDA_EXPR);
5409   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
5410   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
5411   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
5412   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
5413   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
5414   return lambda;
5415 }
5416 
5417 /* Create the closure object for a LAMBDA_EXPR.  */
5418 
5419 tree
5420 build_lambda_object (tree lambda_expr)
5421 {
5422   /* Build aggregate constructor call.
5423      - cp_parser_braced_list
5424      - cp_parser_functional_cast  */
5425   VEC(constructor_elt,gc) *elts = NULL;
5426   tree node, expr, type;
5427   location_t saved_loc;
5428 
5429   if (processing_template_decl)
5430     return lambda_expr;
5431 
5432   /* Make sure any error messages refer to the lambda-introducer.  */
5433   saved_loc = input_location;
5434   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
5435 
5436   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
5437        node;
5438        node = TREE_CHAIN (node))
5439     {
5440       tree field = TREE_PURPOSE (node);
5441       tree val = TREE_VALUE (node);
5442 
5443       if (DECL_P (val))
5444 	mark_used (val);
5445 
5446       /* Mere mortals can't copy arrays with aggregate initialization, so
5447 	 do some magic to make it work here.  */
5448       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
5449 	val = build_array_copy (val);
5450       else if (DECL_NORMAL_CAPTURE_P (field)
5451 	       && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
5452 	{
5453 	  /* "the entities that are captured by copy are used to
5454 	     direct-initialize each corresponding non-static data
5455 	     member of the resulting closure object."
5456 
5457 	     There's normally no way to express direct-initialization
5458 	     from an element of a CONSTRUCTOR, so we build up a special
5459 	     TARGET_EXPR to bypass the usual copy-initialization.  */
5460 	  val = force_rvalue (val);
5461 	  if (TREE_CODE (val) == TARGET_EXPR)
5462 	    TARGET_EXPR_DIRECT_INIT_P (val) = true;
5463 	}
5464 
5465       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
5466     }
5467 
5468   expr = build_constructor (init_list_type_node, elts);
5469   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
5470 
5471   /* N2927: "[The closure] class type is not an aggregate."
5472      But we briefly treat it as an aggregate to make this simpler.  */
5473   type = TREE_TYPE (lambda_expr);
5474   CLASSTYPE_NON_AGGREGATE (type) = 0;
5475   expr = finish_compound_literal (type, expr);
5476   CLASSTYPE_NON_AGGREGATE (type) = 1;
5477 
5478   input_location = saved_loc;
5479   return expr;
5480 }
5481 
5482 /* Return an initialized RECORD_TYPE for LAMBDA.
5483    LAMBDA must have its explicit captures already.  */
5484 
5485 tree
5486 begin_lambda_type (tree lambda)
5487 {
5488   tree type;
5489 
5490   {
5491     /* Unique name.  This is just like an unnamed class, but we cannot use
5492        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
5493     tree name;
5494     name = make_lambda_name ();
5495 
5496     /* Create the new RECORD_TYPE for this lambda.  */
5497     type = xref_tag (/*tag_code=*/record_type,
5498                      name,
5499                      /*scope=*/ts_within_enclosing_non_class,
5500                      /*template_header_p=*/false);
5501   }
5502 
5503   /* Designate it as a struct so that we can use aggregate initialization.  */
5504   CLASSTYPE_DECLARED_CLASS (type) = false;
5505 
5506   /* Clear base types.  */
5507   xref_basetypes (type, /*bases=*/NULL_TREE);
5508 
5509   /* Start the class.  */
5510   type = begin_class_definition (type, /*attributes=*/NULL_TREE);
5511 
5512   /* Cross-reference the expression and the type.  */
5513   TREE_TYPE (lambda) = type;
5514   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
5515 
5516   return type;
5517 }
5518 
5519 /* Returns the type to use for the return type of the operator() of a
5520    closure class.  */
5521 
5522 tree
5523 lambda_return_type (tree expr)
5524 {
5525   tree type;
5526   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5527     {
5528       warning (0, "cannot deduce lambda return type from a braced-init-list");
5529       return void_type_node;
5530     }
5531   if (type_dependent_expression_p (expr))
5532     {
5533       type = cxx_make_type (DECLTYPE_TYPE);
5534       DECLTYPE_TYPE_EXPR (type) = expr;
5535       DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
5536       SET_TYPE_STRUCTURAL_EQUALITY (type);
5537     }
5538   else
5539     type = type_decays_to (unlowered_expr_type (expr));
5540   return type;
5541 }
5542 
5543 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
5544    closure type.  */
5545 
5546 tree
5547 lambda_function (tree lambda)
5548 {
5549   tree type;
5550   if (TREE_CODE (lambda) == LAMBDA_EXPR)
5551     type = TREE_TYPE (lambda);
5552   else
5553     type = lambda;
5554   gcc_assert (LAMBDA_TYPE_P (type));
5555   /* Don't let debug_tree cause instantiation.  */
5556   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
5557     return NULL_TREE;
5558   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
5559 			  /*protect=*/0, /*want_type=*/false);
5560   if (lambda)
5561     lambda = BASELINK_FUNCTIONS (lambda);
5562   return lambda;
5563 }
5564 
5565 /* Returns the type to use for the FIELD_DECL corresponding to the
5566    capture of EXPR.
5567    The caller should add REFERENCE_TYPE for capture by reference.  */
5568 
5569 tree
5570 lambda_capture_field_type (tree expr)
5571 {
5572   tree type;
5573   if (type_dependent_expression_p (expr))
5574     {
5575       type = cxx_make_type (DECLTYPE_TYPE);
5576       DECLTYPE_TYPE_EXPR (type) = expr;
5577       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
5578       SET_TYPE_STRUCTURAL_EQUALITY (type);
5579     }
5580   else
5581     type = non_reference (unlowered_expr_type (expr));
5582   return type;
5583 }
5584 
5585 /* Recompute the return type for LAMBDA with body of the form:
5586      { return EXPR ; }  */
5587 
5588 void
5589 apply_lambda_return_type (tree lambda, tree return_type)
5590 {
5591   tree fco = lambda_function (lambda);
5592   tree result;
5593 
5594   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
5595 
5596   /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
5597      it would interfere with instantiating the closure type.  */
5598   if (dependent_type_p (return_type))
5599     return;
5600   if (return_type == error_mark_node)
5601     return;
5602 
5603   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
5604      TREE_TYPE (METHOD_TYPE)   == return-type  */
5605   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
5606 
5607   result = DECL_RESULT (fco);
5608   if (result == NULL_TREE)
5609     return;
5610 
5611   /* We already have a DECL_RESULT from start_preparsed_function.
5612      Now we need to redo the work it and allocate_struct_function
5613      did to reflect the new type.  */
5614   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
5615 		       TYPE_MAIN_VARIANT (return_type));
5616   DECL_ARTIFICIAL (result) = 1;
5617   DECL_IGNORED_P (result) = 1;
5618   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
5619                                result);
5620 
5621   DECL_RESULT (fco) = result;
5622 
5623   if (!processing_template_decl && aggregate_value_p (result, fco))
5624     {
5625 #ifdef PCC_STATIC_STRUCT_RETURN
5626       cfun->returns_pcc_struct = 1;
5627 #endif
5628       cfun->returns_struct = 1;
5629     }
5630 
5631 }
5632 
5633 /* DECL is a local variable or parameter from the surrounding scope of a
5634    lambda-expression.  Returns the decltype for a use of the capture field
5635    for DECL even if it hasn't been captured yet.  */
5636 
5637 static tree
5638 capture_decltype (tree decl)
5639 {
5640   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
5641   /* FIXME do lookup instead of list walk? */
5642   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
5643   tree type;
5644 
5645   if (cap)
5646     type = TREE_TYPE (TREE_PURPOSE (cap));
5647   else
5648     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
5649       {
5650       case CPLD_NONE:
5651 	error ("%qD is not captured", decl);
5652 	return error_mark_node;
5653 
5654       case CPLD_COPY:
5655 	type = TREE_TYPE (decl);
5656 	if (TREE_CODE (type) == REFERENCE_TYPE
5657 	    && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
5658 	  type = TREE_TYPE (type);
5659 	break;
5660 
5661       case CPLD_REFERENCE:
5662 	type = TREE_TYPE (decl);
5663 	if (TREE_CODE (type) != REFERENCE_TYPE)
5664 	  type = build_reference_type (TREE_TYPE (decl));
5665 	break;
5666 
5667       default:
5668 	gcc_unreachable ();
5669       }
5670 
5671   if (TREE_CODE (type) != REFERENCE_TYPE)
5672     {
5673       if (!LAMBDA_EXPR_MUTABLE_P (lam))
5674 	type = cp_build_qualified_type (type, (TYPE_QUALS (type)
5675 					       |TYPE_QUAL_CONST));
5676       type = build_reference_type (type);
5677     }
5678   return type;
5679 }
5680 
5681 /* From an ID and INITIALIZER, create a capture (by reference if
5682    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
5683    and return it.  */
5684 
5685 tree
5686 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
5687 	     bool explicit_init_p)
5688 {
5689   tree type;
5690   tree member;
5691 
5692   type = lambda_capture_field_type (initializer);
5693   if (by_reference_p)
5694     {
5695       type = build_reference_type (type);
5696       if (!real_lvalue_p (initializer))
5697 	error ("cannot capture %qE by reference", initializer);
5698     }
5699 
5700   /* Make member variable.  */
5701   member = build_lang_decl (FIELD_DECL, id, type);
5702   if (!explicit_init_p)
5703     /* Normal captures are invisible to name lookup but uses are replaced
5704        with references to the capture field; we implement this by only
5705        really making them invisible in unevaluated context; see
5706        qualify_lookup.  For now, let's make explicitly initialized captures
5707        always visible.  */
5708     DECL_NORMAL_CAPTURE_P (member) = true;
5709 
5710   /* Add it to the appropriate closure class if we've started it.  */
5711   if (current_class_type && current_class_type == TREE_TYPE (lambda))
5712     finish_member_declaration (member);
5713 
5714   LAMBDA_EXPR_CAPTURE_LIST (lambda)
5715     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
5716 
5717   if (id == get_identifier ("__this"))
5718     {
5719       if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
5720         error ("already captured %<this%> in lambda expression");
5721       LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
5722     }
5723 
5724   return member;
5725 }
5726 
5727 /* Register all the capture members on the list CAPTURES, which is the
5728    LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
5729 
5730 void register_capture_members (tree captures)
5731 {
5732   if (captures)
5733     {
5734       register_capture_members (TREE_CHAIN (captures));
5735       finish_member_declaration (TREE_PURPOSE (captures));
5736     }
5737 }
5738 
5739 /* Given a FIELD_DECL decl belonging to a closure type, return a
5740    COMPONENT_REF of it relative to the 'this' parameter of the op() for
5741    that type.  */
5742 
5743 static tree
5744 thisify_lambda_field (tree decl)
5745 {
5746   tree context = lambda_function (DECL_CONTEXT (decl));
5747   tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
5748 				       RO_NULL,
5749 				       tf_warning_or_error);
5750   return finish_non_static_data_member (decl, object,
5751 					/*qualifying_scope*/NULL_TREE);
5752 }
5753 
5754 /* Similar to add_capture, except this works on a stack of nested lambdas.
5755    BY_REFERENCE_P in this case is derived from the default capture mode.
5756    Returns the capture for the lambda at the bottom of the stack.  */
5757 
5758 tree
5759 add_default_capture (tree lambda_stack, tree id, tree initializer)
5760 {
5761   bool this_capture_p = (id == get_identifier ("__this"));
5762 
5763   tree member = NULL_TREE;
5764 
5765   tree saved_class_type = current_class_type;
5766 
5767   tree node;
5768 
5769   for (node = lambda_stack;
5770        node;
5771        node = TREE_CHAIN (node))
5772     {
5773       tree lambda = TREE_VALUE (node);
5774 
5775       current_class_type = TREE_TYPE (lambda);
5776       member = add_capture (lambda,
5777                             id,
5778                             initializer,
5779                             /*by_reference_p=*/
5780 			    (!this_capture_p
5781 			     && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
5782 				 == CPLD_REFERENCE)),
5783 			    /*explicit_init_p=*/false);
5784       initializer = thisify_lambda_field (member);
5785     }
5786 
5787   current_class_type = saved_class_type;
5788 
5789   return member;
5790 }
5791 
5792 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
5793    INDIRECT_REF, possibly adding it through default capturing.  */
5794 
5795 tree
5796 lambda_expr_this_capture (tree lambda)
5797 {
5798   tree result;
5799 
5800   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5801 
5802   /* Try to default capture 'this' if we can.  */
5803   if (!this_capture
5804       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
5805     {
5806       tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
5807       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
5808       tree init = NULL_TREE;
5809 
5810       /* If we are in a lambda function, we can move out until we hit:
5811            1. a non-lambda function,
5812            2. a lambda function capturing 'this', or
5813            3. a non-default capturing lambda function.  */
5814       while (LAMBDA_FUNCTION_P (containing_function))
5815         {
5816           tree lambda
5817             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
5818 
5819           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
5820 	    {
5821 	      /* An outer lambda has already captured 'this'.  */
5822 	      tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5823 	      init = thisify_lambda_field (cap);
5824 	      break;
5825 	    }
5826 
5827 	  if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
5828 	    /* An outer lambda won't let us capture 'this'.  */
5829 	    break;
5830 
5831           lambda_stack = tree_cons (NULL_TREE,
5832                                     lambda,
5833                                     lambda_stack);
5834 
5835           containing_function = decl_function_context (containing_function);
5836         }
5837 
5838       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
5839 	  && !LAMBDA_FUNCTION_P (containing_function))
5840 	/* First parameter is 'this'.  */
5841 	init = DECL_ARGUMENTS (containing_function);
5842 
5843       if (init)
5844 	this_capture = add_default_capture (lambda_stack,
5845 					    /*id=*/get_identifier ("__this"),
5846 					    init);
5847     }
5848 
5849   if (!this_capture)
5850     {
5851       error ("%<this%> was not captured for this lambda function");
5852       result = error_mark_node;
5853     }
5854   else
5855     {
5856       /* To make sure that current_class_ref is for the lambda.  */
5857       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
5858 
5859       result = finish_non_static_data_member (this_capture,
5860                                               current_class_ref,
5861                                               /*qualifying_scope=*/NULL_TREE);
5862 
5863       /* If 'this' is captured, each use of 'this' is transformed into an
5864 	 access to the corresponding unnamed data member of the closure
5865 	 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
5866 	 ensures that the transformed expression is an rvalue. ] */
5867       result = rvalue (result);
5868     }
5869 
5870   return result;
5871 }
5872 
5873 /* Returns the method basetype of the innermost non-lambda function, or
5874    NULL_TREE if none.  */
5875 
5876 tree
5877 nonlambda_method_basetype (void)
5878 {
5879   tree fn, type;
5880   if (!current_class_ref)
5881     return NULL_TREE;
5882 
5883   type = current_class_type;
5884   if (!LAMBDA_TYPE_P (type))
5885     return type;
5886 
5887   /* Find the nearest enclosing non-lambda function.  */
5888   fn = TYPE_NAME (type);
5889   do
5890     fn = decl_function_context (fn);
5891   while (fn && LAMBDA_FUNCTION_P (fn));
5892 
5893   if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5894     return NULL_TREE;
5895 
5896   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
5897 }
5898 
5899 /* If the closure TYPE has a static op(), also add a conversion to function
5900    pointer.  */
5901 
5902 void
5903 maybe_add_lambda_conv_op (tree type)
5904 {
5905   bool nested = (current_function_decl != NULL_TREE);
5906   tree callop = lambda_function (type);
5907   tree rettype, name, fntype, fn, body, compound_stmt;
5908   tree thistype, stattype, statfn, convfn, call, arg;
5909   VEC (tree, gc) *argvec;
5910 
5911   if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
5912     return;
5913 
5914   stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
5915 				  FUNCTION_ARG_CHAIN (callop));
5916 
5917   /* First build up the conversion op.  */
5918 
5919   rettype = build_pointer_type (stattype);
5920   name = mangle_conv_op_name_for_type (rettype);
5921   thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
5922   fntype = build_method_type_directly (thistype, rettype, void_list_node);
5923   fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
5924   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5925 
5926   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5927       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5928     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5929 
5930   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
5931   grokclassfn (type, fn, NO_SPECIAL);
5932   set_linkage_according_to_type (type, fn);
5933   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5934   DECL_IN_AGGR_P (fn) = 1;
5935   DECL_ARTIFICIAL (fn) = 1;
5936   DECL_NOT_REALLY_EXTERN (fn) = 1;
5937   DECL_DECLARED_INLINE_P (fn) = 1;
5938   DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
5939   if (nested)
5940     DECL_INTERFACE_KNOWN (fn) = 1;
5941 
5942   add_method (type, fn, NULL_TREE);
5943 
5944   /* Generic thunk code fails for varargs; we'll complain in mark_used if
5945      the conversion op is used.  */
5946   if (varargs_function_p (callop))
5947     {
5948       DECL_DELETED_FN (fn) = 1;
5949       return;
5950     }
5951 
5952   /* Now build up the thunk to be returned.  */
5953 
5954   name = get_identifier ("_FUN");
5955   fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
5956   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5957   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5958       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5959     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5960   grokclassfn (type, fn, NO_SPECIAL);
5961   set_linkage_according_to_type (type, fn);
5962   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5963   DECL_IN_AGGR_P (fn) = 1;
5964   DECL_ARTIFICIAL (fn) = 1;
5965   DECL_NOT_REALLY_EXTERN (fn) = 1;
5966   DECL_DECLARED_INLINE_P (fn) = 1;
5967   DECL_STATIC_FUNCTION_P (fn) = 1;
5968   DECL_ARGUMENTS (fn) = copy_list (TREE_CHAIN (DECL_ARGUMENTS (callop)));
5969   for (arg = DECL_ARGUMENTS (fn); arg; arg = TREE_CHAIN (arg))
5970     DECL_CONTEXT (arg) = fn;
5971   if (nested)
5972     DECL_INTERFACE_KNOWN (fn) = 1;
5973 
5974   add_method (type, fn, NULL_TREE);
5975 
5976   if (nested)
5977     push_function_context ();
5978 
5979   /* Generate the body of the thunk.  */
5980 
5981   start_preparsed_function (statfn, NULL_TREE,
5982 			    SF_PRE_PARSED | SF_INCLASS_INLINE);
5983   if (DECL_ONE_ONLY (statfn))
5984     {
5985       /* Put the thunk in the same comdat group as the call op.  */
5986       struct cgraph_node *callop_node, *thunk_node;
5987       DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
5988       callop_node = cgraph_node (callop);
5989       thunk_node = cgraph_node (statfn);
5990       gcc_assert (callop_node->same_comdat_group == NULL);
5991       gcc_assert (thunk_node->same_comdat_group == NULL);
5992       callop_node->same_comdat_group = thunk_node;
5993       thunk_node->same_comdat_group = callop_node;
5994     }
5995   body = begin_function_body ();
5996   compound_stmt = begin_compound_stmt (0);
5997 
5998   arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
5999 		null_pointer_node);
6000   argvec = make_tree_vector ();
6001   VEC_quick_push (tree, argvec, arg);
6002   for (arg = DECL_ARGUMENTS (statfn); arg; arg = TREE_CHAIN (arg))
6003     VEC_safe_push (tree, gc, argvec, arg);
6004   call = build_call_a (callop, VEC_length (tree, argvec),
6005 		       VEC_address (tree, argvec));
6006   CALL_FROM_THUNK_P (call) = 1;
6007   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
6008     call = build_cplus_new (TREE_TYPE (call), call);
6009   call = convert_from_reference (call);
6010   finish_return_stmt (call);
6011 
6012   finish_compound_stmt (compound_stmt);
6013   finish_function_body (body);
6014 
6015   expand_or_defer_fn (finish_function (2));
6016 
6017   /* Generate the body of the conversion op.  */
6018 
6019   start_preparsed_function (convfn, NULL_TREE,
6020 			    SF_PRE_PARSED | SF_INCLASS_INLINE);
6021   body = begin_function_body ();
6022   compound_stmt = begin_compound_stmt (0);
6023 
6024   finish_return_stmt (decay_conversion (statfn));
6025 
6026   finish_compound_stmt (compound_stmt);
6027   finish_function_body (body);
6028 
6029   expand_or_defer_fn (finish_function (2));
6030 
6031   if (nested)
6032     pop_function_context ();
6033 }
6034 #include "gt-cp-semantics.h"
6035