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
7   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 2, or (at your option)
16   any later version.
17
18   GCC is distributed in the hope that it will be useful, but
19   WITHOUT ANY WARRANTY; without even the implied warranty of
20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21   General Public License for more details.
22
23   You should have received a copy of the GNU General Public License
24   along with GCC; see the file COPYING.  If not, write to the Free
25   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
26   02110-1301, USA.  */
27
28#include "config.h"
29#include "system.h"
30#include "coretypes.h"
31#include "tm.h"
32#include "tree.h"
33#include "cp-tree.h"
34#include "c-common.h"
35#include "tree-inline.h"
36#include "tree-mudflap.h"
37#include "except.h"
38#include "toplev.h"
39#include "flags.h"
40#include "rtl.h"
41#include "expr.h"
42#include "output.h"
43#include "timevar.h"
44#include "debug.h"
45#include "diagnostic.h"
46#include "cgraph.h"
47#include "tree-iterator.h"
48#include "vec.h"
49#include "target.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.  Since the current g++ parser is
55   lacking in several respects, and will be reimplemented, we are
56   attempting to move most code that is not directly related to
57   parsing into this file; that will make implementing the new parser
58   much easier since it will be able to make use of these routines.  */
59
60static tree maybe_convert_cond (tree);
61static tree simplify_aggr_init_exprs_r (tree *, int *, void *);
62static void emit_associated_thunks (tree);
63static tree finalize_nrv_r (tree *, int *, void *);
64
65
66/* Deferred Access Checking Overview
67   ---------------------------------
68
69   Most C++ expressions and declarations require access checking
70   to be performed during parsing.  However, in several cases,
71   this has to be treated differently.
72
73   For member declarations, access checking has to be deferred
74   until more information about the declaration is known.  For
75   example:
76
77     class A {
78	 typedef int X;
79       public:
80	 X f();
81     };
82
83     A::X A::f();
84     A::X g();
85
86   When we are parsing the function return type `A::X', we don't
87   really know if this is allowed until we parse the function name.
88
89   Furthermore, some contexts require that access checking is
90   never performed at all.  These include class heads, and template
91   instantiations.
92
93   Typical use of access checking functions is described here:
94
95   1. When we enter a context that requires certain access checking
96      mode, the function `push_deferring_access_checks' is called with
97      DEFERRING argument specifying the desired mode.  Access checking
98      may be performed immediately (dk_no_deferred), deferred
99      (dk_deferred), or not performed (dk_no_check).
100
101   2. When a declaration such as a type, or a variable, is encountered,
102      the function `perform_or_defer_access_check' is called.  It
103      maintains a TREE_LIST of all deferred checks.
104
105   3. The global `current_class_type' or `current_function_decl' is then
106      setup by the parser.  `enforce_access' relies on these information
107      to check access.
108
109   4. Upon exiting the context mentioned in step 1,
110      `perform_deferred_access_checks' is called to check all declaration
111      stored in the TREE_LIST.   `pop_deferring_access_checks' is then
112      called to restore the previous access checking mode.
113
114      In case of parsing error, we simply call `pop_deferring_access_checks'
115      without `perform_deferred_access_checks'.  */
116
117typedef struct deferred_access GTY(())
118{
119  /* A TREE_LIST representing name-lookups for which we have deferred
120     checking access controls.  We cannot check the accessibility of
121     names used in a decl-specifier-seq until we know what is being
122     declared because code like:
123
124       class A {
125	 class B {};
126	 B* f();
127       }
128
129       A::B* A::f() { return 0; }
130
131     is valid, even though `A::B' is not generally accessible.
132
133     The TREE_PURPOSE of each node is the scope used to qualify the
134     name being looked up; the TREE_VALUE is the DECL to which the
135     name was resolved.  */
136  tree deferred_access_checks;
137
138  /* The current mode of access checks.  */
139  enum deferring_kind deferring_access_checks_kind;
140
141} deferred_access;
142DEF_VEC_O (deferred_access);
143DEF_VEC_ALLOC_O (deferred_access,gc);
144
145/* Data for deferred access checking.  */
146static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
147static GTY(()) unsigned deferred_access_no_check;
148
149/* Save the current deferred access states and start deferred
150   access checking iff DEFER_P is true.  */
151
152void
153push_deferring_access_checks (deferring_kind deferring)
154{
155  /* For context like template instantiation, access checking
156     disabling applies to all nested context.  */
157  if (deferred_access_no_check || deferring == dk_no_check)
158    deferred_access_no_check++;
159  else
160    {
161      deferred_access *ptr;
162
163      ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
164      ptr->deferred_access_checks = NULL_TREE;
165      ptr->deferring_access_checks_kind = deferring;
166    }
167}
168
169/* Resume deferring access checks again after we stopped doing
170   this previously.  */
171
172void
173resume_deferring_access_checks (void)
174{
175  if (!deferred_access_no_check)
176    VEC_last (deferred_access, deferred_access_stack)
177      ->deferring_access_checks_kind = dk_deferred;
178}
179
180/* Stop deferring access checks.  */
181
182void
183stop_deferring_access_checks (void)
184{
185  if (!deferred_access_no_check)
186    VEC_last (deferred_access, deferred_access_stack)
187      ->deferring_access_checks_kind = dk_no_deferred;
188}
189
190/* Discard the current deferred access checks and restore the
191   previous states.  */
192
193void
194pop_deferring_access_checks (void)
195{
196  if (deferred_access_no_check)
197    deferred_access_no_check--;
198  else
199    VEC_pop (deferred_access, deferred_access_stack);
200}
201
202/* Returns a TREE_LIST representing the deferred checks.
203   The TREE_PURPOSE of each node is the type through which the
204   access occurred; the TREE_VALUE is the declaration named.
205   */
206
207tree
208get_deferred_access_checks (void)
209{
210  if (deferred_access_no_check)
211    return NULL;
212  else
213    return (VEC_last (deferred_access, deferred_access_stack)
214	    ->deferred_access_checks);
215}
216
217/* Take current deferred checks and combine with the
218   previous states if we also defer checks previously.
219   Otherwise perform checks now.  */
220
221void
222pop_to_parent_deferring_access_checks (void)
223{
224  if (deferred_access_no_check)
225    deferred_access_no_check--;
226  else
227    {
228      tree checks;
229      deferred_access *ptr;
230
231      checks = (VEC_last (deferred_access, deferred_access_stack)
232		->deferred_access_checks);
233
234      VEC_pop (deferred_access, deferred_access_stack);
235      ptr = VEC_last (deferred_access, deferred_access_stack);
236      if (ptr->deferring_access_checks_kind == dk_no_deferred)
237	{
238	  /* Check access.  */
239	  for (; checks; checks = TREE_CHAIN (checks))
240	    enforce_access (TREE_PURPOSE (checks),
241			    TREE_VALUE (checks));
242	}
243      else
244	{
245	  /* Merge with parent.  */
246	  tree next;
247	  tree original = ptr->deferred_access_checks;
248
249	  for (; checks; checks = next)
250	    {
251	      tree probe;
252
253	      next = TREE_CHAIN (checks);
254
255	      for (probe = original; probe; probe = TREE_CHAIN (probe))
256		if (TREE_VALUE (probe) == TREE_VALUE (checks)
257		    && TREE_PURPOSE (probe) == TREE_PURPOSE (checks))
258		  goto found;
259	      /* Insert into parent's checks.  */
260	      TREE_CHAIN (checks) = ptr->deferred_access_checks;
261	      ptr->deferred_access_checks = checks;
262	    found:;
263	    }
264	}
265    }
266}
267
268/* Perform the access checks in CHECKS.  The TREE_PURPOSE of each node
269   is the BINFO indicating the qualifying scope used to access the
270   DECL node stored in the TREE_VALUE of the node.  */
271
272void
273perform_access_checks (tree checks)
274{
275  while (checks)
276    {
277      enforce_access (TREE_PURPOSE (checks),
278		      TREE_VALUE (checks));
279      checks = TREE_CHAIN (checks);
280    }
281}
282
283/* Perform the deferred access checks.
284
285   After performing the checks, we still have to keep the list
286   `deferred_access_stack->deferred_access_checks' since we may want
287   to check access for them again later in a different context.
288   For example:
289
290     class A {
291       typedef int X;
292       static X a;
293     };
294     A::X A::a, x;	// No error for `A::a', error for `x'
295
296   We have to perform deferred access of `A::X', first with `A::a',
297   next with `x'.  */
298
299void
300perform_deferred_access_checks (void)
301{
302  perform_access_checks (get_deferred_access_checks ());
303}
304
305/* Defer checking the accessibility of DECL, when looked up in
306   BINFO.  */
307
308void
309perform_or_defer_access_check (tree binfo, tree decl)
310{
311  tree check;
312  deferred_access *ptr;
313
314  /* Exit if we are in a context that no access checking is performed.
315     */
316  if (deferred_access_no_check)
317    return;
318
319  gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
320
321  ptr = VEC_last (deferred_access, deferred_access_stack);
322
323  /* If we are not supposed to defer access checks, just check now.  */
324  if (ptr->deferring_access_checks_kind == dk_no_deferred)
325    {
326      enforce_access (binfo, decl);
327      return;
328    }
329
330  /* See if we are already going to perform this check.  */
331  for (check = ptr->deferred_access_checks;
332       check;
333       check = TREE_CHAIN (check))
334    if (TREE_VALUE (check) == decl && TREE_PURPOSE (check) == binfo)
335      return;
336  /* If not, record the check.  */
337  ptr->deferred_access_checks
338    = tree_cons (binfo, decl, ptr->deferred_access_checks);
339}
340
341/* Returns nonzero if the current statement is a full expression,
342   i.e. temporaries created during that statement should be destroyed
343   at the end of the statement.  */
344
345int
346stmts_are_full_exprs_p (void)
347{
348  return current_stmt_tree ()->stmts_are_full_exprs_p;
349}
350
351/* T is a statement.  Add it to the statement-tree.  This is the C++
352   version.  The C/ObjC frontends have a slightly different version of
353   this function.  */
354
355tree
356add_stmt (tree t)
357{
358  enum tree_code code = TREE_CODE (t);
359
360  if (EXPR_P (t) && code != LABEL_EXPR)
361    {
362      if (!EXPR_HAS_LOCATION (t))
363	SET_EXPR_LOCATION (t, input_location);
364
365      /* When we expand a statement-tree, we must know whether or not the
366	 statements are full-expressions.  We record that fact here.  */
367      STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
368    }
369
370  /* Add T to the statement-tree.  Non-side-effect statements need to be
371     recorded during statement expressions.  */
372  append_to_statement_list_force (t, &cur_stmt_list);
373
374  return t;
375}
376
377/* Returns the stmt_tree (if any) to which statements are currently
378   being added.  If there is no active statement-tree, NULL is
379   returned.  */
380
381stmt_tree
382current_stmt_tree (void)
383{
384  return (cfun
385	  ? &cfun->language->base.x_stmt_tree
386	  : &scope_chain->x_stmt_tree);
387}
388
389/* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR.  */
390
391static tree
392maybe_cleanup_point_expr (tree expr)
393{
394  if (!processing_template_decl && stmts_are_full_exprs_p ())
395    expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
396  return expr;
397}
398
399/* Like maybe_cleanup_point_expr except have the type of the new expression be
400   void so we don't need to create a temporary variable to hold the inner
401   expression.  The reason why we do this is because the original type might be
402   an aggregate and we cannot create a temporary variable for that type.  */
403
404static tree
405maybe_cleanup_point_expr_void (tree expr)
406{
407  if (!processing_template_decl && stmts_are_full_exprs_p ())
408    expr = fold_build_cleanup_point_expr (void_type_node, expr);
409  return expr;
410}
411
412
413
414/* Create a declaration statement for the declaration given by the DECL.  */
415
416void
417add_decl_expr (tree decl)
418{
419  tree r = build_stmt (DECL_EXPR, decl);
420  if (DECL_INITIAL (decl)
421      || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
422    r = maybe_cleanup_point_expr_void (r);
423  add_stmt (r);
424}
425
426/* Nonzero if TYPE is an anonymous union or struct type.  We have to use a
427   flag for this because "A union for which objects or pointers are
428   declared is not an anonymous union" [class.union].  */
429
430int
431anon_aggr_type_p (tree node)
432{
433  return ANON_AGGR_TYPE_P (node);
434}
435
436/* Finish a scope.  */
437
438tree
439do_poplevel (tree stmt_list)
440{
441  tree block = NULL;
442
443  if (stmts_are_full_exprs_p ())
444    block = poplevel (kept_level_p (), 1, 0);
445
446  stmt_list = pop_stmt_list (stmt_list);
447
448  if (!processing_template_decl)
449    {
450      stmt_list = c_build_bind_expr (block, stmt_list);
451      /* ??? See c_end_compound_stmt re statement expressions.  */
452    }
453
454  return stmt_list;
455}
456
457/* Begin a new scope.  */
458
459static tree
460do_pushlevel (scope_kind sk)
461{
462  tree ret = push_stmt_list ();
463  if (stmts_are_full_exprs_p ())
464    begin_scope (sk, NULL);
465  return ret;
466}
467
468/* Queue a cleanup.  CLEANUP is an expression/statement to be executed
469   when the current scope is exited.  EH_ONLY is true when this is not
470   meant to apply to normal control flow transfer.  */
471
472void
473push_cleanup (tree decl, tree cleanup, bool eh_only)
474{
475  tree stmt = build_stmt (CLEANUP_STMT, NULL, cleanup, decl);
476  CLEANUP_EH_ONLY (stmt) = eh_only;
477  add_stmt (stmt);
478  CLEANUP_BODY (stmt) = push_stmt_list ();
479}
480
481/* Begin a conditional that might contain a declaration.  When generating
482   normal code, we want the declaration to appear before the statement
483   containing the conditional.  When generating template code, we want the
484   conditional to be rendered as the raw DECL_EXPR.  */
485
486static void
487begin_cond (tree *cond_p)
488{
489  if (processing_template_decl)
490    *cond_p = push_stmt_list ();
491}
492
493/* Finish such a conditional.  */
494
495static void
496finish_cond (tree *cond_p, tree expr)
497{
498  if (processing_template_decl)
499    {
500      tree cond = pop_stmt_list (*cond_p);
501      if (TREE_CODE (cond) == DECL_EXPR)
502	expr = cond;
503    }
504  *cond_p = expr;
505}
506
507/* If *COND_P specifies a conditional with a declaration, transform the
508   loop such that
509	    while (A x = 42) { }
510	    for (; A x = 42;) { }
511   becomes
512	    while (true) { A x = 42; if (!x) break; }
513	    for (;;) { A x = 42; if (!x) break; }
514   The statement list for BODY will be empty if the conditional did
515   not declare anything.  */
516
517static void
518simplify_loop_decl_cond (tree *cond_p, tree body)
519{
520  tree cond, if_stmt;
521
522  if (!TREE_SIDE_EFFECTS (body))
523    return;
524
525  cond = *cond_p;
526  *cond_p = boolean_true_node;
527
528  if_stmt = begin_if_stmt ();
529  cond = build_unary_op (TRUTH_NOT_EXPR, cond, 0);
530  finish_if_stmt_cond (cond, if_stmt);
531  finish_break_stmt ();
532  finish_then_clause (if_stmt);
533  finish_if_stmt (if_stmt);
534}
535
536/* Finish a goto-statement.  */
537
538tree
539finish_goto_stmt (tree destination)
540{
541  if (TREE_CODE (destination) == IDENTIFIER_NODE)
542    destination = lookup_label (destination);
543
544  /* We warn about unused labels with -Wunused.  That means we have to
545     mark the used labels as used.  */
546  if (TREE_CODE (destination) == LABEL_DECL)
547    TREE_USED (destination) = 1;
548  else
549    {
550      /* The DESTINATION is being used as an rvalue.  */
551      if (!processing_template_decl)
552	destination = decay_conversion (destination);
553      /* We don't inline calls to functions with computed gotos.
554	 Those functions are typically up to some funny business,
555	 and may be depending on the labels being at particular
556	 addresses, or some such.  */
557      DECL_UNINLINABLE (current_function_decl) = 1;
558    }
559
560  check_goto (destination);
561
562  return add_stmt (build_stmt (GOTO_EXPR, destination));
563}
564
565/* COND is the condition-expression for an if, while, etc.,
566   statement.  Convert it to a boolean value, if appropriate.  */
567
568static tree
569maybe_convert_cond (tree cond)
570{
571  /* Empty conditions remain empty.  */
572  if (!cond)
573    return NULL_TREE;
574
575  /* Wait until we instantiate templates before doing conversion.  */
576  if (processing_template_decl)
577    return cond;
578
579  /* Do the conversion.  */
580  cond = convert_from_reference (cond);
581  return condition_conversion (cond);
582}
583
584/* Finish an expression-statement, whose EXPRESSION is as indicated.  */
585
586tree
587finish_expr_stmt (tree expr)
588{
589  tree r = NULL_TREE;
590
591  if (expr != NULL_TREE)
592    {
593      if (!processing_template_decl)
594	{
595	  if (warn_sequence_point)
596	    verify_sequence_points (expr);
597	  expr = convert_to_void (expr, "statement");
598	}
599      else if (!type_dependent_expression_p (expr))
600	convert_to_void (build_non_dependent_expr (expr), "statement");
601
602      /* Simplification of inner statement expressions, compound exprs,
603	 etc can result in us already having an EXPR_STMT.  */
604      if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
605	{
606	  if (TREE_CODE (expr) != EXPR_STMT)
607	    expr = build_stmt (EXPR_STMT, expr);
608	  expr = maybe_cleanup_point_expr_void (expr);
609	}
610
611      r = add_stmt (expr);
612    }
613
614  finish_stmt ();
615
616  return r;
617}
618
619
620/* Begin an if-statement.  Returns a newly created IF_STMT if
621   appropriate.  */
622
623tree
624begin_if_stmt (void)
625{
626  tree r, scope;
627  scope = do_pushlevel (sk_block);
628  r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
629  TREE_CHAIN (r) = scope;
630  begin_cond (&IF_COND (r));
631  return r;
632}
633
634/* Process the COND of an if-statement, which may be given by
635   IF_STMT.  */
636
637void
638finish_if_stmt_cond (tree cond, tree if_stmt)
639{
640  finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
641  add_stmt (if_stmt);
642  THEN_CLAUSE (if_stmt) = push_stmt_list ();
643}
644
645/* Finish the then-clause of an if-statement, which may be given by
646   IF_STMT.  */
647
648tree
649finish_then_clause (tree if_stmt)
650{
651  THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
652  return if_stmt;
653}
654
655/* Begin the else-clause of an if-statement.  */
656
657void
658begin_else_clause (tree if_stmt)
659{
660  ELSE_CLAUSE (if_stmt) = push_stmt_list ();
661}
662
663/* Finish the else-clause of an if-statement, which may be given by
664   IF_STMT.  */
665
666void
667finish_else_clause (tree if_stmt)
668{
669  ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
670}
671
672/* Finish an if-statement.  */
673
674void
675finish_if_stmt (tree if_stmt)
676{
677  tree scope = TREE_CHAIN (if_stmt);
678  TREE_CHAIN (if_stmt) = NULL;
679  add_stmt (do_poplevel (scope));
680  finish_stmt ();
681}
682
683/* Begin a while-statement.  Returns a newly created WHILE_STMT if
684   appropriate.  */
685
686tree
687begin_while_stmt (void)
688{
689  tree r;
690  r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
691  add_stmt (r);
692  WHILE_BODY (r) = do_pushlevel (sk_block);
693  begin_cond (&WHILE_COND (r));
694  return r;
695}
696
697/* Process the COND of a while-statement, which may be given by
698   WHILE_STMT.  */
699
700void
701finish_while_stmt_cond (tree cond, tree while_stmt)
702{
703  finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
704  simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
705}
706
707/* Finish a while-statement, which may be given by WHILE_STMT.  */
708
709void
710finish_while_stmt (tree while_stmt)
711{
712  WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
713  finish_stmt ();
714}
715
716/* Begin a do-statement.  Returns a newly created DO_STMT if
717   appropriate.  */
718
719tree
720begin_do_stmt (void)
721{
722  tree r = build_stmt (DO_STMT, NULL_TREE, NULL_TREE);
723  add_stmt (r);
724  DO_BODY (r) = push_stmt_list ();
725  return r;
726}
727
728/* Finish the body of a do-statement, which may be given by DO_STMT.  */
729
730void
731finish_do_body (tree do_stmt)
732{
733  DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
734}
735
736/* Finish a do-statement, which may be given by DO_STMT, and whose
737   COND is as indicated.  */
738
739void
740finish_do_stmt (tree cond, tree do_stmt)
741{
742  cond = maybe_convert_cond (cond);
743  DO_COND (do_stmt) = cond;
744  finish_stmt ();
745}
746
747/* Finish a return-statement.  The EXPRESSION returned, if any, is as
748   indicated.  */
749
750tree
751finish_return_stmt (tree expr)
752{
753  tree r;
754  bool no_warning;
755
756  expr = check_return_expr (expr, &no_warning);
757  if (!processing_template_decl)
758    {
759      if (DECL_DESTRUCTOR_P (current_function_decl)
760	  || (DECL_CONSTRUCTOR_P (current_function_decl)
761	      && targetm.cxx.cdtor_returns_this ()))
762	{
763	  /* Similarly, all destructors must run destructors for
764	     base-classes before returning.  So, all returns in a
765	     destructor get sent to the DTOR_LABEL; finish_function emits
766	     code to return a value there.  */
767	  return finish_goto_stmt (cdtor_label);
768	}
769    }
770
771  r = build_stmt (RETURN_EXPR, expr);
772  TREE_NO_WARNING (r) |= no_warning;
773  r = maybe_cleanup_point_expr_void (r);
774  r = add_stmt (r);
775  finish_stmt ();
776
777  return r;
778}
779
780/* Begin a for-statement.  Returns a new FOR_STMT if appropriate.  */
781
782tree
783begin_for_stmt (void)
784{
785  tree r;
786
787  r = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
788		  NULL_TREE, NULL_TREE);
789
790  if (flag_new_for_scope > 0)
791    TREE_CHAIN (r) = do_pushlevel (sk_for);
792
793  if (processing_template_decl)
794    FOR_INIT_STMT (r) = push_stmt_list ();
795
796  return r;
797}
798
799/* Finish the for-init-statement of a for-statement, which may be
800   given by FOR_STMT.  */
801
802void
803finish_for_init_stmt (tree for_stmt)
804{
805  if (processing_template_decl)
806    FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
807  add_stmt (for_stmt);
808  FOR_BODY (for_stmt) = do_pushlevel (sk_block);
809  begin_cond (&FOR_COND (for_stmt));
810}
811
812/* Finish the COND of a for-statement, which may be given by
813   FOR_STMT.  */
814
815void
816finish_for_cond (tree cond, tree for_stmt)
817{
818  finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
819  simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
820}
821
822/* Finish the increment-EXPRESSION in a for-statement, which may be
823   given by FOR_STMT.  */
824
825void
826finish_for_expr (tree expr, tree for_stmt)
827{
828  if (!expr)
829    return;
830  /* If EXPR is an overloaded function, issue an error; there is no
831     context available to use to perform overload resolution.  */
832  if (type_unknown_p (expr))
833    {
834      cxx_incomplete_type_error (expr, TREE_TYPE (expr));
835      expr = error_mark_node;
836    }
837  if (!processing_template_decl)
838    {
839      if (warn_sequence_point)
840	verify_sequence_points (expr);
841      expr = convert_to_void (expr, "3rd expression in for");
842    }
843  else if (!type_dependent_expression_p (expr))
844    convert_to_void (build_non_dependent_expr (expr), "3rd expression in for");
845  expr = maybe_cleanup_point_expr_void (expr);
846  FOR_EXPR (for_stmt) = expr;
847}
848
849/* Finish the body of a for-statement, which may be given by
850   FOR_STMT.  The increment-EXPR for the loop must be
851   provided.  */
852
853void
854finish_for_stmt (tree for_stmt)
855{
856  FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
857
858  /* Pop the scope for the body of the loop.  */
859  if (flag_new_for_scope > 0)
860    {
861      tree scope = TREE_CHAIN (for_stmt);
862      TREE_CHAIN (for_stmt) = NULL;
863      add_stmt (do_poplevel (scope));
864    }
865
866  finish_stmt ();
867}
868
869/* Finish a break-statement.  */
870
871tree
872finish_break_stmt (void)
873{
874  return add_stmt (build_stmt (BREAK_STMT));
875}
876
877/* Finish a continue-statement.  */
878
879tree
880finish_continue_stmt (void)
881{
882  return add_stmt (build_stmt (CONTINUE_STMT));
883}
884
885/* Begin a switch-statement.  Returns a new SWITCH_STMT if
886   appropriate.  */
887
888tree
889begin_switch_stmt (void)
890{
891  tree r, scope;
892
893  r = build_stmt (SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
894
895  scope = do_pushlevel (sk_block);
896  TREE_CHAIN (r) = scope;
897  begin_cond (&SWITCH_STMT_COND (r));
898
899  return r;
900}
901
902/* Finish the cond of a switch-statement.  */
903
904void
905finish_switch_cond (tree cond, tree switch_stmt)
906{
907  tree orig_type = NULL;
908  if (!processing_template_decl)
909    {
910      tree index;
911
912      /* Convert the condition to an integer or enumeration type.  */
913      cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
914      if (cond == NULL_TREE)
915	{
916	  error ("switch quantity not an integer");
917	  cond = error_mark_node;
918	}
919      orig_type = TREE_TYPE (cond);
920      if (cond != error_mark_node)
921	{
922	  /* [stmt.switch]
923
924	     Integral promotions are performed.  */
925	  cond = perform_integral_promotions (cond);
926	  cond = maybe_cleanup_point_expr (cond);
927	}
928
929      if (cond != error_mark_node)
930	{
931	  index = get_unwidened (cond, NULL_TREE);
932	  /* We can't strip a conversion from a signed type to an unsigned,
933	     because if we did, int_fits_type_p would do the wrong thing
934	     when checking case values for being in range,
935	     and it's too hard to do the right thing.  */
936	  if (TYPE_UNSIGNED (TREE_TYPE (cond))
937	      == TYPE_UNSIGNED (TREE_TYPE (index)))
938	    cond = index;
939	}
940    }
941  finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
942  SWITCH_STMT_TYPE (switch_stmt) = orig_type;
943  add_stmt (switch_stmt);
944  push_switch (switch_stmt);
945  SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
946}
947
948/* Finish the body of a switch-statement, which may be given by
949   SWITCH_STMT.  The COND to switch on is indicated.  */
950
951void
952finish_switch_stmt (tree switch_stmt)
953{
954  tree scope;
955
956  SWITCH_STMT_BODY (switch_stmt) =
957    pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
958  pop_switch ();
959  finish_stmt ();
960
961  scope = TREE_CHAIN (switch_stmt);
962  TREE_CHAIN (switch_stmt) = NULL;
963  add_stmt (do_poplevel (scope));
964}
965
966/* Begin a try-block.  Returns a newly-created TRY_BLOCK if
967   appropriate.  */
968
969tree
970begin_try_block (void)
971{
972  tree r = build_stmt (TRY_BLOCK, NULL_TREE, NULL_TREE);
973  add_stmt (r);
974  TRY_STMTS (r) = push_stmt_list ();
975  return r;
976}
977
978/* Likewise, for a function-try-block.  The block returned in
979   *COMPOUND_STMT is an artificial outer scope, containing the
980   function-try-block.  */
981
982tree
983begin_function_try_block (tree *compound_stmt)
984{
985  tree r;
986  /* This outer scope does not exist in the C++ standard, but we need
987     a place to put __FUNCTION__ and similar variables.  */
988  *compound_stmt = begin_compound_stmt (0);
989  r = begin_try_block ();
990  FN_TRY_BLOCK_P (r) = 1;
991  return r;
992}
993
994/* Finish a try-block, which may be given by TRY_BLOCK.  */
995
996void
997finish_try_block (tree try_block)
998{
999  TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1000  TRY_HANDLERS (try_block) = push_stmt_list ();
1001}
1002
1003/* Finish the body of a cleanup try-block, which may be given by
1004   TRY_BLOCK.  */
1005
1006void
1007finish_cleanup_try_block (tree try_block)
1008{
1009  TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1010}
1011
1012/* Finish an implicitly generated try-block, with a cleanup is given
1013   by CLEANUP.  */
1014
1015void
1016finish_cleanup (tree cleanup, tree try_block)
1017{
1018  TRY_HANDLERS (try_block) = cleanup;
1019  CLEANUP_P (try_block) = 1;
1020}
1021
1022/* Likewise, for a function-try-block.  */
1023
1024void
1025finish_function_try_block (tree try_block)
1026{
1027  finish_try_block (try_block);
1028  /* FIXME : something queer about CTOR_INITIALIZER somehow following
1029     the try block, but moving it inside.  */
1030  in_function_try_handler = 1;
1031}
1032
1033/* Finish a handler-sequence for a try-block, which may be given by
1034   TRY_BLOCK.  */
1035
1036void
1037finish_handler_sequence (tree try_block)
1038{
1039  TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1040  check_handlers (TRY_HANDLERS (try_block));
1041}
1042
1043/* Finish the handler-seq for a function-try-block, given by
1044   TRY_BLOCK.  COMPOUND_STMT is the outer block created by
1045   begin_function_try_block.  */
1046
1047void
1048finish_function_handler_sequence (tree try_block, tree compound_stmt)
1049{
1050  in_function_try_handler = 0;
1051  finish_handler_sequence (try_block);
1052  finish_compound_stmt (compound_stmt);
1053}
1054
1055/* Begin a handler.  Returns a HANDLER if appropriate.  */
1056
1057tree
1058begin_handler (void)
1059{
1060  tree r;
1061
1062  r = build_stmt (HANDLER, NULL_TREE, NULL_TREE);
1063  add_stmt (r);
1064
1065  /* Create a binding level for the eh_info and the exception object
1066     cleanup.  */
1067  HANDLER_BODY (r) = do_pushlevel (sk_catch);
1068
1069  return r;
1070}
1071
1072/* Finish the handler-parameters for a handler, which may be given by
1073   HANDLER.  DECL is the declaration for the catch parameter, or NULL
1074   if this is a `catch (...)' clause.  */
1075
1076void
1077finish_handler_parms (tree decl, tree handler)
1078{
1079  tree type = NULL_TREE;
1080  if (processing_template_decl)
1081    {
1082      if (decl)
1083	{
1084	  decl = pushdecl (decl);
1085	  decl = push_template_decl (decl);
1086	  HANDLER_PARMS (handler) = decl;
1087	  type = TREE_TYPE (decl);
1088	}
1089    }
1090  else
1091    type = expand_start_catch_block (decl);
1092
1093  HANDLER_TYPE (handler) = type;
1094  if (!processing_template_decl && type)
1095    mark_used (eh_type_info (type));
1096}
1097
1098/* Finish a handler, which may be given by HANDLER.  The BLOCKs are
1099   the return value from the matching call to finish_handler_parms.  */
1100
1101void
1102finish_handler (tree handler)
1103{
1104  if (!processing_template_decl)
1105    expand_end_catch_block ();
1106  HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1107}
1108
1109/* Begin a compound statement.  FLAGS contains some bits that control the
1110   behavior and context.  If BCS_NO_SCOPE is set, the compound statement
1111   does not define a scope.  If BCS_FN_BODY is set, this is the outermost
1112   block of a function.  If BCS_TRY_BLOCK is set, this is the block
1113   created on behalf of a TRY statement.  Returns a token to be passed to
1114   finish_compound_stmt.  */
1115
1116tree
1117begin_compound_stmt (unsigned int flags)
1118{
1119  tree r;
1120
1121  if (flags & BCS_NO_SCOPE)
1122    {
1123      r = push_stmt_list ();
1124      STATEMENT_LIST_NO_SCOPE (r) = 1;
1125
1126      /* Normally, we try hard to keep the BLOCK for a statement-expression.
1127	 But, if it's a statement-expression with a scopeless block, there's
1128	 nothing to keep, and we don't want to accidentally keep a block
1129	 *inside* the scopeless block.  */
1130      keep_next_level (false);
1131    }
1132  else
1133    r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1134
1135  /* When processing a template, we need to remember where the braces were,
1136     so that we can set up identical scopes when instantiating the template
1137     later.  BIND_EXPR is a handy candidate for this.
1138     Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1139     result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1140     processing templates.  */
1141  if (processing_template_decl)
1142    {
1143      r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1144      BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1145      BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1146      TREE_SIDE_EFFECTS (r) = 1;
1147    }
1148
1149  return r;
1150}
1151
1152/* Finish a compound-statement, which is given by STMT.  */
1153
1154void
1155finish_compound_stmt (tree stmt)
1156{
1157  if (TREE_CODE (stmt) == BIND_EXPR)
1158    BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt));
1159  else if (STATEMENT_LIST_NO_SCOPE (stmt))
1160    stmt = pop_stmt_list (stmt);
1161  else
1162    {
1163      /* Destroy any ObjC "super" receivers that may have been
1164	 created.  */
1165      objc_clear_super_receiver ();
1166
1167      stmt = do_poplevel (stmt);
1168    }
1169
1170  /* ??? See c_end_compound_stmt wrt statement expressions.  */
1171  add_stmt (stmt);
1172  finish_stmt ();
1173}
1174
1175/* Finish an asm-statement, whose components are a STRING, some
1176   OUTPUT_OPERANDS, some INPUT_OPERANDS, and some CLOBBERS.  Also note
1177   whether the asm-statement should be considered volatile.  */
1178
1179tree
1180finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1181		 tree input_operands, tree clobbers)
1182{
1183  tree r;
1184  tree t;
1185  int ninputs = list_length (input_operands);
1186  int noutputs = list_length (output_operands);
1187
1188  if (!processing_template_decl)
1189    {
1190      const char *constraint;
1191      const char **oconstraints;
1192      bool allows_mem, allows_reg, is_inout;
1193      tree operand;
1194      int i;
1195
1196      oconstraints = (const char **) alloca (noutputs * sizeof (char *));
1197
1198      string = resolve_asm_operand_names (string, output_operands,
1199					  input_operands);
1200
1201      for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1202	{
1203	  operand = TREE_VALUE (t);
1204
1205	  /* ??? Really, this should not be here.  Users should be using a
1206	     proper lvalue, dammit.  But there's a long history of using
1207	     casts in the output operands.  In cases like longlong.h, this
1208	     becomes a primitive form of typechecking -- if the cast can be
1209	     removed, then the output operand had a type of the proper width;
1210	     otherwise we'll get an error.  Gross, but ...  */
1211	  STRIP_NOPS (operand);
1212
1213	  if (!lvalue_or_else (operand, lv_asm))
1214	    operand = error_mark_node;
1215
1216          if (operand != error_mark_node
1217	      && (TREE_READONLY (operand)
1218		  || CP_TYPE_CONST_P (TREE_TYPE (operand))
1219	          /* Functions are not modifiable, even though they are
1220	             lvalues.  */
1221	          || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1222	          || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1223	          /* If it's an aggregate and any field is const, then it is
1224	             effectively const.  */
1225	          || (CLASS_TYPE_P (TREE_TYPE (operand))
1226	              && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1227	    readonly_error (operand, "assignment (via 'asm' output)", 0);
1228
1229	  constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1230	  oconstraints[i] = constraint;
1231
1232	  if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1233				       &allows_mem, &allows_reg, &is_inout))
1234	    {
1235	      /* If the operand is going to end up in memory,
1236		 mark it addressable.  */
1237	      if (!allows_reg && !cxx_mark_addressable (operand))
1238		operand = error_mark_node;
1239	    }
1240	  else
1241	    operand = error_mark_node;
1242
1243	  TREE_VALUE (t) = operand;
1244	}
1245
1246      for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1247	{
1248	  constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1249	  operand = decay_conversion (TREE_VALUE (t));
1250
1251	  /* If the type of the operand hasn't been determined (e.g.,
1252	     because it involves an overloaded function), then issue
1253	     an error message.  There's no context available to
1254	     resolve the overloading.  */
1255	  if (TREE_TYPE (operand) == unknown_type_node)
1256	    {
1257	      error ("type of asm operand %qE could not be determined",
1258		     TREE_VALUE (t));
1259	      operand = error_mark_node;
1260	    }
1261
1262	  if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1263				      oconstraints, &allows_mem, &allows_reg))
1264	    {
1265	      /* If the operand is going to end up in memory,
1266		 mark it addressable.  */
1267	      if (!allows_reg && allows_mem)
1268		{
1269		  /* Strip the nops as we allow this case.  FIXME, this really
1270		     should be rejected or made deprecated.  */
1271		  STRIP_NOPS (operand);
1272		  if (!cxx_mark_addressable (operand))
1273		    operand = error_mark_node;
1274		}
1275	    }
1276	  else
1277	    operand = error_mark_node;
1278
1279	  TREE_VALUE (t) = operand;
1280	}
1281    }
1282
1283  r = build_stmt (ASM_EXPR, string,
1284		  output_operands, input_operands,
1285		  clobbers);
1286  ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1287  r = maybe_cleanup_point_expr_void (r);
1288  return add_stmt (r);
1289}
1290
1291/* Finish a label with the indicated NAME.  */
1292
1293tree
1294finish_label_stmt (tree name)
1295{
1296  tree decl = define_label (input_location, name);
1297
1298  if (decl == error_mark_node)
1299    return error_mark_node;
1300
1301  return add_stmt (build_stmt (LABEL_EXPR, decl));
1302}
1303
1304/* Finish a series of declarations for local labels.  G++ allows users
1305   to declare "local" labels, i.e., labels with scope.  This extension
1306   is useful when writing code involving statement-expressions.  */
1307
1308void
1309finish_label_decl (tree name)
1310{
1311  tree decl = declare_local_label (name);
1312  add_decl_expr (decl);
1313}
1314
1315/* When DECL goes out of scope, make sure that CLEANUP is executed.  */
1316
1317void
1318finish_decl_cleanup (tree decl, tree cleanup)
1319{
1320  push_cleanup (decl, cleanup, false);
1321}
1322
1323/* If the current scope exits with an exception, run CLEANUP.  */
1324
1325void
1326finish_eh_cleanup (tree cleanup)
1327{
1328  push_cleanup (NULL, cleanup, true);
1329}
1330
1331/* The MEM_INITS is a list of mem-initializers, in reverse of the
1332   order they were written by the user.  Each node is as for
1333   emit_mem_initializers.  */
1334
1335void
1336finish_mem_initializers (tree mem_inits)
1337{
1338  /* Reorder the MEM_INITS so that they are in the order they appeared
1339     in the source program.  */
1340  mem_inits = nreverse (mem_inits);
1341
1342  if (processing_template_decl)
1343    add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1344  else
1345    emit_mem_initializers (mem_inits);
1346}
1347
1348/* Finish a parenthesized expression EXPR.  */
1349
1350tree
1351finish_parenthesized_expr (tree expr)
1352{
1353  if (EXPR_P (expr))
1354    /* This inhibits warnings in c_common_truthvalue_conversion.  */
1355    TREE_NO_WARNING (expr) = 1;
1356
1357  if (TREE_CODE (expr) == OFFSET_REF)
1358    /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1359       enclosed in parentheses.  */
1360    PTRMEM_OK_P (expr) = 0;
1361
1362  if (TREE_CODE (expr) == STRING_CST)
1363    PAREN_STRING_LITERAL_P (expr) = 1;
1364
1365  return expr;
1366}
1367
1368/* Finish a reference to a non-static data member (DECL) that is not
1369   preceded by `.' or `->'.  */
1370
1371tree
1372finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1373{
1374  gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1375
1376  if (!object)
1377    {
1378      if (current_function_decl
1379	  && DECL_STATIC_FUNCTION_P (current_function_decl))
1380	error ("invalid use of member %q+D in static member function", decl);
1381      else
1382	error ("invalid use of non-static data member %q+D", decl);
1383      error ("from this location");
1384
1385      return error_mark_node;
1386    }
1387  TREE_USED (current_class_ptr) = 1;
1388  if (processing_template_decl && !qualifying_scope)
1389    {
1390      tree type = TREE_TYPE (decl);
1391
1392      if (TREE_CODE (type) == REFERENCE_TYPE)
1393	type = TREE_TYPE (type);
1394      else
1395	{
1396	  /* Set the cv qualifiers.  */
1397	  int quals = cp_type_quals (TREE_TYPE (current_class_ref));
1398
1399	  if (DECL_MUTABLE_P (decl))
1400	    quals &= ~TYPE_QUAL_CONST;
1401
1402	  quals |= cp_type_quals (TREE_TYPE (decl));
1403	  type = cp_build_qualified_type (type, quals);
1404	}
1405
1406      return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
1407    }
1408  else
1409    {
1410      tree access_type = TREE_TYPE (object);
1411      tree lookup_context = context_for_name_lookup (decl);
1412
1413      while (!DERIVED_FROM_P (lookup_context, access_type))
1414	{
1415	  access_type = TYPE_CONTEXT (access_type);
1416	  while (access_type && DECL_P (access_type))
1417	    access_type = DECL_CONTEXT (access_type);
1418
1419	  if (!access_type)
1420	    {
1421	      error ("object missing in reference to %q+D", decl);
1422	      error ("from this location");
1423	      return error_mark_node;
1424	    }
1425	}
1426
1427      /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1428	 QUALIFYING_SCOPE is also non-null.  Wrap this in a SCOPE_REF
1429	 for now.  */
1430      if (processing_template_decl)
1431	return build_qualified_name (TREE_TYPE (decl),
1432				     qualifying_scope,
1433				     DECL_NAME (decl),
1434				     /*template_p=*/false);
1435
1436      perform_or_defer_access_check (TYPE_BINFO (access_type), decl);
1437
1438      /* If the data member was named `C::M', convert `*this' to `C'
1439	 first.  */
1440      if (qualifying_scope)
1441	{
1442	  tree binfo = NULL_TREE;
1443	  object = build_scoped_ref (object, qualifying_scope,
1444				     &binfo);
1445	}
1446
1447      return build_class_member_access_expr (object, decl,
1448					     /*access_path=*/NULL_TREE,
1449					     /*preserve_reference=*/false);
1450    }
1451}
1452
1453/* DECL was the declaration to which a qualified-id resolved.  Issue
1454   an error message if it is not accessible.  If OBJECT_TYPE is
1455   non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1456   type of `*x', or `x', respectively.  If the DECL was named as
1457   `A::B' then NESTED_NAME_SPECIFIER is `A'.  */
1458
1459void
1460check_accessibility_of_qualified_id (tree decl,
1461				     tree object_type,
1462				     tree nested_name_specifier)
1463{
1464  tree scope;
1465  tree qualifying_type = NULL_TREE;
1466
1467  /* If we're not checking, return immediately.  */
1468  if (deferred_access_no_check)
1469    return;
1470
1471  /* Determine the SCOPE of DECL.  */
1472  scope = context_for_name_lookup (decl);
1473  /* If the SCOPE is not a type, then DECL is not a member.  */
1474  if (!TYPE_P (scope))
1475    return;
1476  /* Compute the scope through which DECL is being accessed.  */
1477  if (object_type
1478      /* OBJECT_TYPE might not be a class type; consider:
1479
1480	   class A { typedef int I; };
1481	   I *p;
1482	   p->A::I::~I();
1483
1484	 In this case, we will have "A::I" as the DECL, but "I" as the
1485	 OBJECT_TYPE.  */
1486      && CLASS_TYPE_P (object_type)
1487      && DERIVED_FROM_P (scope, object_type))
1488    /* If we are processing a `->' or `.' expression, use the type of the
1489       left-hand side.  */
1490    qualifying_type = object_type;
1491  else if (nested_name_specifier)
1492    {
1493      /* If the reference is to a non-static member of the
1494	 current class, treat it as if it were referenced through
1495	 `this'.  */
1496      if (DECL_NONSTATIC_MEMBER_P (decl)
1497	  && current_class_ptr
1498	  && DERIVED_FROM_P (scope, current_class_type))
1499	qualifying_type = current_class_type;
1500      /* Otherwise, use the type indicated by the
1501	 nested-name-specifier.  */
1502      else
1503	qualifying_type = nested_name_specifier;
1504    }
1505  else
1506    /* Otherwise, the name must be from the current class or one of
1507       its bases.  */
1508    qualifying_type = currently_open_derived_class (scope);
1509
1510  if (qualifying_type
1511      /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1512	 or similar in a default argument value.  */
1513      && CLASS_TYPE_P (qualifying_type)
1514      && !dependent_type_p (qualifying_type))
1515    perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl);
1516}
1517
1518/* EXPR is the result of a qualified-id.  The QUALIFYING_CLASS was the
1519   class named to the left of the "::" operator.  DONE is true if this
1520   expression is a complete postfix-expression; it is false if this
1521   expression is followed by '->', '[', '(', etc.  ADDRESS_P is true
1522   iff this expression is the operand of '&'.  TEMPLATE_P is true iff
1523   the qualified-id was of the form "A::template B".  TEMPLATE_ARG_P
1524   is true iff this qualified name appears as a template argument.  */
1525
1526tree
1527finish_qualified_id_expr (tree qualifying_class,
1528			  tree expr,
1529			  bool done,
1530			  bool address_p,
1531			  bool template_p,
1532			  bool template_arg_p)
1533{
1534  if (error_operand_p (expr))
1535    return error_mark_node;
1536
1537  if (template_p)
1538    check_template_keyword (expr);
1539
1540  if (DECL_P (expr))
1541    mark_used (expr);
1542  else if (BASELINK_P (expr)
1543	   && TREE_CODE (BASELINK_FUNCTIONS (expr)) != TEMPLATE_ID_EXPR
1544	   && !really_overloaded_fn (BASELINK_FUNCTIONS (expr)))
1545    mark_used (OVL_CURRENT (BASELINK_FUNCTIONS (expr)));
1546
1547  /* If EXPR occurs as the operand of '&', use special handling that
1548     permits a pointer-to-member.  */
1549  if (address_p && done)
1550    {
1551      if (TREE_CODE (expr) == SCOPE_REF)
1552	expr = TREE_OPERAND (expr, 1);
1553      expr = build_offset_ref (qualifying_class, expr,
1554			       /*address_p=*/true);
1555      return expr;
1556    }
1557
1558  /* Within the scope of a class, turn references to non-static
1559     members into expression of the form "this->...".  */
1560  if (template_arg_p)
1561    /* But, within a template argument, we do not want make the
1562       transformation, as there is no "this" pointer.  */
1563    ;
1564  else if (TREE_CODE (expr) == FIELD_DECL)
1565    expr = finish_non_static_data_member (expr, current_class_ref,
1566					  qualifying_class);
1567  else if (BASELINK_P (expr) && !processing_template_decl)
1568    {
1569      tree fns;
1570
1571      /* See if any of the functions are non-static members.  */
1572      fns = BASELINK_FUNCTIONS (expr);
1573      if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
1574	fns = TREE_OPERAND (fns, 0);
1575      /* If so, the expression may be relative to the current
1576	 class.  */
1577      if (!shared_member_p (fns)
1578	  && current_class_type
1579	  && DERIVED_FROM_P (qualifying_class, current_class_type))
1580	expr = (build_class_member_access_expr
1581		(maybe_dummy_object (qualifying_class, NULL),
1582		 expr,
1583		 BASELINK_ACCESS_BINFO (expr),
1584		 /*preserve_reference=*/false));
1585      else if (done)
1586	/* The expression is a qualified name whose address is not
1587	   being taken.  */
1588	expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1589    }
1590
1591  return expr;
1592}
1593
1594/* Begin a statement-expression.  The value returned must be passed to
1595   finish_stmt_expr.  */
1596
1597tree
1598begin_stmt_expr (void)
1599{
1600  return push_stmt_list ();
1601}
1602
1603/* Process the final expression of a statement expression. EXPR can be
1604   NULL, if the final expression is empty.  Return a STATEMENT_LIST
1605   containing all the statements in the statement-expression, or
1606   ERROR_MARK_NODE if there was an error.  */
1607
1608tree
1609finish_stmt_expr_expr (tree expr, tree stmt_expr)
1610{
1611  if (error_operand_p (expr))
1612    return error_mark_node;
1613
1614  /* If the last statement does not have "void" type, then the value
1615     of the last statement is the value of the entire expression.  */
1616  if (expr)
1617    {
1618      tree type;
1619      type = TREE_TYPE (expr);
1620      if (!dependent_type_p (type) && !VOID_TYPE_P (type))
1621	{
1622	  expr = decay_conversion (expr);
1623	  if (error_operand_p (expr))
1624	    return error_mark_node;
1625	  type = TREE_TYPE (expr);
1626	}
1627      /* The type of the statement-expression is the type of the last
1628	 expression.  */
1629      TREE_TYPE (stmt_expr) = type;
1630      /* We must take particular care if TYPE is a class type.  In
1631	 particular if EXPR creates a temporary of class type, then it
1632	 must be destroyed at the semicolon terminating the last
1633	 statement -- but we must make a copy before that happens.
1634
1635	 This problem is solved by using a TARGET_EXPR to initialize a
1636	 new temporary variable.  The TARGET_EXPR itself is placed
1637	 outside the statement-expression.  However, the last
1638	 statement in the statement-expression is transformed from
1639	 EXPR to (approximately) T = EXPR, where T is the new
1640	 temporary variable.  Thus, the lifetime of the new temporary
1641	 extends to the full-expression surrounding the
1642	 statement-expression.  */
1643      if (!processing_template_decl && !VOID_TYPE_P (type))
1644	{
1645	  tree target_expr;
1646	  if (CLASS_TYPE_P (type)
1647	      && !TYPE_HAS_TRIVIAL_INIT_REF (type))
1648	    {
1649	      target_expr = build_target_expr_with_type (expr, type);
1650	      expr = TARGET_EXPR_INITIAL (target_expr);
1651	    }
1652	  else
1653	    {
1654	      /* Normally, build_target_expr will not create a
1655		 TARGET_EXPR for scalars.  However, we need the
1656		 temporary here, in order to solve the scoping
1657		 problem described above.  */
1658	      target_expr = force_target_expr (type, expr);
1659	      expr = TARGET_EXPR_INITIAL (target_expr);
1660	      expr = build2 (INIT_EXPR,
1661			     type,
1662			     TARGET_EXPR_SLOT (target_expr),
1663			     expr);
1664	    }
1665	  TARGET_EXPR_INITIAL (target_expr) = NULL_TREE;
1666	  /* Save away the TARGET_EXPR in the TREE_TYPE field of the
1667	     STATEMENT_EXPR.  We will retrieve it in
1668	     finish_stmt_expr.  */
1669	  TREE_TYPE (stmt_expr) = target_expr;
1670	}
1671    }
1672
1673  /* Having modified EXPR to reflect the extra initialization, we now
1674     treat it just like an ordinary statement.  */
1675  expr = finish_expr_stmt (expr);
1676
1677  /* Mark the last statement so that we can recognize it as such at
1678     template-instantiation time.  */
1679  if (expr && processing_template_decl)
1680    EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1681
1682  return stmt_expr;
1683}
1684
1685/* Finish a statement-expression.  EXPR should be the value returned
1686   by the previous begin_stmt_expr.  Returns an expression
1687   representing the statement-expression.  */
1688
1689tree
1690finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1691{
1692  tree type;
1693  tree result;
1694
1695  if (error_operand_p (stmt_expr))
1696    return error_mark_node;
1697
1698  gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1699
1700  type = TREE_TYPE (stmt_expr);
1701  result = pop_stmt_list (stmt_expr);
1702
1703  if (processing_template_decl)
1704    {
1705      result = build_min (STMT_EXPR, type, result);
1706      TREE_SIDE_EFFECTS (result) = 1;
1707      STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1708    }
1709  else if (!TYPE_P (type))
1710    {
1711      gcc_assert (TREE_CODE (type) == TARGET_EXPR);
1712      TARGET_EXPR_INITIAL (type) = result;
1713      TREE_TYPE (result) = void_type_node;
1714      result = type;
1715    }
1716
1717  return result;
1718}
1719
1720/* Perform Koenig lookup.  FN is the postfix-expression representing
1721   the function (or functions) to call; ARGS are the arguments to the
1722   call.  Returns the functions to be considered by overload
1723   resolution.  */
1724
1725tree
1726perform_koenig_lookup (tree fn, tree args)
1727{
1728  tree identifier = NULL_TREE;
1729  tree functions = NULL_TREE;
1730
1731  /* Find the name of the overloaded function.  */
1732  if (TREE_CODE (fn) == IDENTIFIER_NODE)
1733    identifier = fn;
1734  else if (is_overloaded_fn (fn))
1735    {
1736      functions = fn;
1737      identifier = DECL_NAME (get_first_fn (functions));
1738    }
1739  else if (DECL_P (fn))
1740    {
1741      functions = fn;
1742      identifier = DECL_NAME (fn);
1743    }
1744
1745  /* A call to a namespace-scope function using an unqualified name.
1746
1747     Do Koenig lookup -- unless any of the arguments are
1748     type-dependent.  */
1749  if (!any_type_dependent_arguments_p (args))
1750    {
1751      fn = lookup_arg_dependent (identifier, functions, args);
1752      if (!fn)
1753	/* The unqualified name could not be resolved.  */
1754	fn = unqualified_fn_lookup_error (identifier);
1755    }
1756
1757  return fn;
1758}
1759
1760/* Generate an expression for `FN (ARGS)'.
1761
1762   If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1763   as a virtual call, even if FN is virtual.  (This flag is set when
1764   encountering an expression where the function name is explicitly
1765   qualified.  For example a call to `X::f' never generates a virtual
1766   call.)
1767
1768   Returns code for the call.  */
1769
1770tree
1771finish_call_expr (tree fn, tree args, bool disallow_virtual, bool koenig_p)
1772{
1773  tree result;
1774  tree orig_fn;
1775  tree orig_args;
1776
1777  if (fn == error_mark_node || args == error_mark_node)
1778    return error_mark_node;
1779
1780  /* ARGS should be a list of arguments.  */
1781  gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
1782
1783  orig_fn = fn;
1784  orig_args = args;
1785
1786  if (processing_template_decl)
1787    {
1788      if (type_dependent_expression_p (fn)
1789	  || any_type_dependent_arguments_p (args))
1790	{
1791	  result = build_nt (CALL_EXPR, fn, args, NULL_TREE);
1792	  KOENIG_LOOKUP_P (result) = koenig_p;
1793	  return result;
1794	}
1795      if (!BASELINK_P (fn)
1796	  && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1797	  && TREE_TYPE (fn) != unknown_type_node)
1798	fn = build_non_dependent_expr (fn);
1799      args = build_non_dependent_args (orig_args);
1800    }
1801
1802  /* A reference to a member function will appear as an overloaded
1803     function (rather than a BASELINK) if an unqualified name was used
1804     to refer to it.  */
1805  if (!BASELINK_P (fn) && is_overloaded_fn (fn))
1806    {
1807      tree f = fn;
1808
1809      if (TREE_CODE (f) == TEMPLATE_ID_EXPR)
1810	f = TREE_OPERAND (f, 0);
1811      f = get_first_fn (f);
1812      if (DECL_FUNCTION_MEMBER_P (f))
1813	{
1814	  tree type = currently_open_derived_class (DECL_CONTEXT (f));
1815	  if (!type)
1816	    type = DECL_CONTEXT (f);
1817	  fn = build_baselink (TYPE_BINFO (type),
1818			       TYPE_BINFO (type),
1819			       fn, /*optype=*/NULL_TREE);
1820	}
1821    }
1822
1823  result = NULL_TREE;
1824  if (BASELINK_P (fn))
1825    {
1826      tree object;
1827
1828      /* A call to a member function.  From [over.call.func]:
1829
1830	   If the keyword this is in scope and refers to the class of
1831	   that member function, or a derived class thereof, then the
1832	   function call is transformed into a qualified function call
1833	   using (*this) as the postfix-expression to the left of the
1834	   . operator.... [Otherwise] a contrived object of type T
1835	   becomes the implied object argument.
1836
1837	This paragraph is unclear about this situation:
1838
1839	  struct A { void f(); };
1840	  struct B : public A {};
1841	  struct C : public A { void g() { B::f(); }};
1842
1843	In particular, for `B::f', this paragraph does not make clear
1844	whether "the class of that member function" refers to `A' or
1845	to `B'.  We believe it refers to `B'.  */
1846      if (current_class_type
1847	  && DERIVED_FROM_P (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1848			     current_class_type)
1849	  && current_class_ref)
1850	object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1851				     NULL);
1852      else
1853	{
1854	  tree representative_fn;
1855
1856	  representative_fn = BASELINK_FUNCTIONS (fn);
1857	  if (TREE_CODE (representative_fn) == TEMPLATE_ID_EXPR)
1858	    representative_fn = TREE_OPERAND (representative_fn, 0);
1859	  representative_fn = get_first_fn (representative_fn);
1860	  object = build_dummy_object (DECL_CONTEXT (representative_fn));
1861	}
1862
1863      if (processing_template_decl)
1864	{
1865	  if (type_dependent_expression_p (object))
1866	    return build_nt (CALL_EXPR, orig_fn, orig_args, NULL_TREE);
1867	  object = build_non_dependent_expr (object);
1868	}
1869
1870      result = build_new_method_call (object, fn, args, NULL_TREE,
1871				      (disallow_virtual
1872				       ? LOOKUP_NONVIRTUAL : 0));
1873    }
1874  else if (is_overloaded_fn (fn))
1875    {
1876      /* If the function is an overloaded builtin, resolve it.  */
1877      if (TREE_CODE (fn) == FUNCTION_DECL
1878	  && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
1879	      || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
1880	result = resolve_overloaded_builtin (fn, args);
1881
1882      if (!result)
1883	/* A call to a namespace-scope function.  */
1884	result = build_new_function_call (fn, args, koenig_p);
1885    }
1886  else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
1887    {
1888      if (args)
1889	error ("arguments to destructor are not allowed");
1890      /* Mark the pseudo-destructor call as having side-effects so
1891	 that we do not issue warnings about its use.  */
1892      result = build1 (NOP_EXPR,
1893		       void_type_node,
1894		       TREE_OPERAND (fn, 0));
1895      TREE_SIDE_EFFECTS (result) = 1;
1896    }
1897  else if (CLASS_TYPE_P (TREE_TYPE (fn)))
1898    /* If the "function" is really an object of class type, it might
1899       have an overloaded `operator ()'.  */
1900    result = build_new_op (CALL_EXPR, LOOKUP_NORMAL, fn, args, NULL_TREE,
1901			   /*overloaded_p=*/NULL);
1902
1903  if (!result)
1904    /* A call where the function is unknown.  */
1905    result = build_function_call (fn, args);
1906
1907  if (processing_template_decl)
1908    {
1909      result = build3 (CALL_EXPR, TREE_TYPE (result), orig_fn,
1910		       orig_args, NULL_TREE);
1911      KOENIG_LOOKUP_P (result) = koenig_p;
1912    }
1913  return result;
1914}
1915
1916/* Finish a call to a postfix increment or decrement or EXPR.  (Which
1917   is indicated by CODE, which should be POSTINCREMENT_EXPR or
1918   POSTDECREMENT_EXPR.)  */
1919
1920tree
1921finish_increment_expr (tree expr, enum tree_code code)
1922{
1923  return build_x_unary_op (code, expr);
1924}
1925
1926/* Finish a use of `this'.  Returns an expression for `this'.  */
1927
1928tree
1929finish_this_expr (void)
1930{
1931  tree result;
1932
1933  if (current_class_ptr)
1934    {
1935      result = current_class_ptr;
1936    }
1937  else if (current_function_decl
1938	   && DECL_STATIC_FUNCTION_P (current_function_decl))
1939    {
1940      error ("%<this%> is unavailable for static member functions");
1941      result = error_mark_node;
1942    }
1943  else
1944    {
1945      if (current_function_decl)
1946	error ("invalid use of %<this%> in non-member function");
1947      else
1948	error ("invalid use of %<this%> at top level");
1949      result = error_mark_node;
1950    }
1951
1952  return result;
1953}
1954
1955/* Finish a pseudo-destructor expression.  If SCOPE is NULL, the
1956   expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
1957   the TYPE for the type given.  If SCOPE is non-NULL, the expression
1958   was of the form `OBJECT.SCOPE::~DESTRUCTOR'.  */
1959
1960tree
1961finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
1962{
1963  if (destructor == error_mark_node)
1964    return error_mark_node;
1965
1966  gcc_assert (TYPE_P (destructor));
1967
1968  if (!processing_template_decl)
1969    {
1970      if (scope == error_mark_node)
1971	{
1972	  error ("invalid qualifying scope in pseudo-destructor name");
1973	  return error_mark_node;
1974	}
1975      if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
1976	{
1977	  error ("qualified type %qT does not match destructor name ~%qT",
1978		 scope, destructor);
1979	  return error_mark_node;
1980	}
1981
1982
1983      /* [expr.pseudo] says both:
1984
1985	   The type designated by the pseudo-destructor-name shall be
1986	   the same as the object type.
1987
1988	 and:
1989
1990	   The cv-unqualified versions of the object type and of the
1991	   type designated by the pseudo-destructor-name shall be the
1992	   same type.
1993
1994	 We implement the more generous second sentence, since that is
1995	 what most other compilers do.  */
1996      if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
1997						      destructor))
1998	{
1999	  error ("%qE is not of type %qT", object, destructor);
2000	  return error_mark_node;
2001	}
2002    }
2003
2004  return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2005}
2006
2007/* Finish an expression of the form CODE EXPR.  */
2008
2009tree
2010finish_unary_op_expr (enum tree_code code, tree expr)
2011{
2012  tree result = build_x_unary_op (code, expr);
2013  /* Inside a template, build_x_unary_op does not fold the
2014     expression. So check whether the result is folded before
2015     setting TREE_NEGATED_INT.  */
2016  if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
2017      && TREE_CODE (result) == INTEGER_CST
2018      && !TYPE_UNSIGNED (TREE_TYPE (result))
2019      && INT_CST_LT (result, integer_zero_node))
2020    {
2021      /* RESULT may be a cached INTEGER_CST, so we must copy it before
2022	 setting TREE_NEGATED_INT.  */
2023      result = copy_node (result);
2024      TREE_NEGATED_INT (result) = 1;
2025    }
2026  overflow_warning (result);
2027  return result;
2028}
2029
2030/* Finish a compound-literal expression.  TYPE is the type to which
2031   the INITIALIZER_LIST is being cast.  */
2032
2033tree
2034finish_compound_literal (tree type, VEC(constructor_elt,gc) *initializer_list)
2035{
2036  tree compound_literal;
2037
2038  if (!TYPE_OBJ_P (type))
2039    {
2040      error ("compound literal of non-object type %qT", type);
2041      return error_mark_node;
2042    }
2043
2044  /* Build a CONSTRUCTOR for the INITIALIZER_LIST.  */
2045  compound_literal = build_constructor (NULL_TREE, initializer_list);
2046  if (processing_template_decl)
2047    TREE_TYPE (compound_literal) = type;
2048  else
2049    {
2050      /* Check the initialization.  */
2051      compound_literal = reshape_init (type, compound_literal);
2052      compound_literal = digest_init (type, compound_literal);
2053      /* If the TYPE was an array type with an unknown bound, then we can
2054	 figure out the dimension now.  For example, something like:
2055
2056	   `(int []) { 2, 3 }'
2057
2058	 implies that the array has two elements.  */
2059      if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
2060	cp_complete_array_type (&TREE_TYPE (compound_literal),
2061				compound_literal, 1);
2062    }
2063
2064  /* Mark it as a compound-literal.  */
2065  if (TREE_CODE (compound_literal) == CONSTRUCTOR)
2066    TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2067
2068  return compound_literal;
2069}
2070
2071/* Return the declaration for the function-name variable indicated by
2072   ID.  */
2073
2074tree
2075finish_fname (tree id)
2076{
2077  tree decl;
2078
2079  decl = fname_decl (C_RID_CODE (id), id);
2080  if (processing_template_decl)
2081    decl = DECL_NAME (decl);
2082  return decl;
2083}
2084
2085/* Finish a translation unit.  */
2086
2087void
2088finish_translation_unit (void)
2089{
2090  /* In case there were missing closebraces,
2091     get us back to the global binding level.  */
2092  pop_everything ();
2093  while (current_namespace != global_namespace)
2094    pop_namespace ();
2095
2096  /* Do file scope __FUNCTION__ et al.  */
2097  finish_fname_decls ();
2098}
2099
2100/* Finish a template type parameter, specified as AGGR IDENTIFIER.
2101   Returns the parameter.  */
2102
2103tree
2104finish_template_type_parm (tree aggr, tree identifier)
2105{
2106  if (aggr != class_type_node)
2107    {
2108      pedwarn ("template type parameters must use the keyword %<class%> or %<typename%>");
2109      aggr = class_type_node;
2110    }
2111
2112  return build_tree_list (aggr, identifier);
2113}
2114
2115/* Finish a template template parameter, specified as AGGR IDENTIFIER.
2116   Returns the parameter.  */
2117
2118tree
2119finish_template_template_parm (tree aggr, tree identifier)
2120{
2121  tree decl = build_decl (TYPE_DECL, identifier, NULL_TREE);
2122  tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2123  DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2124  DECL_TEMPLATE_RESULT (tmpl) = decl;
2125  DECL_ARTIFICIAL (decl) = 1;
2126  end_template_decl ();
2127
2128  gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2129
2130  return finish_template_type_parm (aggr, tmpl);
2131}
2132
2133/* ARGUMENT is the default-argument value for a template template
2134   parameter.  If ARGUMENT is invalid, issue error messages and return
2135   the ERROR_MARK_NODE.  Otherwise, ARGUMENT itself is returned.  */
2136
2137tree
2138check_template_template_default_arg (tree argument)
2139{
2140  if (TREE_CODE (argument) != TEMPLATE_DECL
2141      && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2142      && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2143    {
2144      if (TREE_CODE (argument) == TYPE_DECL)
2145	error ("invalid use of type %qT as a default value for a template "
2146	       "template-parameter", TREE_TYPE (argument));
2147      else
2148	error ("invalid default argument for a template template parameter");
2149      return error_mark_node;
2150    }
2151
2152  return argument;
2153}
2154
2155/* Begin a class definition, as indicated by T.  */
2156
2157tree
2158begin_class_definition (tree t)
2159{
2160  if (t == error_mark_node)
2161    return error_mark_node;
2162
2163  if (processing_template_parmlist)
2164    {
2165      error ("definition of %q#T inside template parameter list", t);
2166      return error_mark_node;
2167    }
2168  /* A non-implicit typename comes from code like:
2169
2170       template <typename T> struct A {
2171	 template <typename U> struct A<T>::B ...
2172
2173     This is erroneous.  */
2174  else if (TREE_CODE (t) == TYPENAME_TYPE)
2175    {
2176      error ("invalid definition of qualified type %qT", t);
2177      t = error_mark_node;
2178    }
2179
2180  if (t == error_mark_node || ! IS_AGGR_TYPE (t))
2181    {
2182      t = make_aggr_type (RECORD_TYPE);
2183      pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2184    }
2185
2186  /* Update the location of the decl.  */
2187  DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
2188
2189  if (TYPE_BEING_DEFINED (t))
2190    {
2191      t = make_aggr_type (TREE_CODE (t));
2192      pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2193    }
2194  maybe_process_partial_specialization (t);
2195  pushclass (t);
2196  TYPE_BEING_DEFINED (t) = 1;
2197  if (flag_pack_struct)
2198    {
2199      tree v;
2200      TYPE_PACKED (t) = 1;
2201      /* Even though the type is being defined for the first time
2202	 here, there might have been a forward declaration, so there
2203	 might be cv-qualified variants of T.  */
2204      for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2205	TYPE_PACKED (v) = 1;
2206    }
2207  /* Reset the interface data, at the earliest possible
2208     moment, as it might have been set via a class foo;
2209     before.  */
2210  if (! TYPE_ANONYMOUS_P (t))
2211    {
2212      struct c_fileinfo *finfo = get_fileinfo (input_filename);
2213      CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2214      SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2215	(t, finfo->interface_unknown);
2216    }
2217  reset_specialization();
2218
2219  /* Make a declaration for this class in its own scope.  */
2220  build_self_reference ();
2221
2222  return t;
2223}
2224
2225/* Finish the member declaration given by DECL.  */
2226
2227void
2228finish_member_declaration (tree decl)
2229{
2230  if (decl == error_mark_node || decl == NULL_TREE)
2231    return;
2232
2233  if (decl == void_type_node)
2234    /* The COMPONENT was a friend, not a member, and so there's
2235       nothing for us to do.  */
2236    return;
2237
2238  /* We should see only one DECL at a time.  */
2239  gcc_assert (TREE_CHAIN (decl) == NULL_TREE);
2240
2241  /* Set up access control for DECL.  */
2242  TREE_PRIVATE (decl)
2243    = (current_access_specifier == access_private_node);
2244  TREE_PROTECTED (decl)
2245    = (current_access_specifier == access_protected_node);
2246  if (TREE_CODE (decl) == TEMPLATE_DECL)
2247    {
2248      TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2249      TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2250    }
2251
2252  /* Mark the DECL as a member of the current class.  */
2253  DECL_CONTEXT (decl) = current_class_type;
2254
2255  /* [dcl.link]
2256
2257     A C language linkage is ignored for the names of class members
2258     and the member function type of class member functions.  */
2259  if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2260    SET_DECL_LANGUAGE (decl, lang_cplusplus);
2261
2262  /* Put functions on the TYPE_METHODS list and everything else on the
2263     TYPE_FIELDS list.  Note that these are built up in reverse order.
2264     We reverse them (to obtain declaration order) in finish_struct.  */
2265  if (TREE_CODE (decl) == FUNCTION_DECL
2266      || DECL_FUNCTION_TEMPLATE_P (decl))
2267    {
2268      /* We also need to add this function to the
2269	 CLASSTYPE_METHOD_VEC.  */
2270      if (add_method (current_class_type, decl, NULL_TREE))
2271	{
2272	  TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2273	  TYPE_METHODS (current_class_type) = decl;
2274
2275	  maybe_add_class_template_decl_list (current_class_type, decl,
2276					      /*friend_p=*/0);
2277	}
2278    }
2279  /* Enter the DECL into the scope of the class.  */
2280  else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2281	   || pushdecl_class_level (decl))
2282    {
2283      /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2284	 go at the beginning.  The reason is that lookup_field_1
2285	 searches the list in order, and we want a field name to
2286	 override a type name so that the "struct stat hack" will
2287	 work.  In particular:
2288
2289	   struct S { enum E { }; int E } s;
2290	   s.E = 3;
2291
2292	 is valid.  In addition, the FIELD_DECLs must be maintained in
2293	 declaration order so that class layout works as expected.
2294	 However, we don't need that order until class layout, so we
2295	 save a little time by putting FIELD_DECLs on in reverse order
2296	 here, and then reversing them in finish_struct_1.  (We could
2297	 also keep a pointer to the correct insertion points in the
2298	 list.)  */
2299
2300      if (TREE_CODE (decl) == TYPE_DECL)
2301	TYPE_FIELDS (current_class_type)
2302	  = chainon (TYPE_FIELDS (current_class_type), decl);
2303      else
2304	{
2305	  TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2306	  TYPE_FIELDS (current_class_type) = decl;
2307	}
2308
2309      maybe_add_class_template_decl_list (current_class_type, decl,
2310					  /*friend_p=*/0);
2311    }
2312
2313  if (pch_file)
2314    note_decl_for_pch (decl);
2315}
2316
2317/* DECL has been declared while we are building a PCH file.  Perform
2318   actions that we might normally undertake lazily, but which can be
2319   performed now so that they do not have to be performed in
2320   translation units which include the PCH file.  */
2321
2322void
2323note_decl_for_pch (tree decl)
2324{
2325  gcc_assert (pch_file);
2326
2327  /* There's a good chance that we'll have to mangle names at some
2328     point, even if only for emission in debugging information.  */
2329  if ((TREE_CODE (decl) == VAR_DECL
2330       || TREE_CODE (decl) == FUNCTION_DECL)
2331      && !processing_template_decl)
2332    mangle_decl (decl);
2333}
2334
2335/* Finish processing a complete template declaration.  The PARMS are
2336   the template parameters.  */
2337
2338void
2339finish_template_decl (tree parms)
2340{
2341  if (parms)
2342    end_template_decl ();
2343  else
2344    end_specialization ();
2345}
2346
2347/* Finish processing a template-id (which names a type) of the form
2348   NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2349   template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2350   the scope of template-id indicated.  */
2351
2352tree
2353finish_template_type (tree name, tree args, int entering_scope)
2354{
2355  tree decl;
2356
2357  decl = lookup_template_class (name, args,
2358				NULL_TREE, NULL_TREE, entering_scope,
2359				tf_error | tf_warning | tf_user);
2360  if (decl != error_mark_node)
2361    decl = TYPE_STUB_DECL (decl);
2362
2363  return decl;
2364}
2365
2366/* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2367   Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2368   BASE_CLASS, or NULL_TREE if an error occurred.  The
2369   ACCESS_SPECIFIER is one of
2370   access_{default,public,protected_private}_node.  For a virtual base
2371   we set TREE_TYPE.  */
2372
2373tree
2374finish_base_specifier (tree base, tree access, bool virtual_p)
2375{
2376  tree result;
2377
2378  if (base == error_mark_node)
2379    {
2380      error ("invalid base-class specification");
2381      result = NULL_TREE;
2382    }
2383  else if (! is_aggr_type (base, 1))
2384    result = NULL_TREE;
2385  else
2386    {
2387      if (cp_type_quals (base) != 0)
2388	{
2389	  error ("base class %qT has cv qualifiers", base);
2390	  base = TYPE_MAIN_VARIANT (base);
2391	}
2392      result = build_tree_list (access, base);
2393      if (virtual_p)
2394	TREE_TYPE (result) = integer_type_node;
2395    }
2396
2397  return result;
2398}
2399
2400/* Issue a diagnostic that NAME cannot be found in SCOPE.  DECL is
2401   what we found when we tried to do the lookup.  */
2402
2403void
2404qualified_name_lookup_error (tree scope, tree name, tree decl)
2405{
2406  if (scope == error_mark_node)
2407    ; /* We already complained.  */
2408  else if (TYPE_P (scope))
2409    {
2410      if (!COMPLETE_TYPE_P (scope))
2411	error ("incomplete type %qT used in nested name specifier", scope);
2412      else if (TREE_CODE (decl) == TREE_LIST)
2413	{
2414	  error ("reference to %<%T::%D%> is ambiguous", scope, name);
2415	  print_candidates (decl);
2416	}
2417      else
2418	error ("%qD is not a member of %qT", name, scope);
2419    }
2420  else if (scope != global_namespace)
2421    error ("%qD is not a member of %qD", name, scope);
2422  else
2423    error ("%<::%D%> has not been declared", name);
2424}
2425
2426/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2427   id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2428   if non-NULL, is the type or namespace used to explicitly qualify
2429   ID_EXPRESSION.  DECL is the entity to which that name has been
2430   resolved.
2431
2432   *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2433   constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2434   be set to true if this expression isn't permitted in a
2435   constant-expression, but it is otherwise not set by this function.
2436   *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2437   constant-expression, but a non-constant expression is also
2438   permissible.
2439
2440   DONE is true if this expression is a complete postfix-expression;
2441   it is false if this expression is followed by '->', '[', '(', etc.
2442   ADDRESS_P is true iff this expression is the operand of '&'.
2443   TEMPLATE_P is true iff the qualified-id was of the form
2444   "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2445   appears as a template argument.
2446
2447   If an error occurs, and it is the kind of error that might cause
2448   the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2449   is the caller's responsibility to issue the message.  *ERROR_MSG
2450   will be a string with static storage duration, so the caller need
2451   not "free" it.
2452
2453   Return an expression for the entity, after issuing appropriate
2454   diagnostics.  This function is also responsible for transforming a
2455   reference to a non-static member into a COMPONENT_REF that makes
2456   the use of "this" explicit.
2457
2458   Upon return, *IDK will be filled in appropriately.  */
2459
2460tree
2461finish_id_expression (tree id_expression,
2462		      tree decl,
2463		      tree scope,
2464		      cp_id_kind *idk,
2465		      bool integral_constant_expression_p,
2466		      bool allow_non_integral_constant_expression_p,
2467		      bool *non_integral_constant_expression_p,
2468		      bool template_p,
2469		      bool done,
2470		      bool address_p,
2471		      bool template_arg_p,
2472		      const char **error_msg)
2473{
2474  /* Initialize the output parameters.  */
2475  *idk = CP_ID_KIND_NONE;
2476  *error_msg = NULL;
2477
2478  if (id_expression == error_mark_node)
2479    return error_mark_node;
2480  /* If we have a template-id, then no further lookup is
2481     required.  If the template-id was for a template-class, we
2482     will sometimes have a TYPE_DECL at this point.  */
2483  else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2484	   || TREE_CODE (decl) == TYPE_DECL)
2485    ;
2486  /* Look up the name.  */
2487  else
2488    {
2489      if (decl == error_mark_node)
2490	{
2491	  /* Name lookup failed.  */
2492	  if (scope
2493	      && (!TYPE_P (scope)
2494		  || (!dependent_type_p (scope)
2495		      && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2496			   && IDENTIFIER_TYPENAME_P (id_expression)
2497			   && dependent_type_p (TREE_TYPE (id_expression))))))
2498	    {
2499	      /* If the qualifying type is non-dependent (and the name
2500		 does not name a conversion operator to a dependent
2501		 type), issue an error.  */
2502	      qualified_name_lookup_error (scope, id_expression, decl);
2503	      return error_mark_node;
2504	    }
2505	  else if (!scope)
2506	    {
2507	      /* It may be resolved via Koenig lookup.  */
2508	      *idk = CP_ID_KIND_UNQUALIFIED;
2509	      return id_expression;
2510	    }
2511	  else
2512	    decl = id_expression;
2513	}
2514      /* If DECL is a variable that would be out of scope under
2515	 ANSI/ISO rules, but in scope in the ARM, name lookup
2516	 will succeed.  Issue a diagnostic here.  */
2517      else
2518	decl = check_for_out_of_scope_variable (decl);
2519
2520      /* Remember that the name was used in the definition of
2521	 the current class so that we can check later to see if
2522	 the meaning would have been different after the class
2523	 was entirely defined.  */
2524      if (!scope && decl != error_mark_node)
2525	maybe_note_name_used_in_class (id_expression, decl);
2526
2527      /* Disallow uses of local variables from containing functions.  */
2528      if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2529	{
2530	  tree context = decl_function_context (decl);
2531	  if (context != NULL_TREE && context != current_function_decl
2532	      && ! TREE_STATIC (decl))
2533	    {
2534	      error (TREE_CODE (decl) == VAR_DECL
2535		     ? "use of %<auto%> variable from containing function"
2536		     : "use of parameter from containing function");
2537	      error ("  %q+#D declared here", decl);
2538	      return error_mark_node;
2539	    }
2540	}
2541    }
2542
2543  /* If we didn't find anything, or what we found was a type,
2544     then this wasn't really an id-expression.  */
2545  if (TREE_CODE (decl) == TEMPLATE_DECL
2546      && !DECL_FUNCTION_TEMPLATE_P (decl))
2547    {
2548      *error_msg = "missing template arguments";
2549      return error_mark_node;
2550    }
2551  else if (TREE_CODE (decl) == TYPE_DECL
2552	   || TREE_CODE (decl) == NAMESPACE_DECL)
2553    {
2554      *error_msg = "expected primary-expression";
2555      return error_mark_node;
2556    }
2557
2558  /* If the name resolved to a template parameter, there is no
2559     need to look it up again later.  */
2560  if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2561      || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2562    {
2563      tree r;
2564
2565      *idk = CP_ID_KIND_NONE;
2566      if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2567	decl = TEMPLATE_PARM_DECL (decl);
2568      r = convert_from_reference (DECL_INITIAL (decl));
2569
2570      if (integral_constant_expression_p
2571	  && !dependent_type_p (TREE_TYPE (decl))
2572	  && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2573	{
2574	  if (!allow_non_integral_constant_expression_p)
2575	    error ("template parameter %qD of type %qT is not allowed in "
2576		   "an integral constant expression because it is not of "
2577		   "integral or enumeration type", decl, TREE_TYPE (decl));
2578	  *non_integral_constant_expression_p = true;
2579	}
2580      return r;
2581    }
2582  /* Similarly, we resolve enumeration constants to their
2583     underlying values.  */
2584  else if (TREE_CODE (decl) == CONST_DECL)
2585    {
2586      *idk = CP_ID_KIND_NONE;
2587      if (!processing_template_decl)
2588	return DECL_INITIAL (decl);
2589      return decl;
2590    }
2591  else
2592    {
2593      bool dependent_p;
2594
2595      /* If the declaration was explicitly qualified indicate
2596	 that.  The semantics of `A::f(3)' are different than
2597	 `f(3)' if `f' is virtual.  */
2598      *idk = (scope
2599	      ? CP_ID_KIND_QUALIFIED
2600	      : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2601		 ? CP_ID_KIND_TEMPLATE_ID
2602		 : CP_ID_KIND_UNQUALIFIED));
2603
2604
2605      /* [temp.dep.expr]
2606
2607	 An id-expression is type-dependent if it contains an
2608	 identifier that was declared with a dependent type.
2609
2610	 The standard is not very specific about an id-expression that
2611	 names a set of overloaded functions.  What if some of them
2612	 have dependent types and some of them do not?  Presumably,
2613	 such a name should be treated as a dependent name.  */
2614      /* Assume the name is not dependent.  */
2615      dependent_p = false;
2616      if (!processing_template_decl)
2617	/* No names are dependent outside a template.  */
2618	;
2619      /* A template-id where the name of the template was not resolved
2620	 is definitely dependent.  */
2621      else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2622	       && (TREE_CODE (TREE_OPERAND (decl, 0))
2623		   == IDENTIFIER_NODE))
2624	dependent_p = true;
2625      /* For anything except an overloaded function, just check its
2626	 type.  */
2627      else if (!is_overloaded_fn (decl))
2628	dependent_p
2629	  = dependent_type_p (TREE_TYPE (decl));
2630      /* For a set of overloaded functions, check each of the
2631	 functions.  */
2632      else
2633	{
2634	  tree fns = decl;
2635
2636	  if (BASELINK_P (fns))
2637	    fns = BASELINK_FUNCTIONS (fns);
2638
2639	  /* For a template-id, check to see if the template
2640	     arguments are dependent.  */
2641	  if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2642	    {
2643	      tree args = TREE_OPERAND (fns, 1);
2644	      dependent_p = any_dependent_template_arguments_p (args);
2645	      /* The functions are those referred to by the
2646		 template-id.  */
2647	      fns = TREE_OPERAND (fns, 0);
2648	    }
2649
2650	  /* If there are no dependent template arguments, go through
2651	     the overloaded functions.  */
2652	  while (fns && !dependent_p)
2653	    {
2654	      tree fn = OVL_CURRENT (fns);
2655
2656	      /* Member functions of dependent classes are
2657		 dependent.  */
2658	      if (TREE_CODE (fn) == FUNCTION_DECL
2659		  && type_dependent_expression_p (fn))
2660		dependent_p = true;
2661	      else if (TREE_CODE (fn) == TEMPLATE_DECL
2662		       && dependent_template_p (fn))
2663		dependent_p = true;
2664
2665	      fns = OVL_NEXT (fns);
2666	    }
2667	}
2668
2669      /* If the name was dependent on a template parameter, we will
2670	 resolve the name at instantiation time.  */
2671      if (dependent_p)
2672	{
2673	  /* Create a SCOPE_REF for qualified names, if the scope is
2674	     dependent.  */
2675	  if (scope)
2676	    {
2677	      /* Since this name was dependent, the expression isn't
2678		 constant -- yet.  No error is issued because it might
2679		 be constant when things are instantiated.  */
2680	      if (integral_constant_expression_p)
2681		*non_integral_constant_expression_p = true;
2682	      if (TYPE_P (scope))
2683		{
2684		  if (address_p && done)
2685		    decl = finish_qualified_id_expr (scope, decl,
2686						     done, address_p,
2687						     template_p,
2688						     template_arg_p);
2689		  else if (dependent_type_p (scope))
2690		    decl = build_qualified_name (/*type=*/NULL_TREE,
2691						 scope,
2692						 id_expression,
2693						 template_p);
2694		  else if (DECL_P (decl))
2695		    decl = build_qualified_name (TREE_TYPE (decl),
2696						 scope,
2697						 id_expression,
2698						 template_p);
2699		}
2700	      if (TREE_TYPE (decl))
2701		decl = convert_from_reference (decl);
2702	      return decl;
2703	    }
2704	  /* A TEMPLATE_ID already contains all the information we
2705	     need.  */
2706	  if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
2707	    return id_expression;
2708	  *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
2709	  /* If we found a variable, then name lookup during the
2710	     instantiation will always resolve to the same VAR_DECL
2711	     (or an instantiation thereof).  */
2712	  if (TREE_CODE (decl) == VAR_DECL
2713	      || TREE_CODE (decl) == PARM_DECL)
2714	    return convert_from_reference (decl);
2715	  /* The same is true for FIELD_DECL, but we also need to
2716	     make sure that the syntax is correct.  */
2717	  else if (TREE_CODE (decl) == FIELD_DECL)
2718	    {
2719	      /* Since SCOPE is NULL here, this is an unqualified name.
2720		 Access checking has been performed during name lookup
2721		 already.  Turn off checking to avoid duplicate errors.  */
2722	      push_deferring_access_checks (dk_no_check);
2723	      decl = finish_non_static_data_member
2724		       (decl, current_class_ref,
2725			/*qualifying_scope=*/NULL_TREE);
2726	      pop_deferring_access_checks ();
2727	      return decl;
2728	    }
2729	  return id_expression;
2730	}
2731
2732      /* Only certain kinds of names are allowed in constant
2733	 expression.  Enumerators and template parameters have already
2734	 been handled above.  */
2735      if (integral_constant_expression_p
2736	  && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
2737	  && ! builtin_valid_in_constant_expr_p (decl))
2738	{
2739	  if (!allow_non_integral_constant_expression_p)
2740	    {
2741	      error ("%qD cannot appear in a constant-expression", decl);
2742	      return error_mark_node;
2743	    }
2744	  *non_integral_constant_expression_p = true;
2745	}
2746
2747      if (TREE_CODE (decl) == NAMESPACE_DECL)
2748	{
2749	  error ("use of namespace %qD as expression", decl);
2750	  return error_mark_node;
2751	}
2752      else if (DECL_CLASS_TEMPLATE_P (decl))
2753	{
2754	  error ("use of class template %qT as expression", decl);
2755	  return error_mark_node;
2756	}
2757      else if (TREE_CODE (decl) == TREE_LIST)
2758	{
2759	  /* Ambiguous reference to base members.  */
2760	  error ("request for member %qD is ambiguous in "
2761		 "multiple inheritance lattice", id_expression);
2762	  print_candidates (decl);
2763	  return error_mark_node;
2764	}
2765
2766      /* Mark variable-like entities as used.  Functions are similarly
2767	 marked either below or after overload resolution.  */
2768      if (TREE_CODE (decl) == VAR_DECL
2769	  || TREE_CODE (decl) == PARM_DECL
2770	  || TREE_CODE (decl) == RESULT_DECL)
2771	mark_used (decl);
2772
2773      if (scope)
2774	{
2775	  decl = (adjust_result_of_qualified_name_lookup
2776		  (decl, scope, current_class_type));
2777
2778	  if (TREE_CODE (decl) == FUNCTION_DECL)
2779	    mark_used (decl);
2780
2781	  if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
2782	    decl = finish_qualified_id_expr (scope,
2783					     decl,
2784					     done,
2785					     address_p,
2786					     template_p,
2787					     template_arg_p);
2788	  else
2789	    {
2790	      tree r = convert_from_reference (decl);
2791
2792	      if (processing_template_decl && TYPE_P (scope))
2793		r = build_qualified_name (TREE_TYPE (r),
2794					  scope, decl,
2795					  template_p);
2796	      decl = r;
2797	    }
2798	}
2799      else if (TREE_CODE (decl) == FIELD_DECL)
2800	{
2801	  /* Since SCOPE is NULL here, this is an unqualified name.
2802	     Access checking has been performed during name lookup
2803	     already.  Turn off checking to avoid duplicate errors.  */
2804	  push_deferring_access_checks (dk_no_check);
2805	  decl = finish_non_static_data_member (decl, current_class_ref,
2806						/*qualifying_scope=*/NULL_TREE);
2807	  pop_deferring_access_checks ();
2808	}
2809      else if (is_overloaded_fn (decl))
2810	{
2811	  tree first_fn = OVL_CURRENT (decl);
2812
2813	  if (TREE_CODE (first_fn) == TEMPLATE_DECL)
2814	    first_fn = DECL_TEMPLATE_RESULT (first_fn);
2815
2816	  if (!really_overloaded_fn (decl))
2817	    mark_used (first_fn);
2818
2819	  if (!template_arg_p
2820	      && TREE_CODE (first_fn) == FUNCTION_DECL
2821	      && DECL_FUNCTION_MEMBER_P (first_fn)
2822	      && !shared_member_p (decl))
2823	    {
2824	      /* A set of member functions.  */
2825	      decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
2826	      return finish_class_member_access_expr (decl, id_expression,
2827						      /*template_p=*/false);
2828	    }
2829	}
2830      else
2831	{
2832	  if (DECL_P (decl) && DECL_NONLOCAL (decl)
2833	      && DECL_CLASS_SCOPE_P (decl)
2834	      && DECL_CONTEXT (decl) != current_class_type)
2835	    {
2836	      tree path;
2837
2838	      path = currently_open_derived_class (DECL_CONTEXT (decl));
2839	      perform_or_defer_access_check (TYPE_BINFO (path), decl);
2840	    }
2841
2842	  decl = convert_from_reference (decl);
2843	}
2844    }
2845
2846  if (TREE_DEPRECATED (decl))
2847    warn_deprecated_use (decl);
2848
2849  return decl;
2850}
2851
2852/* Implement the __typeof keyword: Return the type of EXPR, suitable for
2853   use as a type-specifier.  */
2854
2855tree
2856finish_typeof (tree expr)
2857{
2858  tree type;
2859
2860  if (type_dependent_expression_p (expr))
2861    {
2862      type = make_aggr_type (TYPEOF_TYPE);
2863      TYPEOF_TYPE_EXPR (type) = expr;
2864
2865      return type;
2866    }
2867
2868  type = TREE_TYPE (expr);
2869
2870  if (!type || type == unknown_type_node)
2871    {
2872      error ("type of %qE is unknown", expr);
2873      return error_mark_node;
2874    }
2875
2876  return type;
2877}
2878
2879/* Perform C++-specific checks for __builtin_offsetof before calling
2880   fold_offsetof.  */
2881
2882tree
2883finish_offsetof (tree expr)
2884{
2885  if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
2886    {
2887      error ("cannot apply %<offsetof%> to destructor %<~%T%>",
2888	      TREE_OPERAND (expr, 2));
2889      return error_mark_node;
2890    }
2891  if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
2892      || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
2893      || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
2894    {
2895      if (TREE_CODE (expr) == COMPONENT_REF
2896	  || TREE_CODE (expr) == COMPOUND_EXPR)
2897	expr = TREE_OPERAND (expr, 1);
2898      error ("cannot apply %<offsetof%> to member function %qD", expr);
2899      return error_mark_node;
2900    }
2901  return fold_offsetof (expr);
2902}
2903
2904/* Called from expand_body via walk_tree.  Replace all AGGR_INIT_EXPRs
2905   with equivalent CALL_EXPRs.  */
2906
2907static tree
2908simplify_aggr_init_exprs_r (tree* tp,
2909			    int* walk_subtrees,
2910			    void* data ATTRIBUTE_UNUSED)
2911{
2912  /* We don't need to walk into types; there's nothing in a type that
2913     needs simplification.  (And, furthermore, there are places we
2914     actively don't want to go.  For example, we don't want to wander
2915     into the default arguments for a FUNCTION_DECL that appears in a
2916     CALL_EXPR.)  */
2917  if (TYPE_P (*tp))
2918    {
2919      *walk_subtrees = 0;
2920      return NULL_TREE;
2921    }
2922  /* Only AGGR_INIT_EXPRs are interesting.  */
2923  else if (TREE_CODE (*tp) != AGGR_INIT_EXPR)
2924    return NULL_TREE;
2925
2926  simplify_aggr_init_expr (tp);
2927
2928  /* Keep iterating.  */
2929  return NULL_TREE;
2930}
2931
2932/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
2933   function is broken out from the above for the benefit of the tree-ssa
2934   project.  */
2935
2936void
2937simplify_aggr_init_expr (tree *tp)
2938{
2939  tree aggr_init_expr = *tp;
2940
2941  /* Form an appropriate CALL_EXPR.  */
2942  tree fn = TREE_OPERAND (aggr_init_expr, 0);
2943  tree args = TREE_OPERAND (aggr_init_expr, 1);
2944  tree slot = TREE_OPERAND (aggr_init_expr, 2);
2945  tree type = TREE_TYPE (slot);
2946
2947  tree call_expr;
2948  enum style_t { ctor, arg, pcc } style;
2949
2950  if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
2951    style = ctor;
2952#ifdef PCC_STATIC_STRUCT_RETURN
2953  else if (1)
2954    style = pcc;
2955#endif
2956  else
2957    {
2958      gcc_assert (TREE_ADDRESSABLE (type));
2959      style = arg;
2960    }
2961
2962  if (style == ctor)
2963    {
2964      /* Replace the first argument to the ctor with the address of the
2965	 slot.  */
2966      tree addr;
2967
2968      args = TREE_CHAIN (args);
2969      cxx_mark_addressable (slot);
2970      addr = build1 (ADDR_EXPR, build_pointer_type (type), slot);
2971      args = tree_cons (NULL_TREE, addr, args);
2972    }
2973
2974  call_expr = build3 (CALL_EXPR,
2975		      TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
2976		      fn, args, NULL_TREE);
2977
2978  if (style == arg)
2979    {
2980      /* Just mark it addressable here, and leave the rest to
2981	 expand_call{,_inline}.  */
2982      cxx_mark_addressable (slot);
2983      CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
2984      call_expr = build2 (MODIFY_EXPR, TREE_TYPE (call_expr), slot, call_expr);
2985    }
2986  else if (style == pcc)
2987    {
2988      /* If we're using the non-reentrant PCC calling convention, then we
2989	 need to copy the returned value out of the static buffer into the
2990	 SLOT.  */
2991      push_deferring_access_checks (dk_no_check);
2992      call_expr = build_aggr_init (slot, call_expr,
2993				   DIRECT_BIND | LOOKUP_ONLYCONVERTING);
2994      pop_deferring_access_checks ();
2995      call_expr = build (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
2996    }
2997
2998  *tp = call_expr;
2999}
3000
3001/* Emit all thunks to FN that should be emitted when FN is emitted.  */
3002
3003static void
3004emit_associated_thunks (tree fn)
3005{
3006  /* When we use vcall offsets, we emit thunks with the virtual
3007     functions to which they thunk. The whole point of vcall offsets
3008     is so that you can know statically the entire set of thunks that
3009     will ever be needed for a given virtual function, thereby
3010     enabling you to output all the thunks with the function itself.  */
3011  if (DECL_VIRTUAL_P (fn))
3012    {
3013      tree thunk;
3014
3015      for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
3016	{
3017	  if (!THUNK_ALIAS (thunk))
3018	    {
3019	      use_thunk (thunk, /*emit_p=*/1);
3020	      if (DECL_RESULT_THUNK_P (thunk))
3021		{
3022		  tree probe;
3023
3024		  for (probe = DECL_THUNKS (thunk);
3025		       probe; probe = TREE_CHAIN (probe))
3026		    use_thunk (probe, /*emit_p=*/1);
3027		}
3028	    }
3029	  else
3030	    gcc_assert (!DECL_THUNKS (thunk));
3031	}
3032    }
3033}
3034
3035/* Generate RTL for FN.  */
3036
3037void
3038expand_body (tree fn)
3039{
3040  tree saved_function;
3041
3042  /* Compute the appropriate object-file linkage for inline
3043     functions.  */
3044  if (DECL_DECLARED_INLINE_P (fn))
3045    import_export_decl (fn);
3046
3047  /* If FN is external, then there's no point in generating RTL for
3048     it.  This situation can arise with an inline function under
3049     `-fexternal-templates'; we instantiate the function, even though
3050     we're not planning on emitting it, in case we get a chance to
3051     inline it.  */
3052  if (DECL_EXTERNAL (fn))
3053    return;
3054
3055  /* ??? When is this needed?  */
3056  saved_function = current_function_decl;
3057
3058  /* Emit any thunks that should be emitted at the same time as FN.  */
3059  emit_associated_thunks (fn);
3060
3061  /* This function is only called from cgraph, or recursively from
3062     emit_associated_thunks.  In neither case should we be currently
3063     generating trees for a function.  */
3064  gcc_assert (function_depth == 0);
3065
3066  tree_rest_of_compilation (fn);
3067
3068  current_function_decl = saved_function;
3069
3070  if (DECL_CLONED_FUNCTION_P (fn))
3071    {
3072      /* If this is a clone, go through the other clones now and mark
3073	 their parameters used.  We have to do that here, as we don't
3074	 know whether any particular clone will be expanded, and
3075	 therefore cannot pick one arbitrarily.  */
3076      tree probe;
3077
3078      for (probe = TREE_CHAIN (DECL_CLONED_FUNCTION (fn));
3079	   probe && DECL_CLONED_FUNCTION_P (probe);
3080	   probe = TREE_CHAIN (probe))
3081	{
3082	  tree parms;
3083
3084	  for (parms = DECL_ARGUMENTS (probe);
3085	       parms; parms = TREE_CHAIN (parms))
3086	    TREE_USED (parms) = 1;
3087	}
3088    }
3089}
3090
3091/* Generate RTL for FN.  */
3092
3093void
3094expand_or_defer_fn (tree fn)
3095{
3096  /* When the parser calls us after finishing the body of a template
3097     function, we don't really want to expand the body.  */
3098  if (processing_template_decl)
3099    {
3100      /* Normally, collection only occurs in rest_of_compilation.  So,
3101	 if we don't collect here, we never collect junk generated
3102	 during the processing of templates until we hit a
3103	 non-template function.  It's not safe to do this inside a
3104	 nested class, though, as the parser may have local state that
3105	 is not a GC root.  */
3106      if (!function_depth)
3107	ggc_collect ();
3108      return;
3109    }
3110
3111  /* Replace AGGR_INIT_EXPRs with appropriate CALL_EXPRs.  */
3112  walk_tree_without_duplicates (&DECL_SAVED_TREE (fn),
3113				simplify_aggr_init_exprs_r,
3114				NULL);
3115
3116  /* If this is a constructor or destructor body, we have to clone
3117     it.  */
3118  if (maybe_clone_body (fn))
3119    {
3120      /* We don't want to process FN again, so pretend we've written
3121	 it out, even though we haven't.  */
3122      TREE_ASM_WRITTEN (fn) = 1;
3123      return;
3124    }
3125
3126  /* If this function is marked with the constructor attribute, add it
3127     to the list of functions to be called along with constructors
3128     from static duration objects.  */
3129  if (DECL_STATIC_CONSTRUCTOR (fn))
3130    static_ctors = tree_cons (NULL_TREE, fn, static_ctors);
3131
3132  /* If this function is marked with the destructor attribute, add it
3133     to the list of functions to be called along with destructors from
3134     static duration objects.  */
3135  if (DECL_STATIC_DESTRUCTOR (fn))
3136    static_dtors = tree_cons (NULL_TREE, fn, static_dtors);
3137
3138  /* We make a decision about linkage for these functions at the end
3139     of the compilation.  Until that point, we do not want the back
3140     end to output them -- but we do want it to see the bodies of
3141     these functions so that it can inline them as appropriate.  */
3142  if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3143    {
3144      if (DECL_INTERFACE_KNOWN (fn))
3145	/* We've already made a decision as to how this function will
3146	   be handled.  */;
3147      else if (!at_eof)
3148	{
3149	  DECL_EXTERNAL (fn) = 1;
3150	  DECL_NOT_REALLY_EXTERN (fn) = 1;
3151	  note_vague_linkage_fn (fn);
3152	  /* A non-template inline function with external linkage will
3153	     always be COMDAT.  As we must eventually determine the
3154	     linkage of all functions, and as that causes writes to
3155	     the data mapped in from the PCH file, it's advantageous
3156	     to mark the functions at this point.  */
3157	  if (!DECL_IMPLICIT_INSTANTIATION (fn))
3158	    {
3159	      /* This function must have external linkage, as
3160		 otherwise DECL_INTERFACE_KNOWN would have been
3161		 set.  */
3162	      gcc_assert (TREE_PUBLIC (fn));
3163	      comdat_linkage (fn);
3164	      DECL_INTERFACE_KNOWN (fn) = 1;
3165	    }
3166	}
3167      else
3168	import_export_decl (fn);
3169
3170      /* If the user wants us to keep all inline functions, then mark
3171	 this function as needed so that finish_file will make sure to
3172	 output it later.  */
3173      if (flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
3174	mark_needed (fn);
3175    }
3176
3177  /* There's no reason to do any of the work here if we're only doing
3178     semantic analysis; this code just generates RTL.  */
3179  if (flag_syntax_only)
3180    return;
3181
3182  function_depth++;
3183
3184  /* Expand or defer, at the whim of the compilation unit manager.  */
3185  cgraph_finalize_function (fn, function_depth > 1);
3186
3187  function_depth--;
3188}
3189
3190struct nrv_data
3191{
3192  tree var;
3193  tree result;
3194  htab_t visited;
3195};
3196
3197/* Helper function for walk_tree, used by finalize_nrv below.  */
3198
3199static tree
3200finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3201{
3202  struct nrv_data *dp = (struct nrv_data *)data;
3203  void **slot;
3204
3205  /* No need to walk into types.  There wouldn't be any need to walk into
3206     non-statements, except that we have to consider STMT_EXPRs.  */
3207  if (TYPE_P (*tp))
3208    *walk_subtrees = 0;
3209  /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3210     but differs from using NULL_TREE in that it indicates that we care
3211     about the value of the RESULT_DECL.  */
3212  else if (TREE_CODE (*tp) == RETURN_EXPR)
3213    TREE_OPERAND (*tp, 0) = dp->result;
3214  /* Change all cleanups for the NRV to only run when an exception is
3215     thrown.  */
3216  else if (TREE_CODE (*tp) == CLEANUP_STMT
3217	   && CLEANUP_DECL (*tp) == dp->var)
3218    CLEANUP_EH_ONLY (*tp) = 1;
3219  /* Replace the DECL_EXPR for the NRV with an initialization of the
3220     RESULT_DECL, if needed.  */
3221  else if (TREE_CODE (*tp) == DECL_EXPR
3222	   && DECL_EXPR_DECL (*tp) == dp->var)
3223    {
3224      tree init;
3225      if (DECL_INITIAL (dp->var)
3226	  && DECL_INITIAL (dp->var) != error_mark_node)
3227	{
3228	  init = build2 (INIT_EXPR, void_type_node, dp->result,
3229			 DECL_INITIAL (dp->var));
3230	  DECL_INITIAL (dp->var) = error_mark_node;
3231	}
3232      else
3233	init = build_empty_stmt ();
3234      SET_EXPR_LOCUS (init, EXPR_LOCUS (*tp));
3235      *tp = init;
3236    }
3237  /* And replace all uses of the NRV with the RESULT_DECL.  */
3238  else if (*tp == dp->var)
3239    *tp = dp->result;
3240
3241  /* Avoid walking into the same tree more than once.  Unfortunately, we
3242     can't just use walk_tree_without duplicates because it would only call
3243     us for the first occurrence of dp->var in the function body.  */
3244  slot = htab_find_slot (dp->visited, *tp, INSERT);
3245  if (*slot)
3246    *walk_subtrees = 0;
3247  else
3248    *slot = *tp;
3249
3250  /* Keep iterating.  */
3251  return NULL_TREE;
3252}
3253
3254/* Called from finish_function to implement the named return value
3255   optimization by overriding all the RETURN_EXPRs and pertinent
3256   CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3257   RESULT_DECL for the function.  */
3258
3259void
3260finalize_nrv (tree *tp, tree var, tree result)
3261{
3262  struct nrv_data data;
3263
3264  /* Copy debugging information from VAR to RESULT.  */
3265  DECL_NAME (result) = DECL_NAME (var);
3266  DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3267  DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
3268  DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3269  DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3270  /* Don't forget that we take its address.  */
3271  TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3272
3273  data.var = var;
3274  data.result = result;
3275  data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3276  walk_tree (tp, finalize_nrv_r, &data, 0);
3277  htab_delete (data.visited);
3278}
3279
3280/* Perform initialization related to this module.  */
3281
3282void
3283init_cp_semantics (void)
3284{
3285}
3286
3287#include "gt-cp-semantics.h"
3288