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
23You should have received a copy of the GNU General Public License
24along 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
56static tree maybe_convert_cond (tree);
57static tree finalize_nrv_r (tree *, int *, void *);
58static tree capture_decltype (tree);
59static 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
113typedef 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;
133DEF_VEC_O (deferred_access);
134DEF_VEC_ALLOC_O (deferred_access,gc);
135
136/* Data for deferred access checking.  */
137static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
138static 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
143void
144push_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
163void
164resume_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
173void
174stop_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
184void
185pop_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
198VEC (deferred_access_check,gc)*
199get_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
212void
213pop_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
265void
266perform_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
294void
295perform_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
303void
304perform_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
353int
354stmts_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
363tree
364add_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
387stmt_tree
388current_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
397static tree
398maybe_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
410static tree
411maybe_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
422void
423add_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
434tree
435do_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
455static tree
456do_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
468void
469push_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
482static void
483begin_cond (tree *cond_p)
484{
485  if (processing_template_decl)
486    *cond_p = push_stmt_list ();
487}
488
489/* Finish such a conditional.  */
490
491static void
492finish_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
516static void
517simplify_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
537tree
538finish_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
571static tree
572maybe_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
602tree
603finish_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
643tree
644begin_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
657void
658finish_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
668tree
669finish_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
677void
678begin_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
686void
687finish_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
694void
695finish_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
706tree
707begin_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
720void
721finish_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
729void
730finish_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
739tree
740begin_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
750void
751finish_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
766void
767finish_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
777tree
778finish_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
815tree
816begin_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
835void
836finish_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
848void
849finish_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
858void
859finish_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
890void
891finish_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
908tree
909finish_break_stmt (void)
910{
911  return add_stmt (build_stmt (input_location, BREAK_STMT));
912}
913
914/* Finish a continue-statement.  */
915
916tree
917finish_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
925tree
926begin_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
941void
942finish_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
979void
980finish_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
997tree
998begin_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
1010tree
1011begin_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
1024void
1025finish_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
1034void
1035finish_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
1043void
1044finish_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
1052void
1053finish_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
1064void
1065finish_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
1075void
1076finish_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
1085tree
1086begin_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
1104void
1105finish_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
1128void
1129finish_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
1143tree
1144begin_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
1181void
1182finish_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
1207tree
1208finish_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
1321tree
1322finish_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
1338void
1339finish_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
1352void
1353finish_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
1360void
1361finish_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
1370void
1371finish_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
1401tree
1402finish_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
1422tree
1423finish_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
1539void
1540add_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
1569void
1570check_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
1647tree
1648finish_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
1720tree
1721begin_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
1731tree
1732finish_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
1793tree
1794finish_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
1831tree
1832stmt_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
1851bool
1852empty_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
1882tree
1883perform_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
1942tree
1943finish_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
2094tree
2095finish_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
2102tree
2103finish_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
2141tree
2142finish_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
2190tree
2191finish_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
2216tree
2217finish_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
2275tree
2276finish_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
2288void
2289finish_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
2304tree
2305finish_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
2319tree
2320finish_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
2343tree
2344check_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
2363tree
2364begin_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
2456void
2457finish_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
2560void
2561note_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
2576void
2577finish_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
2590tree
2591finish_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
2611tree
2612finish_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
2646void
2647qualified_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
2677tree
2678baselink_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
2704static bool
2705outer_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
2716static bool
2717outer_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.  */
2758tree
2759finish_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
3225tree
3226finish_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
3253tree
3254finish_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
3281void
3282simplify_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
3355void
3356emit_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
3391bool
3392expand_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
3473void
3474expand_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
3488struct 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
3497static tree
3498finalize_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
3555void
3556finalize_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
3579static tree
3580omp_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
3603bool
3604cxx_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
3700tree
3701finish_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
4019void
4020finish_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
4077tree
4078begin_omp_structured_block (void)
4079{
4080  return do_pushlevel (sk_omp);
4081}
4082
4083tree
4084finish_omp_structured_block (tree block)
4085{
4086  return do_poplevel (block);
4087}
4088
4089/* Similarly, except force the retention of the BLOCK.  */
4090
4091tree
4092begin_omp_parallel (void)
4093{
4094  keep_next_level (true);
4095  return begin_omp_structured_block ();
4096}
4097
4098tree
4099finish_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
4113tree
4114begin_omp_task (void)
4115{
4116  keep_next_level (true);
4117  return begin_omp_structured_block ();
4118}
4119
4120tree
4121finish_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
4138static bool
4139handle_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
4371tree
4372finish_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
4597void
4598finish_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
4634void
4635finish_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
4644void
4645finish_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
4654void
4655finish_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
4664void
4665init_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.  */
4673void
4674finish_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
4727tree
4728describable_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
4790tree
4791finish_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
5038static bool
5039classtype_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
5085static bool
5086trait_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
5191static bool
5192check_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
5208tree
5209finish_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
5306void
5307set_float_const_decimal64 (void)
5308{
5309}
5310
5311void
5312clear_float_const_decimal64 (void)
5313{
5314}
5315
5316bool
5317float_const_decimal64_p (void)
5318{
5319  return 0;
5320}
5321
5322/* Return true if T is a literal type.   */
5323
5324bool
5325literal_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
5340tree
5341ensure_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
5359tree
5360validate_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
5405tree
5406build_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
5419tree
5420build_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
5485tree
5486begin_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
5522tree
5523lambda_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
5546tree
5547lambda_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
5569tree
5570lambda_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
5588void
5589apply_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
5637static tree
5638capture_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
5685tree
5686add_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
5730void 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
5743static tree
5744thisify_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
5758tree
5759add_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
5795tree
5796lambda_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
5876tree
5877nonlambda_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
5902void
5903maybe_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