OSDN Git Service

* Makefile.in: Update.
[pf3gnuchains/gcc-fork.git] / gcc / cp / tree.c
1 /* Language-dependent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001 Free Software Foundation, Inc.
4    Hacked by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "obstack.h"
26 #include "tree.h"
27 #include "cp-tree.h"
28 #include "flags.h"
29 #include "rtl.h"
30 #include "toplev.h"
31 #include "ggc.h"
32 #include "insn-config.h"
33 #include "integrate.h"
34 #include "tree-inline.h"
35
36 static tree bot_manip PARAMS ((tree *, int *, void *));
37 static tree bot_replace PARAMS ((tree *, int *, void *));
38 static tree build_cplus_array_type_1 PARAMS ((tree, tree));
39 static int list_hash_eq PARAMS ((const void *, const void *));
40 static hashval_t list_hash_pieces PARAMS ((tree, tree, tree));
41 static hashval_t list_hash PARAMS ((const void *));
42 static cp_lvalue_kind lvalue_p_1 PARAMS ((tree, int));
43 static tree no_linkage_helper PARAMS ((tree *, int *, void *));
44 static tree build_srcloc PARAMS ((const char *, int));
45 static tree mark_local_for_remap_r PARAMS ((tree *, int *, void *));
46 static tree cp_unsave_r PARAMS ((tree *, int *, void *));
47 static void cp_unsave PARAMS ((tree *));
48 static tree build_target_expr PARAMS ((tree, tree));
49 static tree count_trees_r PARAMS ((tree *, int *, void *));
50 static tree verify_stmt_tree_r PARAMS ((tree *, int *, void *));
51 static tree find_tree_r PARAMS ((tree *, int *, void *));
52 extern int cp_statement_code_p PARAMS ((enum tree_code));
53
54 static tree handle_java_interface_attribute PARAMS ((tree *, tree, tree, int, bool *));
55 static tree handle_com_interface_attribute PARAMS ((tree *, tree, tree, int, bool *));
56 static tree handle_init_priority_attribute PARAMS ((tree *, tree, tree, int, bool *));
57
58 /* If REF is an lvalue, returns the kind of lvalue that REF is.
59    Otherwise, returns clk_none.  If TREAT_CLASS_RVALUES_AS_LVALUES is
60    non-zero, rvalues of class type are considered lvalues.  */
61
62 static cp_lvalue_kind
63 lvalue_p_1 (ref, treat_class_rvalues_as_lvalues)
64      tree ref;
65      int treat_class_rvalues_as_lvalues;
66 {
67   cp_lvalue_kind op1_lvalue_kind = clk_none;
68   cp_lvalue_kind op2_lvalue_kind = clk_none;
69
70   if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
71     return clk_ordinary;
72
73   if (ref == current_class_ptr)
74     return clk_none;
75
76   switch (TREE_CODE (ref))
77     {
78       /* preincrements and predecrements are valid lvals, provided
79          what they refer to are valid lvals.  */
80     case PREINCREMENT_EXPR:
81     case PREDECREMENT_EXPR:
82     case SAVE_EXPR:
83     case UNSAVE_EXPR:
84     case TRY_CATCH_EXPR:
85     case WITH_CLEANUP_EXPR:
86     case REALPART_EXPR:
87     case IMAGPART_EXPR:
88       /* This shouldn't be here, but there are lots of places in the compiler
89          that are sloppy about tacking on NOP_EXPRs to the same type when
90          no actual conversion is happening.  */
91     case NOP_EXPR:
92       return lvalue_p_1 (TREE_OPERAND (ref, 0),
93                          treat_class_rvalues_as_lvalues);
94
95     case COMPONENT_REF:
96       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
97                                     treat_class_rvalues_as_lvalues);
98       if (op1_lvalue_kind 
99           /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
100              situations.  */
101           && TREE_CODE (TREE_OPERAND (ref, 1)) == FIELD_DECL
102           && DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
103         {
104           /* Clear the ordinary bit.  If this object was a class
105              rvalue we want to preserve that information.  */
106           op1_lvalue_kind &= ~clk_ordinary;
107           /* The lvalue is for a btifield.  */
108           op1_lvalue_kind |= clk_bitfield;
109         }
110       return op1_lvalue_kind;
111
112     case STRING_CST:
113       return clk_ordinary;
114
115     case VAR_DECL:
116       if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
117           && DECL_LANG_SPECIFIC (ref)
118           && DECL_IN_AGGR_P (ref))
119         return clk_none;
120     case INDIRECT_REF:
121     case ARRAY_REF:
122     case PARM_DECL:
123     case RESULT_DECL:
124       if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
125         return clk_ordinary;
126       break;
127
128       /* A currently unresolved scope ref.  */
129     case SCOPE_REF:
130       my_friendly_abort (103);
131     case OFFSET_REF:
132       if (TREE_CODE (TREE_OPERAND (ref, 1)) == FUNCTION_DECL)
133         return clk_ordinary;
134       /* Fall through.  */
135     case MAX_EXPR:
136     case MIN_EXPR:
137       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 0),
138                                     treat_class_rvalues_as_lvalues);
139       op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
140                                     treat_class_rvalues_as_lvalues);
141       break;
142
143     case COND_EXPR:
144       op1_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 1),
145                                     treat_class_rvalues_as_lvalues);
146       op2_lvalue_kind = lvalue_p_1 (TREE_OPERAND (ref, 2),
147                                     treat_class_rvalues_as_lvalues);
148       break;
149
150     case MODIFY_EXPR:
151       return clk_ordinary;
152
153     case COMPOUND_EXPR:
154       return lvalue_p_1 (TREE_OPERAND (ref, 1),
155                          treat_class_rvalues_as_lvalues);
156
157     case TARGET_EXPR:
158       return treat_class_rvalues_as_lvalues ? clk_class : clk_none;
159
160     case CALL_EXPR:
161     case VA_ARG_EXPR:
162       return ((treat_class_rvalues_as_lvalues
163                && IS_AGGR_TYPE (TREE_TYPE (ref)))
164               ? clk_class : clk_none);
165
166     case FUNCTION_DECL:
167       /* All functions (except non-static-member functions) are
168          lvalues.  */
169       return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref) 
170               ? clk_none : clk_ordinary);
171
172     default:
173       break;
174     }
175
176   /* If one operand is not an lvalue at all, then this expression is
177      not an lvalue.  */
178   if (!op1_lvalue_kind || !op2_lvalue_kind)
179     return clk_none;
180
181   /* Otherwise, it's an lvalue, and it has all the odd properties
182      contributed by either operand.  */
183   op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
184   /* It's not an ordinary lvalue if it involves either a bit-field or
185      a class rvalue.  */
186   if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
187     op1_lvalue_kind &= ~clk_ordinary;
188   return op1_lvalue_kind;
189 }
190
191 /* If REF is an lvalue, returns the kind of lvalue that REF is.
192    Otherwise, returns clk_none.  Lvalues can be assigned, unless they
193    have TREE_READONLY, or unless they are FUNCTION_DECLs.  Lvalues can
194    have their address taken, unless they have DECL_REGISTER.  */
195
196 cp_lvalue_kind
197 real_lvalue_p (ref)
198      tree ref;
199 {
200   return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/0);
201 }
202
203 /* This differs from real_lvalue_p in that class rvalues are
204    considered lvalues.  */
205
206 int
207 lvalue_p (ref)
208      tree ref;
209 {
210   return 
211     (lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/1) != clk_none);
212 }
213
214 /* Return nonzero if REF is an lvalue valid for this language;
215    otherwise, print an error message and return zero.  */
216
217 int
218 lvalue_or_else (ref, string)
219      tree ref;
220      const char *string;
221 {
222   int win = lvalue_p (ref);
223   if (! win)
224     error ("non-lvalue in %s", string);
225   return win;
226 }
227
228 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
229
230 static tree
231 build_target_expr (decl, value)
232      tree decl;
233      tree value;
234 {
235   tree t;
236
237   t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
238              maybe_build_cleanup (decl), NULL_TREE);
239   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
240      ignore the TARGET_EXPR.  If there really turn out to be no
241      side-effects, then the optimizer should be able to get rid of
242      whatever code is generated anyhow.  */
243   TREE_SIDE_EFFECTS (t) = 1;
244
245   return t;
246 }
247
248 /* INIT is a CALL_EXPR which needs info about its target.
249    TYPE is the type that this initialization should appear to have.
250
251    Build an encapsulation of the initialization to perform
252    and return it so that it can be processed by language-independent
253    and language-specific expression expanders.  */
254
255 tree
256 build_cplus_new (type, init)
257      tree type;
258      tree init;
259 {
260   tree fn;
261   tree slot;
262   tree rval;
263
264   /* Make sure that we're not trying to create an instance of an
265      abstract class.  */
266   abstract_virtuals_error (NULL_TREE, type);
267
268   if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != AGGR_INIT_EXPR)
269     return convert (type, init);
270
271   slot = build (VAR_DECL, type);
272   DECL_ARTIFICIAL (slot) = 1;
273   DECL_CONTEXT (slot) = current_function_decl;
274   layout_decl (slot, 0);
275
276   /* We split the CALL_EXPR into its function and its arguments here.
277      Then, in expand_expr, we put them back together.  The reason for
278      this is that this expression might be a default argument
279      expression.  In that case, we need a new temporary every time the
280      expression is used.  That's what break_out_target_exprs does; it
281      replaces every AGGR_INIT_EXPR with a copy that uses a fresh
282      temporary slot.  Then, expand_expr builds up a call-expression
283      using the new slot.  */
284   fn = TREE_OPERAND (init, 0);
285   rval = build (AGGR_INIT_EXPR, type, fn, TREE_OPERAND (init, 1), slot);
286   TREE_SIDE_EFFECTS (rval) = 1;
287   AGGR_INIT_VIA_CTOR_P (rval) 
288     = (TREE_CODE (fn) == ADDR_EXPR
289        && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
290        && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
291   rval = build_target_expr (slot, rval);
292
293   return rval;
294 }
295
296 /* Buidl a TARGET_EXPR using INIT to initialize a new temporary of the
297    indicated TYPE.  */
298
299 tree
300 build_target_expr_with_type (init, type)
301      tree init;
302      tree type;
303 {
304   tree slot;
305   tree rval;
306
307   if (TREE_CODE (init) == TARGET_EXPR)
308     return init;
309
310   slot = build (VAR_DECL, type);
311   DECL_ARTIFICIAL (slot) = 1;
312   DECL_CONTEXT (slot) = current_function_decl;
313   layout_decl (slot, 0);
314   rval = build_target_expr (slot, init);
315
316   return rval;
317 }
318
319 /* Like build_target_expr_with_type, but use the type of INIT.  */
320
321 tree
322 get_target_expr (init)
323      tree init;
324 {
325   return build_target_expr_with_type (init, TREE_TYPE (init));
326 }
327
328 /* Recursively perform a preorder search EXP for CALL_EXPRs, making
329    copies where they are found.  Returns a deep copy all nodes transitively
330    containing CALL_EXPRs.  */
331
332 tree
333 break_out_calls (exp)
334      tree exp;
335 {
336   register tree t1, t2 = NULL_TREE;
337   register enum tree_code code;
338   register int changed = 0;
339   register int i;
340
341   if (exp == NULL_TREE)
342     return exp;
343
344   code = TREE_CODE (exp);
345
346   if (code == CALL_EXPR)
347     return copy_node (exp);
348
349   /* Don't try and defeat a save_expr, as it should only be done once.  */
350     if (code == SAVE_EXPR)
351        return exp;
352
353   switch (TREE_CODE_CLASS (code))
354     {
355     default:
356       abort ();
357
358     case 'c':  /* a constant */
359     case 't':  /* a type node */
360     case 'x':  /* something random, like an identifier or an ERROR_MARK.  */
361       return exp;
362
363     case 'd':  /* A decl node */
364 #if 0                               /* This is bogus.  jason 9/21/94 */
365
366       t1 = break_out_calls (DECL_INITIAL (exp));
367       if (t1 != DECL_INITIAL (exp))
368         {
369           exp = copy_node (exp);
370           DECL_INITIAL (exp) = t1;
371         }
372 #endif
373       return exp;
374
375     case 'b':  /* A block node */
376       {
377         /* Don't know how to handle these correctly yet.   Must do a
378            break_out_calls on all DECL_INITIAL values for local variables,
379            and also break_out_calls on all sub-blocks and sub-statements.  */
380         abort ();
381       }
382       return exp;
383
384     case 'e':  /* an expression */
385     case 'r':  /* a reference */
386     case 's':  /* an expression with side effects */
387       for (i = TREE_CODE_LENGTH (code) - 1; i >= 0; i--)
388         {
389           t1 = break_out_calls (TREE_OPERAND (exp, i));
390           if (t1 != TREE_OPERAND (exp, i))
391             {
392               exp = copy_node (exp);
393               TREE_OPERAND (exp, i) = t1;
394             }
395         }
396       return exp;
397
398     case '<':  /* a comparison expression */
399     case '2':  /* a binary arithmetic expression */
400       t2 = break_out_calls (TREE_OPERAND (exp, 1));
401       if (t2 != TREE_OPERAND (exp, 1))
402         changed = 1;
403     case '1':  /* a unary arithmetic expression */
404       t1 = break_out_calls (TREE_OPERAND (exp, 0));
405       if (t1 != TREE_OPERAND (exp, 0))
406         changed = 1;
407       if (changed)
408         {
409           if (TREE_CODE_LENGTH (code) == 1)
410             return build1 (code, TREE_TYPE (exp), t1);
411           else
412             return build (code, TREE_TYPE (exp), t1, t2);
413         }
414       return exp;
415     }
416
417 }
418 \f
419 /* Construct, lay out and return the type of methods belonging to class
420    BASETYPE and whose arguments are described by ARGTYPES and whose values
421    are described by RETTYPE.  If each type exists already, reuse it.  */
422
423 tree
424 build_cplus_method_type (basetype, rettype, argtypes)
425      tree basetype, rettype, argtypes;
426 {
427   register tree t;
428   tree ptype;
429   int hashcode;
430
431   /* Make a node of the sort we want.  */
432   t = make_node (METHOD_TYPE);
433
434   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
435   TREE_TYPE (t) = rettype;
436   ptype = build_pointer_type (basetype);
437
438   /* The actual arglist for this function includes a "hidden" argument
439      which is "this".  Put it into the list of argument types.  */
440   argtypes = tree_cons (NULL_TREE, ptype, argtypes);
441   TYPE_ARG_TYPES (t) = argtypes;
442   TREE_SIDE_EFFECTS (argtypes) = 1;  /* Mark first argtype as "artificial".  */
443
444   /* If we already have such a type, use the old one and free this one.
445      Note that it also frees up the above cons cell if found.  */
446   hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) +
447     type_hash_list (argtypes);
448
449   t = type_hash_canon (hashcode, t);
450
451   if (!COMPLETE_TYPE_P (t))
452     layout_type (t);
453
454   return t;
455 }
456
457 static tree
458 build_cplus_array_type_1 (elt_type, index_type)
459      tree elt_type;
460      tree index_type;
461 {
462   tree t;
463
464   if (elt_type == error_mark_node || index_type == error_mark_node)
465     return error_mark_node;
466
467   if (processing_template_decl 
468       || uses_template_parms (elt_type) 
469       || uses_template_parms (index_type))
470     {
471       t = make_node (ARRAY_TYPE);
472       TREE_TYPE (t) = elt_type;
473       TYPE_DOMAIN (t) = index_type;
474     }
475   else
476     t = build_array_type (elt_type, index_type);
477
478   /* Push these needs up so that initialization takes place
479      more easily.  */
480   TYPE_NEEDS_CONSTRUCTING (t) 
481     = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
482   TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) 
483     = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
484   return t;
485 }
486
487 tree
488 build_cplus_array_type (elt_type, index_type)
489      tree elt_type;
490      tree index_type;
491 {
492   tree t;
493   int type_quals = CP_TYPE_QUALS (elt_type);
494
495   if (type_quals != TYPE_UNQUALIFIED)
496     elt_type = cp_build_qualified_type (elt_type, TYPE_UNQUALIFIED);
497
498   t = build_cplus_array_type_1 (elt_type, index_type);
499
500   if (type_quals != TYPE_UNQUALIFIED)
501     t = cp_build_qualified_type (t, type_quals);
502
503   return t;
504 }
505 \f
506 /* Make a variant of TYPE, qualified with the TYPE_QUALS.  Handles
507    arrays correctly.  In particular, if TYPE is an array of T's, and
508    TYPE_QUALS is non-empty, returns an array of qualified T's.  If
509    at attempt is made to qualify a type illegally, and COMPLAIN is
510    non-zero, an error is issued.  If COMPLAIN is zero, error_mark_node
511    is returned.  */
512
513 tree
514 cp_build_qualified_type_real (type, type_quals, complain)
515      tree type;
516      int type_quals;
517      int complain;
518 {
519   tree result;
520
521   if (type == error_mark_node)
522     return type;
523
524   if (type_quals == CP_TYPE_QUALS (type))
525     return type;
526
527   /* A restrict-qualified pointer type must be a pointer (or reference)
528      to object or incomplete type.  */
529   if ((type_quals & TYPE_QUAL_RESTRICT)
530       && TREE_CODE (type) != TEMPLATE_TYPE_PARM
531       && (!POINTER_TYPE_P (type)
532           || TYPE_PTRMEM_P (type)
533           || TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE))
534     {
535       if (complain)
536         cp_error ("`%T' cannot be `restrict'-qualified", type);
537       else
538         return error_mark_node;
539
540       type_quals &= ~TYPE_QUAL_RESTRICT;
541     }
542
543   if (type_quals != TYPE_UNQUALIFIED
544       && TREE_CODE (type) == FUNCTION_TYPE)
545     {
546       if (complain)
547         cp_error ("`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified", type);
548       else
549         return error_mark_node;
550       type_quals = TYPE_UNQUALIFIED;
551     }
552   else if (TREE_CODE (type) == ARRAY_TYPE)
553     {
554       /* In C++, the qualification really applies to the array element
555          type.  Obtain the appropriately qualified element type.  */
556       tree t;
557       tree element_type 
558         = cp_build_qualified_type_real (TREE_TYPE (type), 
559                                         type_quals,
560                                         complain);
561
562       if (element_type == error_mark_node)
563         return error_mark_node;
564
565       /* See if we already have an identically qualified type.  */
566       t = get_qualified_type (type, type_quals);
567
568       /* If we didn't already have it, create it now.  */
569       if (!t)
570         {
571           /* Make a new array type, just like the old one, but with the
572              appropriately qualified element type.  */
573           t = build_type_copy (type);
574           TREE_TYPE (t) = element_type;
575         }
576
577       /* Even if we already had this variant, we update
578          TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
579          they changed since the variant was originally created.  
580          
581          This seems hokey; if there is some way to use a previous
582          variant *without* coming through here,
583          TYPE_NEEDS_CONSTRUCTING will never be updated.  */
584       TYPE_NEEDS_CONSTRUCTING (t) 
585         = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
586       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) 
587         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
588       return t;
589     }
590   else if (TYPE_PTRMEMFUNC_P (type))
591     {
592       /* For a pointer-to-member type, we can't just return a
593          cv-qualified version of the RECORD_TYPE.  If we do, we
594          haven't change the field that contains the actual pointer to
595          a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong.  */
596       tree t;
597
598       t = TYPE_PTRMEMFUNC_FN_TYPE (type);
599       t = cp_build_qualified_type_real (t, type_quals, complain);
600       return build_ptrmemfunc_type (t);
601     }
602
603   /* Retrieve (or create) the appropriately qualified variant.  */
604   result = build_qualified_type (type, type_quals);
605
606   /* If this was a pointer-to-method type, and we just made a copy,
607      then we need to clear the cached associated
608      pointer-to-member-function type; it is not valid for the new
609      type.  */
610   if (result != type 
611       && TREE_CODE (type) == POINTER_TYPE
612       && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)
613     TYPE_SET_PTRMEMFUNC_TYPE (result, NULL_TREE);
614
615   return result;
616 }
617
618 /* Returns the canonical version of TYPE.  In other words, if TYPE is
619    a typedef, returns the underlying type.  The cv-qualification of
620    the type returned matches the type input; they will always be
621    compatible types.  */
622
623 tree
624 canonical_type_variant (t)
625      tree t;
626 {
627   return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), CP_TYPE_QUALS (t));
628 }
629 \f
630 /* Makes new binfos for the indirect bases under BINFO, and updates
631    BINFO_OFFSET for them and their bases.  */
632
633 void
634 unshare_base_binfos (binfo)
635      tree binfo;
636 {
637   tree binfos = BINFO_BASETYPES (binfo);
638   tree new_binfo;
639   int j;
640
641   if (binfos == NULL_TREE)
642     return;
643
644   /* Now unshare the structure beneath BINFO.  */
645   for (j = TREE_VEC_LENGTH (binfos)-1;
646        j >= 0; j--)
647     {
648       tree base_binfo = TREE_VEC_ELT (binfos, j);
649       new_binfo = TREE_VEC_ELT (binfos, j)
650         = make_binfo (BINFO_OFFSET (base_binfo),
651                       base_binfo,
652                       BINFO_VTABLE (base_binfo),
653                       BINFO_VIRTUALS (base_binfo));
654       TREE_VIA_PUBLIC (new_binfo) = TREE_VIA_PUBLIC (base_binfo);
655       TREE_VIA_PROTECTED (new_binfo) = TREE_VIA_PROTECTED (base_binfo);
656       TREE_VIA_VIRTUAL (new_binfo) = TREE_VIA_VIRTUAL (base_binfo);
657       BINFO_INHERITANCE_CHAIN (new_binfo) = binfo;
658       BINFO_PRIMARY_BASE_OF (new_binfo) = NULL_TREE;
659       unshare_base_binfos (new_binfo);
660     }
661 }
662
663 \f
664 /* Hashing of lists so that we don't make duplicates.
665    The entry point is `list_hash_canon'.  */
666
667 /* Now here is the hash table.  When recording a list, it is added
668    to the slot whose index is the hash code mod the table size.
669    Note that the hash table is used for several kinds of lists.
670    While all these live in the same table, they are completely independent,
671    and the hash code is computed differently for each of these.  */
672
673 static htab_t list_hash_table;
674
675 struct list_proxy 
676 {
677   tree purpose;
678   tree value;
679   tree chain;
680 };
681
682 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
683    for a node we are thinking about adding).  */
684
685 static int
686 list_hash_eq (entry, data)
687      const void *entry;
688      const void *data;
689 {
690   tree t = (tree) entry;
691   struct list_proxy *proxy = (struct list_proxy *) data;
692
693   return (TREE_VALUE (t) == proxy->value
694           && TREE_PURPOSE (t) == proxy->purpose
695           && TREE_CHAIN (t) == proxy->chain);
696 }
697
698 /* Compute a hash code for a list (chain of TREE_LIST nodes
699    with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
700    TREE_COMMON slots), by adding the hash codes of the individual entries.  */
701
702 static hashval_t
703 list_hash_pieces (purpose, value, chain)
704      tree purpose;
705      tree value;
706      tree chain;
707 {
708   hashval_t hashcode = 0;
709   
710   if (chain)
711     hashcode += TYPE_HASH (chain);
712   
713   if (value)
714     hashcode += TYPE_HASH (value);
715   else
716     hashcode += 1007;
717   if (purpose)
718     hashcode += TYPE_HASH (purpose);
719   else
720     hashcode += 1009;
721   return hashcode;
722 }
723
724 /* Hash an already existing TREE_LIST.  */
725
726 static hashval_t
727 list_hash (p)
728      const void *p;
729 {
730   tree t = (tree) p;
731   return list_hash_pieces (TREE_PURPOSE (t), 
732                            TREE_VALUE (t), 
733                            TREE_CHAIN (t));
734 }
735
736 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
737    object for an identical list if one already exists.  Otherwise, build a
738    new one, and record it as the canonical object.  */
739
740 tree
741 hash_tree_cons (purpose, value, chain)
742      tree purpose, value, chain;
743 {
744   int hashcode = 0;
745   PTR* slot;
746   struct list_proxy proxy;
747
748   /* Hash the list node.  */
749   hashcode = list_hash_pieces (purpose, value, chain);
750   /* Create a proxy for the TREE_LIST we would like to create.  We
751      don't actually create it so as to avoid creating garbage.  */
752   proxy.purpose = purpose;
753   proxy.value = value;
754   proxy.chain = chain;
755   /* See if it is already in the table.  */
756   slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
757                                    INSERT);
758   /* If not, create a new node.  */
759   if (!*slot)
760     *slot = (PTR) tree_cons (purpose, value, chain);
761   return *slot;
762 }
763
764 /* Constructor for hashed lists.  */
765
766 tree
767 hash_tree_chain (value, chain)
768      tree value, chain;
769 {
770   return hash_tree_cons (NULL_TREE, value, chain);
771 }
772
773 /* Similar, but used for concatenating two lists.  */
774
775 tree
776 hash_chainon (list1, list2)
777      tree list1, list2;
778 {
779   if (list2 == 0)
780     return list1;
781   if (list1 == 0)
782     return list2;
783   if (TREE_CHAIN (list1) == NULL_TREE)
784     return hash_tree_chain (TREE_VALUE (list1), list2);
785   return hash_tree_chain (TREE_VALUE (list1),
786                           hash_chainon (TREE_CHAIN (list1), list2));
787 }
788 \f
789 /* Build an association between TYPE and some parameters:
790
791    OFFSET is the offset added to `this' to convert it to a pointer
792    of type `TYPE *'
793
794    BINFO is the base binfo to use, if we are deriving from one.  This
795    is necessary, as we want specialized parent binfos from base
796    classes, so that the VTABLE_NAMEs of bases are for the most derived
797    type, instead of the simple type.
798
799    VTABLE is the virtual function table with which to initialize
800    sub-objects of type TYPE.
801
802    VIRTUALS are the virtual functions sitting in VTABLE.  */
803
804 tree
805 make_binfo (offset, binfo, vtable, virtuals)
806      tree offset, binfo;
807      tree vtable, virtuals;
808 {
809   tree new_binfo = make_tree_vec (11);
810   tree type;
811
812   if (TREE_CODE (binfo) == TREE_VEC)
813     type = BINFO_TYPE (binfo);
814   else
815     {
816       type = binfo;
817       binfo = CLASS_TYPE_P (type) ? TYPE_BINFO (binfo) : NULL_TREE;
818     }
819
820   TREE_TYPE (new_binfo) = TYPE_MAIN_VARIANT (type);
821   BINFO_OFFSET (new_binfo) = offset;
822   BINFO_VTABLE (new_binfo) = vtable;
823   BINFO_VIRTUALS (new_binfo) = virtuals;
824
825   if (binfo && BINFO_BASETYPES (binfo) != NULL_TREE)
826     BINFO_BASETYPES (new_binfo) = copy_node (BINFO_BASETYPES (binfo));      
827   return new_binfo;
828 }
829
830 /* Return the binfo value for ELEM in TYPE.  */
831
832 tree
833 binfo_value (elem, type)
834      tree elem;
835      tree type;
836 {
837   if (get_base_distance (elem, type, 0, (tree *)0) == -2)
838     compiler_error ("base class `%s' ambiguous in binfo_value",
839                     TYPE_NAME_STRING (elem));
840   if (elem == type)
841     return TYPE_BINFO (type);
842   if (TREE_CODE (elem) == RECORD_TYPE && TYPE_BINFO (elem) == type)
843     return type;
844   return get_binfo (elem, type, 0);
845 }
846
847 /* Return a TREE_LIST whose TREE_VALUE nodes along the
848    BINFO_INHERITANCE_CHAIN for BINFO, but in the opposite order.  In
849    other words, while the BINFO_INHERITANCE_CHAIN goes from base
850    classes to derived classes, the reversed path goes from derived
851    classes to base classes.  */
852
853 tree
854 reverse_path (binfo)
855      tree binfo;
856 {
857   tree reversed_path;
858
859   reversed_path = NULL_TREE;
860   while (binfo) 
861     {
862       reversed_path = tree_cons (NULL_TREE, binfo, reversed_path);
863       binfo = BINFO_INHERITANCE_CHAIN (binfo);
864     }
865
866   return reversed_path;
867 }
868
869 void
870 debug_binfo (elem)
871      tree elem;
872 {
873   HOST_WIDE_INT n;
874   tree virtuals;
875
876   fprintf (stderr, "type \"%s\", offset = ",
877            TYPE_NAME_STRING (BINFO_TYPE (elem)));
878   fprintf (stderr, HOST_WIDE_INT_PRINT_DEC,
879            TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
880   fprintf (stderr, "\nvtable type:\n");
881   debug_tree (BINFO_TYPE (elem));
882   if (BINFO_VTABLE (elem))
883     fprintf (stderr, "vtable decl \"%s\"\n",
884              IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
885   else
886     fprintf (stderr, "no vtable decl yet\n");
887   fprintf (stderr, "virtuals:\n");
888   virtuals = BINFO_VIRTUALS (elem);
889   n = 0;
890
891   while (virtuals)
892     {
893       tree fndecl = TREE_VALUE (virtuals);
894       fprintf (stderr, "%s [%ld =? %ld]\n",
895                IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
896                (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
897       ++n;
898       virtuals = TREE_CHAIN (virtuals);
899     }
900 }
901
902 int
903 count_functions (t)
904      tree t;
905 {
906   int i;
907   if (TREE_CODE (t) == FUNCTION_DECL)
908     return 1;
909   else if (TREE_CODE (t) == OVERLOAD)
910     {
911       for (i=0; t; t = OVL_CHAIN (t))
912         i++;
913       return i;
914     }
915
916   my_friendly_abort (359);
917   return 0;
918 }
919
920 int
921 is_overloaded_fn (x)
922      tree x;
923 {
924   /* A baselink is also considered an overloaded function.  */
925   if (TREE_CODE (x) == OFFSET_REF)
926     x = TREE_OPERAND (x, 1);
927   if (BASELINK_P (x))
928     x = TREE_VALUE (x);
929   return (TREE_CODE (x) == FUNCTION_DECL
930           || TREE_CODE (x) == TEMPLATE_ID_EXPR
931           || DECL_FUNCTION_TEMPLATE_P (x)
932           || TREE_CODE (x) == OVERLOAD);
933 }
934
935 int
936 really_overloaded_fn (x)
937      tree x;
938 {     
939   /* A baselink is also considered an overloaded function.  */
940   if (TREE_CODE (x) == OFFSET_REF)
941     x = TREE_OPERAND (x, 1);
942   if (BASELINK_P (x))
943     x = TREE_VALUE (x);
944   return (TREE_CODE (x) == OVERLOAD 
945           && (TREE_CHAIN (x) != NULL_TREE
946               || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
947 }
948
949 tree
950 get_first_fn (from)
951      tree from;
952 {
953   my_friendly_assert (is_overloaded_fn (from), 9);
954   /* A baselink is also considered an overloaded function. */
955   if (BASELINK_P (from))
956     from = TREE_VALUE (from);
957   return OVL_CURRENT (from);
958 }
959
960 /* Returns nonzero if T is a ->* or .* expression that refers to a
961    member function.  */
962
963 int
964 bound_pmf_p (t)
965      tree t;
966 {
967   return (TREE_CODE (t) == OFFSET_REF
968           && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1))));
969 }
970
971 /* Return a new OVL node, concatenating it with the old one. */
972
973 tree
974 ovl_cons (decl, chain)
975      tree decl;
976      tree chain;
977 {
978   tree result = make_node (OVERLOAD);
979   TREE_TYPE (result) = unknown_type_node;
980   OVL_FUNCTION (result) = decl;
981   TREE_CHAIN (result) = chain;
982   
983   return result;
984 }
985
986 /* Build a new overloaded function. If this is the first one,
987    just return it; otherwise, ovl_cons the _DECLs */
988
989 tree
990 build_overload (decl, chain)
991      tree decl;
992      tree chain;
993 {
994   if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
995     return decl;
996   if (chain && TREE_CODE (chain) != OVERLOAD)
997     chain = ovl_cons (chain, NULL_TREE);
998   return ovl_cons (decl, chain);
999 }
1000
1001 /* True if fn is in ovl. */
1002
1003 int
1004 ovl_member (fn, ovl)
1005      tree fn;
1006      tree ovl;
1007 {
1008   if (ovl == NULL_TREE)
1009     return 0;
1010   if (TREE_CODE (ovl) != OVERLOAD)
1011     return ovl == fn;
1012   for (; ovl; ovl = OVL_CHAIN (ovl))
1013     if (OVL_FUNCTION (ovl) == fn)
1014       return 1;
1015   return 0;
1016 }
1017
1018 int
1019 is_aggr_type_2 (t1, t2)
1020      tree t1, t2;
1021 {
1022   if (TREE_CODE (t1) != TREE_CODE (t2))
1023     return 0;
1024   return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
1025 }
1026
1027 /* Returns non-zero if CODE is the code for a statement.  */
1028
1029 int
1030 cp_statement_code_p (code)
1031      enum tree_code code;
1032 {
1033   switch (code)
1034     {
1035     case SUBOBJECT:
1036     case CLEANUP_STMT:
1037     case CTOR_STMT:
1038     case CTOR_INITIALIZER:
1039     case RETURN_INIT:
1040     case TRY_BLOCK:
1041     case HANDLER:
1042     case EH_SPEC_BLOCK:
1043     case USING_STMT:
1044     case TAG_DEFN:
1045       return 1;
1046
1047     default:
1048       return 0;
1049     }
1050 }
1051 \f
1052 #define PRINT_RING_SIZE 4
1053
1054 const char *
1055 lang_printable_name (decl, v)
1056      tree decl;
1057      int v;
1058 {
1059   static tree decl_ring[PRINT_RING_SIZE];
1060   static char *print_ring[PRINT_RING_SIZE];
1061   static int ring_counter;
1062   int i;
1063
1064   /* Only cache functions.  */
1065   if (v < 2
1066       || TREE_CODE (decl) != FUNCTION_DECL
1067       || DECL_LANG_SPECIFIC (decl) == 0)
1068     return lang_decl_name (decl, v);
1069
1070   /* See if this print name is lying around.  */
1071   for (i = 0; i < PRINT_RING_SIZE; i++)
1072     if (decl_ring[i] == decl)
1073       /* yes, so return it.  */
1074       return print_ring[i];
1075
1076   if (++ring_counter == PRINT_RING_SIZE)
1077     ring_counter = 0;
1078
1079   if (current_function_decl != NULL_TREE)
1080     {
1081       if (decl_ring[ring_counter] == current_function_decl)
1082         ring_counter += 1;
1083       if (ring_counter == PRINT_RING_SIZE)
1084         ring_counter = 0;
1085       if (decl_ring[ring_counter] == current_function_decl)
1086         my_friendly_abort (106);
1087     }
1088
1089   if (print_ring[ring_counter])
1090     free (print_ring[ring_counter]);
1091
1092   print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
1093   decl_ring[ring_counter] = decl;
1094   return print_ring[ring_counter];
1095 }
1096 \f
1097 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
1098    listed in RAISES.  */
1099
1100 tree
1101 build_exception_variant (type, raises)
1102      tree type;
1103      tree raises;
1104 {
1105   tree v = TYPE_MAIN_VARIANT (type);
1106   int type_quals = TYPE_QUALS (type);
1107
1108   for (; v; v = TYPE_NEXT_VARIANT (v))
1109     if (TYPE_QUALS (v) == type_quals
1110         && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
1111       return v;
1112
1113   /* Need to build a new variant.  */
1114   v = build_type_copy (type);
1115   TYPE_RAISES_EXCEPTIONS (v) = raises;
1116   return v;
1117 }
1118
1119 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1120    BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1121    arguments.  */
1122
1123 tree
1124 bind_template_template_parm (t, newargs)
1125      tree t;
1126      tree newargs;
1127 {
1128   tree decl = TYPE_NAME (t);
1129   tree t2;
1130
1131   t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
1132   decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1133
1134   /* These nodes have to be created to reflect new TYPE_DECL and template
1135      arguments.  */
1136   TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
1137   TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
1138   TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
1139     = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t), 
1140                  newargs, NULL_TREE);
1141
1142   TREE_TYPE (decl) = t2;
1143   TYPE_NAME (t2) = decl;
1144   TYPE_STUB_DECL (t2) = decl;
1145   TYPE_SIZE (t2) = 0;
1146
1147   return t2;
1148 }
1149
1150 /* Called from count_trees via walk_tree.  */
1151
1152 static tree
1153 count_trees_r (tp, walk_subtrees, data)
1154      tree *tp ATTRIBUTE_UNUSED;
1155      int *walk_subtrees ATTRIBUTE_UNUSED;
1156      void *data;
1157 {
1158   ++ *((int*) data);
1159   return NULL_TREE;
1160 }
1161
1162 /* Debugging function for measuring the rough complexity of a tree
1163    representation.  */
1164
1165 int
1166 count_trees (t)
1167      tree t;
1168 {
1169   int n_trees = 0;
1170   walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
1171   return n_trees;
1172 }  
1173
1174 /* Called from verify_stmt_tree via walk_tree.  */
1175
1176 static tree
1177 verify_stmt_tree_r (tp, walk_subtrees, data)
1178      tree *tp;
1179      int *walk_subtrees ATTRIBUTE_UNUSED;
1180      void *data;
1181 {
1182   tree t = *tp;
1183   htab_t *statements = (htab_t *) data;
1184   void **slot;
1185
1186   if (!statement_code_p (TREE_CODE (t)))
1187     return NULL_TREE;
1188
1189   /* If this statement is already present in the hash table, then
1190      there is a circularity in the statement tree.  */
1191   if (htab_find (*statements, t))
1192     my_friendly_abort (20000727);
1193   
1194   slot = htab_find_slot (*statements, t, INSERT);
1195   *slot = t;
1196
1197   return NULL_TREE;
1198 }
1199
1200 /* Debugging function to check that the statement T has not been
1201    corrupted.  For now, this function simply checks that T contains no
1202    circularities.  */
1203
1204 void
1205 verify_stmt_tree (t)
1206      tree t;
1207 {
1208   htab_t statements;
1209   statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1210   walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
1211   htab_delete (statements);
1212 }
1213
1214 /* Called from find_tree via walk_tree.  */
1215
1216 static tree
1217 find_tree_r (tp, walk_subtrees, data)
1218      tree *tp;
1219      int *walk_subtrees ATTRIBUTE_UNUSED;
1220      void *data;
1221 {
1222   if (*tp == (tree) data)
1223     return (tree) data;
1224
1225   return NULL_TREE;
1226 }
1227
1228 /* Returns X if X appears in the tree structure rooted at T.  */
1229
1230 tree
1231 find_tree (t, x)
1232      tree t;
1233      tree x;
1234 {
1235   return walk_tree_without_duplicates (&t, find_tree_r, x);
1236 }
1237
1238 /* Passed to walk_tree.  Checks for the use of types with no linkage.  */
1239
1240 static tree
1241 no_linkage_helper (tp, walk_subtrees, data)
1242      tree *tp;
1243      int *walk_subtrees ATTRIBUTE_UNUSED;
1244      void *data ATTRIBUTE_UNUSED;
1245 {
1246   tree t = *tp;
1247
1248   if (TYPE_P (t)
1249       && (CLASS_TYPE_P (t) || TREE_CODE (t) == ENUMERAL_TYPE)
1250       && (decl_function_context (TYPE_MAIN_DECL (t))
1251           || TYPE_ANONYMOUS_P (t)))
1252     return t;
1253   return NULL_TREE;
1254 }
1255
1256 /* Check if the type T depends on a type with no linkage and if so, return
1257    it.  */
1258
1259 tree
1260 no_linkage_check (t)
1261      tree t;
1262 {
1263   /* There's no point in checking linkage on template functions; we
1264      can't know their complete types.  */
1265   if (processing_template_decl)
1266     return NULL_TREE;
1267
1268   t = walk_tree_without_duplicates (&t, no_linkage_helper, NULL);
1269   if (t != error_mark_node)
1270     return t;
1271   return NULL_TREE;
1272 }
1273
1274 #ifdef GATHER_STATISTICS
1275 extern int depth_reached;
1276 #endif
1277
1278 void
1279 cxx_print_statistics ()
1280 {
1281   print_search_statistics ();
1282   print_class_statistics ();
1283 #ifdef GATHER_STATISTICS
1284   fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1285            depth_reached);
1286 #endif
1287 }
1288
1289 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1290    (which is an ARRAY_TYPE).  This counts only elements of the top
1291    array.  */
1292
1293 tree
1294 array_type_nelts_top (type)
1295      tree type;
1296 {
1297   return fold (build (PLUS_EXPR, sizetype,
1298                       array_type_nelts (type),
1299                       integer_one_node));
1300 }
1301
1302 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1303    (which is an ARRAY_TYPE).  This one is a recursive count of all
1304    ARRAY_TYPEs that are clumped together.  */
1305
1306 tree
1307 array_type_nelts_total (type)
1308      tree type;
1309 {
1310   tree sz = array_type_nelts_top (type);
1311   type = TREE_TYPE (type);
1312   while (TREE_CODE (type) == ARRAY_TYPE)
1313     {
1314       tree n = array_type_nelts_top (type);
1315       sz = fold (build (MULT_EXPR, sizetype, sz, n));
1316       type = TREE_TYPE (type);
1317     }
1318   return sz;
1319 }
1320
1321 /* Called from break_out_target_exprs via mapcar.  */
1322
1323 static tree
1324 bot_manip (tp, walk_subtrees, data)
1325      tree *tp;
1326      int *walk_subtrees;
1327      void *data;
1328 {
1329   splay_tree target_remap = ((splay_tree) data);
1330   tree t = *tp;
1331
1332   if (TREE_CONSTANT (t))
1333     {
1334       /* There can't be any TARGET_EXPRs or their slot variables below
1335          this point.  We used to check !TREE_SIDE_EFFECTS, but then we
1336          failed to copy an ADDR_EXPR of the slot VAR_DECL.  */
1337       *walk_subtrees = 0;
1338       return NULL_TREE;
1339     }
1340   if (TREE_CODE (t) == TARGET_EXPR)
1341     {
1342       tree u;
1343
1344       if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
1345         {
1346           mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
1347           u = build_cplus_new
1348             (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
1349         }
1350       else 
1351         {
1352           u = build_target_expr_with_type
1353             (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t));
1354         }
1355
1356       /* Map the old variable to the new one.  */
1357       splay_tree_insert (target_remap, 
1358                          (splay_tree_key) TREE_OPERAND (t, 0), 
1359                          (splay_tree_value) TREE_OPERAND (u, 0));
1360
1361       /* Replace the old expression with the new version.  */
1362       *tp = u;
1363       /* We don't have to go below this point; the recursive call to
1364          break_out_target_exprs will have handled anything below this
1365          point.  */
1366       *walk_subtrees = 0;
1367       return NULL_TREE;
1368     }
1369   else if (TREE_CODE (t) == CALL_EXPR)
1370     mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
1371
1372   /* Make a copy of this node.  */
1373   return copy_tree_r (tp, walk_subtrees, NULL);
1374 }
1375   
1376 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1377    DATA is really a splay-tree mapping old variables to new
1378    variables.  */
1379
1380 static tree
1381 bot_replace (t, walk_subtrees, data)
1382      tree *t;
1383      int *walk_subtrees ATTRIBUTE_UNUSED;
1384      void *data;
1385 {
1386   splay_tree target_remap = ((splay_tree) data);
1387
1388   if (TREE_CODE (*t) == VAR_DECL)
1389     {
1390       splay_tree_node n = splay_tree_lookup (target_remap,
1391                                              (splay_tree_key) *t);
1392       if (n)
1393         *t = (tree) n->value;
1394     }
1395
1396   return NULL_TREE;
1397 }
1398         
1399 /* When we parse a default argument expression, we may create
1400    temporary variables via TARGET_EXPRs.  When we actually use the
1401    default-argument expression, we make a copy of the expression, but
1402    we must replace the temporaries with appropriate local versions.  */
1403
1404 tree
1405 break_out_target_exprs (t)
1406      tree t;
1407 {
1408   static int target_remap_count;
1409   static splay_tree target_remap;
1410
1411   if (!target_remap_count++)
1412     target_remap = splay_tree_new (splay_tree_compare_pointers, 
1413                                    /*splay_tree_delete_key_fn=*/NULL, 
1414                                    /*splay_tree_delete_value_fn=*/NULL);
1415   walk_tree (&t, bot_manip, target_remap, NULL);
1416   walk_tree (&t, bot_replace, target_remap, NULL);
1417
1418   if (!--target_remap_count)
1419     {
1420       splay_tree_delete (target_remap);
1421       target_remap = NULL;
1422     }
1423
1424   return t;
1425 }
1426
1427 /* Obstack used for allocating nodes in template function and variable
1428    definitions.  */
1429
1430 /* Similar to `build_nt', except that we set TREE_COMPLEXITY to be the
1431    current line number.  */
1432
1433 tree
1434 build_min_nt VPARAMS ((enum tree_code code, ...))
1435 {
1436   register tree t;
1437   register int length;
1438   register int i;
1439
1440   VA_OPEN (p, code);
1441   VA_FIXEDARG (p, enum tree_code, code);
1442
1443   t = make_node (code);
1444   length = TREE_CODE_LENGTH (code);
1445   TREE_COMPLEXITY (t) = lineno;
1446
1447   for (i = 0; i < length; i++)
1448     {
1449       tree x = va_arg (p, tree);
1450       TREE_OPERAND (t, i) = x;
1451     }
1452
1453   VA_CLOSE (p);
1454   return t;
1455 }
1456
1457 /* Similar to `build', except we set TREE_COMPLEXITY to the current
1458    line-number.  */
1459
1460 tree
1461 build_min VPARAMS ((enum tree_code code, tree tt, ...))
1462 {
1463   register tree t;
1464   register int length;
1465   register int i;
1466
1467   VA_OPEN (p, tt);
1468   VA_FIXEDARG (p, enum tree_code, code);
1469   VA_FIXEDARG (p, tree, tt);
1470
1471   t = make_node (code);
1472   length = TREE_CODE_LENGTH (code);
1473   TREE_TYPE (t) = tt;
1474   TREE_COMPLEXITY (t) = lineno;
1475
1476   for (i = 0; i < length; i++)
1477     {
1478       tree x = va_arg (p, tree);
1479       TREE_OPERAND (t, i) = x;
1480     }
1481
1482   VA_CLOSE (p);
1483   return t;
1484 }
1485
1486 /* Returns an INTEGER_CST (of type `int') corresponding to I.
1487    Multiple calls with the same value of I may or may not yield the
1488    same node; therefore, callers should never modify the node
1489    returned.  */
1490
1491 tree
1492 build_shared_int_cst (i)
1493      int i;
1494 {
1495   static tree cache[256];
1496
1497   if (i >= 256)
1498     return build_int_2 (i, 0);
1499   
1500   if (!cache[i])
1501     cache[i] = build_int_2 (i, 0);
1502   
1503   return cache[i];
1504 }
1505
1506 tree
1507 get_type_decl (t)
1508      tree t;
1509 {
1510   if (TREE_CODE (t) == TYPE_DECL)
1511     return t;
1512   if (TYPE_P (t))
1513     return TYPE_STUB_DECL (t);
1514   if (t == error_mark_node)
1515     return t;
1516   
1517   my_friendly_abort (42);
1518
1519   /* Stop compiler from complaining control reaches end of non-void function.  */
1520   return 0;
1521 }
1522
1523 /* Return first vector element whose BINFO_TYPE is ELEM.
1524    Return 0 if ELEM is not in VEC.  VEC may be NULL_TREE.  */
1525
1526 tree
1527 vec_binfo_member (elem, vec)
1528      tree elem, vec;
1529 {
1530   int i;
1531
1532   if (vec)
1533     for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
1534       if (same_type_p (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i))))
1535         return TREE_VEC_ELT (vec, i);
1536
1537   return NULL_TREE;
1538 }
1539
1540 /* Returns the namespace that contains DECL, whether directly or
1541    indirectly.  */
1542
1543 tree
1544 decl_namespace_context (decl)
1545      tree decl;
1546 {
1547   while (1)
1548     {
1549       if (TREE_CODE (decl) == NAMESPACE_DECL)
1550         return decl;
1551       else if (TYPE_P (decl))
1552         decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1553       else
1554         decl = CP_DECL_CONTEXT (decl);
1555     }
1556 }
1557
1558 /* Return truthvalue of whether T1 is the same tree structure as T2.
1559    Return 1 if they are the same.
1560    Return 0 if they are understandably different.
1561    Return -1 if either contains tree structure not understood by
1562    this function.  */
1563
1564 int
1565 cp_tree_equal (t1, t2)
1566      tree t1, t2;
1567 {
1568   register enum tree_code code1, code2;
1569   int cmp;
1570
1571   if (t1 == t2)
1572     return 1;
1573   if (t1 == 0 || t2 == 0)
1574     return 0;
1575
1576   code1 = TREE_CODE (t1);
1577   code2 = TREE_CODE (t2);
1578
1579   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
1580     {
1581       if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
1582         return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1583       else
1584         return cp_tree_equal (TREE_OPERAND (t1, 0), t2);
1585     }
1586   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
1587            || code2 == NON_LVALUE_EXPR)
1588     return cp_tree_equal (t1, TREE_OPERAND (t2, 0));
1589
1590   if (code1 != code2)
1591     return 0;
1592
1593   switch (code1)
1594     {
1595     case INTEGER_CST:
1596       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1597         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1598
1599     case REAL_CST:
1600       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1601
1602     case STRING_CST:
1603       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1604         && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1605                   TREE_STRING_LENGTH (t1));
1606
1607     case CONSTRUCTOR:
1608       /* We need to do this when determining whether or not two
1609          non-type pointer to member function template arguments
1610          are the same.  */
1611       if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1612             /* The first operand is RTL.  */
1613             && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1614         return 0;
1615       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1616
1617     case TREE_LIST:
1618       cmp = cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
1619       if (cmp <= 0)
1620         return cmp;
1621       cmp = cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2));
1622       if (cmp <= 0)
1623         return cmp;
1624       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1625
1626     case SAVE_EXPR:
1627       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1628
1629     case CALL_EXPR:
1630       cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1631       if (cmp <= 0)
1632         return cmp;
1633       return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1634
1635     case TARGET_EXPR:
1636       /* Special case: if either target is an unallocated VAR_DECL,
1637          it means that it's going to be unified with whatever the
1638          TARGET_EXPR is really supposed to initialize, so treat it
1639          as being equivalent to anything.  */
1640       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
1641            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
1642            && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
1643           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
1644               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
1645               && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
1646         cmp = 1;
1647       else
1648         cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1649       if (cmp <= 0)
1650         return cmp;
1651       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1652
1653     case WITH_CLEANUP_EXPR:
1654       cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1655       if (cmp <= 0)
1656         return cmp;
1657       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1658
1659     case COMPONENT_REF:
1660       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
1661         return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1662       return 0;
1663
1664     case VAR_DECL:
1665     case PARM_DECL:
1666     case CONST_DECL:
1667     case FUNCTION_DECL:
1668       return 0;
1669
1670     case TEMPLATE_PARM_INDEX:
1671       return TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1672         && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2);
1673
1674     case SIZEOF_EXPR:
1675     case ALIGNOF_EXPR:
1676       if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
1677         return 0;
1678       if (TYPE_P (TREE_OPERAND (t1, 0)))
1679         return same_type_p (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1680       break;
1681
1682     case PTRMEM_CST:
1683       /* Two pointer-to-members are the same if they point to the same
1684          field or function in the same class.  */
1685       return (PTRMEM_CST_MEMBER (t1) == PTRMEM_CST_MEMBER (t2)
1686               && same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2)));
1687
1688     default:
1689       break;
1690     }
1691
1692   switch (TREE_CODE_CLASS (code1))
1693     {
1694     case '1':
1695     case '2':
1696     case '<':
1697     case 'e':
1698     case 'r':
1699     case 's':
1700       {
1701         int i;
1702         
1703         cmp = 1;
1704         for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
1705           {
1706             cmp = cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
1707             if (cmp <= 0)
1708               return cmp;
1709           }
1710         return cmp;
1711       }
1712     
1713       case 't':
1714         return same_type_p (t1, t2) ? 1 : 0;
1715     }
1716
1717   return -1;
1718 }
1719
1720 /* Build a wrapper around some pointer PTR so we can use it as a tree.  */
1721
1722 tree
1723 build_ptr_wrapper (ptr)
1724      void *ptr;
1725 {
1726   tree t = make_node (WRAPPER);
1727   WRAPPER_PTR (t) = ptr;
1728   return t;
1729 }
1730
1731 /* Build a wrapper around some integer I so we can use it as a tree.  */
1732
1733 tree
1734 build_int_wrapper (i)
1735      int i;
1736 {
1737   tree t = make_node (WRAPPER);
1738   WRAPPER_INT (t) = i;
1739   return t;
1740 }
1741
1742 static tree
1743 build_srcloc (file, line)
1744      const char *file;
1745      int line;
1746 {
1747   tree t;
1748
1749   t = make_node (SRCLOC);
1750   SRCLOC_FILE (t) = file;
1751   SRCLOC_LINE (t) = line;
1752
1753   return t;
1754 }
1755
1756 tree
1757 build_srcloc_here ()
1758 {
1759   return build_srcloc (input_filename, lineno);
1760 }
1761
1762 /* The type of ARG when used as an lvalue.  */
1763
1764 tree
1765 lvalue_type (arg)
1766      tree arg;
1767 {
1768   tree type = TREE_TYPE (arg);
1769   if (TREE_CODE (arg) == OVERLOAD)
1770     type = unknown_type_node;
1771   return type;
1772 }
1773
1774 /* The type of ARG for printing error messages; denote lvalues with
1775    reference types.  */
1776
1777 tree
1778 error_type (arg)
1779      tree arg;
1780 {
1781   tree type = TREE_TYPE (arg);
1782   if (TREE_CODE (type) == ARRAY_TYPE)
1783     ;
1784   else if (real_lvalue_p (arg))
1785     type = build_reference_type (lvalue_type (arg));
1786   else if (IS_AGGR_TYPE (type))
1787     type = lvalue_type (arg);
1788
1789   return type;
1790 }
1791
1792 /* Does FUNCTION use a variable-length argument list?  */
1793
1794 int
1795 varargs_function_p (function)
1796      tree function;
1797 {
1798   tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1799   for (; parm; parm = TREE_CHAIN (parm))
1800     if (TREE_VALUE (parm) == void_type_node)
1801       return 0;
1802   return 1;
1803 }
1804
1805 /* Returns 1 if decl is a member of a class.  */
1806
1807 int
1808 member_p (decl)
1809      tree decl;
1810 {
1811   const tree ctx = DECL_CONTEXT (decl);
1812   return (ctx && TYPE_P (ctx));
1813 }
1814
1815 /* Create a placeholder for member access where we don't actually have an
1816    object that the access is against.  */
1817
1818 tree
1819 build_dummy_object (type)
1820      tree type;
1821 {
1822   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
1823   return build_indirect_ref (decl, NULL);
1824 }
1825
1826 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
1827    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
1828    binfo path from current_class_type to TYPE, or 0.  */
1829
1830 tree
1831 maybe_dummy_object (type, binfop)
1832      tree type;
1833      tree *binfop;
1834 {
1835   tree decl, context;
1836
1837   if (current_class_type
1838       && get_base_distance (type, current_class_type, 0, binfop) != -1)
1839     context = current_class_type;
1840   else
1841     {
1842       /* Reference from a nested class member function.  */
1843       context = type;
1844       if (binfop)
1845         *binfop = TYPE_BINFO (type);
1846     }
1847
1848   if (current_class_ref && context == current_class_type)
1849     decl = current_class_ref;
1850   else
1851     decl = build_dummy_object (context);
1852
1853   return decl;
1854 }
1855
1856 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
1857
1858 int
1859 is_dummy_object (ob)
1860      tree ob;
1861 {
1862   if (TREE_CODE (ob) == INDIRECT_REF)
1863     ob = TREE_OPERAND (ob, 0);
1864   return (TREE_CODE (ob) == NOP_EXPR
1865           && TREE_OPERAND (ob, 0) == void_zero_node);
1866 }
1867
1868 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
1869
1870 int
1871 pod_type_p (t)
1872      tree t;
1873 {
1874   t = strip_array_types (t);
1875
1876   if (INTEGRAL_TYPE_P (t))
1877     return 1;  /* integral, character or enumeral type */
1878   if (FLOAT_TYPE_P (t))
1879     return 1;
1880   if (TYPE_PTR_P (t))
1881     return 1; /* pointer to non-member */
1882   if (TYPE_PTRMEM_P (t))
1883     return 1; /* pointer to member object */
1884   if (TYPE_PTRMEMFUNC_P (t))
1885     return 1; /* pointer to member function */
1886   
1887   if (! CLASS_TYPE_P (t))
1888     return 0; /* other non-class type (reference or function) */
1889   if (CLASSTYPE_NON_POD_P (t))
1890     return 0;
1891   return 1;
1892 }
1893
1894 /* Table of valid C++ attributes.  */
1895 const struct attribute_spec cp_attribute_table[] =
1896 {
1897   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1898   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
1899   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
1900   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
1901   { NULL,             0, 0, false, false, false, NULL }
1902 };
1903
1904 /* Handle a "java_interface" attribute; arguments as in
1905    struct attribute_spec.handler.  */
1906 static tree
1907 handle_java_interface_attribute (node, name, args, flags, no_add_attrs)
1908      tree *node;
1909      tree name;
1910      tree args ATTRIBUTE_UNUSED;
1911      int flags;
1912      bool *no_add_attrs;
1913 {
1914   if (DECL_P (*node)
1915       || !CLASS_TYPE_P (*node)
1916       || !TYPE_FOR_JAVA (*node))
1917     {
1918       error ("`%s' attribute can only be applied to Java class definitions",
1919              IDENTIFIER_POINTER (name));
1920       *no_add_attrs = true;
1921       return NULL_TREE;
1922     }
1923   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
1924     *node = build_type_copy (*node);
1925   TYPE_JAVA_INTERFACE (*node) = 1;
1926
1927   return NULL_TREE;
1928 }
1929
1930 /* Handle a "com_interface" attribute; arguments as in
1931    struct attribute_spec.handler.  */
1932 static tree
1933 handle_com_interface_attribute (node, name, args, flags, no_add_attrs)
1934      tree *node;
1935      tree name;
1936      tree args ATTRIBUTE_UNUSED;
1937      int flags ATTRIBUTE_UNUSED;
1938      bool *no_add_attrs;
1939 {
1940   static int warned;
1941
1942   *no_add_attrs = true;
1943
1944   if (DECL_P (*node)
1945       || !CLASS_TYPE_P (*node)
1946       || *node != TYPE_MAIN_VARIANT (*node))
1947     {
1948       warning ("`%s' attribute can only be applied to class definitions",
1949                IDENTIFIER_POINTER (name));
1950       return NULL_TREE;
1951     }
1952
1953   if (!warned++)
1954     warning ("`%s' is obsolete; g++ vtables are now COM-compatible by default",
1955              IDENTIFIER_POINTER (name));
1956
1957   return NULL_TREE;
1958 }
1959
1960 /* Handle an "init_priority" attribute; arguments as in
1961    struct attribute_spec.handler.  */
1962 static tree
1963 handle_init_priority_attribute (node, name, args, flags, no_add_attrs)
1964      tree *node;
1965      tree name;
1966      tree args;
1967      int flags ATTRIBUTE_UNUSED;
1968      bool *no_add_attrs;
1969 {
1970   tree initp_expr = TREE_VALUE (args);
1971   tree decl = *node;
1972   tree type = TREE_TYPE (decl);
1973   int pri;
1974
1975   STRIP_NOPS (initp_expr);
1976           
1977   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
1978     {
1979       error ("requested init_priority is not an integer constant");
1980       *no_add_attrs = true;
1981       return NULL_TREE;
1982     }
1983
1984   pri = TREE_INT_CST_LOW (initp_expr);
1985         
1986   type = strip_array_types (type);
1987
1988   if (decl == NULL_TREE
1989       || TREE_CODE (decl) != VAR_DECL
1990       || !TREE_STATIC (decl)
1991       || DECL_EXTERNAL (decl)
1992       || (TREE_CODE (type) != RECORD_TYPE
1993           && TREE_CODE (type) != UNION_TYPE)
1994       /* Static objects in functions are initialized the
1995          first time control passes through that
1996          function. This is not precise enough to pin down an
1997          init_priority value, so don't allow it. */
1998       || current_function_decl) 
1999     {
2000       error ("can only use `%s' attribute on file-scope definitions of objects of class type",
2001              IDENTIFIER_POINTER (name));
2002       *no_add_attrs = true;
2003       return NULL_TREE;
2004     }
2005
2006   if (pri > MAX_INIT_PRIORITY || pri <= 0)
2007     {
2008       error ("requested init_priority is out of range");
2009       *no_add_attrs = true;
2010       return NULL_TREE;
2011     }
2012
2013   /* Check for init_priorities that are reserved for
2014      language and runtime support implementations.*/
2015   if (pri <= MAX_RESERVED_INIT_PRIORITY)
2016     {
2017       warning 
2018         ("requested init_priority is reserved for internal use");
2019     }
2020
2021   if (SUPPORTS_INIT_PRIORITY)
2022     {
2023       DECL_INIT_PRIORITY (decl) = pri;
2024       return NULL_TREE;
2025     }
2026   else
2027     {
2028       error ("`%s' attribute is not supported on this platform",
2029              IDENTIFIER_POINTER (name));
2030       *no_add_attrs = true;
2031       return NULL_TREE;
2032     }
2033 }
2034
2035 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
2036    thing pointed to by the constant.  */
2037
2038 tree
2039 make_ptrmem_cst (type, member)
2040      tree type;
2041      tree member;
2042 {
2043   tree ptrmem_cst = make_node (PTRMEM_CST);
2044   /* If would seem a great convenience if make_node would set
2045      TREE_CONSTANT for things of class `c', but it does not.  */
2046   TREE_CONSTANT (ptrmem_cst) = 1;
2047   TREE_TYPE (ptrmem_cst) = type;
2048   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2049   return ptrmem_cst;
2050 }
2051
2052 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
2053    traversal.  Called from walk_tree().  */
2054
2055 tree 
2056 cp_walk_subtrees (tp, walk_subtrees_p, func, data, htab)
2057      tree *tp;
2058      int *walk_subtrees_p;
2059      walk_tree_fn func;
2060      void *data;
2061      void *htab;
2062 {
2063   enum tree_code code = TREE_CODE (*tp);
2064   tree result;
2065   
2066 #define WALK_SUBTREE(NODE)                              \
2067   do                                                    \
2068     {                                                   \
2069       result = walk_tree (&(NODE), func, data, htab);   \
2070       if (result)                                       \
2071         return result;                                  \
2072     }                                                   \
2073   while (0)
2074
2075   /* Not one of the easy cases.  We must explicitly go through the
2076      children.  */
2077   switch (code)
2078     {
2079     case DEFAULT_ARG:
2080     case TEMPLATE_TEMPLATE_PARM:
2081     case BOUND_TEMPLATE_TEMPLATE_PARM:
2082     case UNBOUND_CLASS_TEMPLATE:
2083     case TEMPLATE_PARM_INDEX:
2084     case TEMPLATE_TYPE_PARM:
2085     case TYPENAME_TYPE:
2086     case TYPEOF_TYPE:
2087       /* None of thse have subtrees other than those already walked
2088          above.  */
2089       *walk_subtrees_p = 0;
2090       break;
2091
2092     case PTRMEM_CST:
2093       WALK_SUBTREE (TREE_TYPE (*tp));
2094       *walk_subtrees_p = 0;
2095       break;
2096
2097     case TREE_LIST:
2098       /* A BASELINK_P's TREE_PURPOSE is a BINFO, and hence circular.  */
2099       if (!BASELINK_P (*tp))
2100         WALK_SUBTREE (TREE_PURPOSE (*tp));
2101       break;
2102
2103     case OVERLOAD:
2104       WALK_SUBTREE (OVL_FUNCTION (*tp));
2105       WALK_SUBTREE (OVL_CHAIN (*tp));
2106       *walk_subtrees_p = 0;
2107       break;
2108
2109     case RECORD_TYPE:
2110       if (TYPE_PTRMEMFUNC_P (*tp))
2111         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2112       break;
2113
2114     default:
2115       break;
2116     }
2117
2118   /* We didn't find what we were looking for.  */
2119   return NULL_TREE;
2120
2121 #undef WALK_SUBTREE
2122 }
2123
2124 /* Decide whether there are language-specific reasons to not inline a
2125    function as a tree.  */
2126
2127 int
2128 cp_cannot_inline_tree_fn (fnp)
2129      tree *fnp;
2130 {
2131   tree fn = *fnp;
2132
2133   /* We can inline a template instantiation only if it's fully
2134      instantiated.  */
2135   if (DECL_TEMPLATE_INFO (fn)
2136       && TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
2137     {
2138       fn = *fnp = instantiate_decl (fn, /*defer_ok=*/0);
2139       return TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn));
2140     }
2141
2142   if (varargs_function_p (fn))
2143     {
2144       DECL_UNINLINABLE (fn) = 1;
2145       return 1;
2146     }
2147
2148   if (! function_attribute_inlinable_p (fn))
2149     {
2150       DECL_UNINLINABLE (fn) = 1;
2151       return 1;
2152     }
2153
2154   return 0;
2155 }
2156
2157 /* Add any pending functions other than the current function (already
2158    handled by the caller), that thus cannot be inlined, to FNS_P, then
2159    return the latest function added to the array, PREV_FN.  */
2160
2161 tree
2162 cp_add_pending_fn_decls (fns_p, prev_fn)
2163      void *fns_p;
2164      tree prev_fn;
2165 {
2166   varray_type *fnsp = (varray_type *)fns_p;
2167   struct saved_scope *s;
2168
2169   for (s = scope_chain; s; s = s->prev)
2170     if (s->function_decl && s->function_decl != prev_fn)
2171       {
2172         VARRAY_PUSH_TREE (*fnsp, s->function_decl);
2173         prev_fn = s->function_decl;
2174       }
2175
2176   return prev_fn;
2177 }
2178
2179 /* Determine whether a tree node is an OVERLOAD node.  Used to decide
2180    whether to copy a node or to preserve its chain when inlining a
2181    function.  */
2182
2183 int
2184 cp_is_overload_p (t)
2185      tree t;
2186 {
2187   return TREE_CODE (t) == OVERLOAD;
2188 }
2189
2190 /* Determine whether VAR is a declaration of an automatic variable in
2191    function FN.  */
2192
2193 int
2194 cp_auto_var_in_fn_p (var, fn)
2195      tree var, fn;
2196 {
2197   return (DECL_P (var) && DECL_CONTEXT (var) == fn
2198           && nonstatic_local_decl_p (var));
2199 }
2200
2201 /* Tell whether a declaration is needed for the RESULT of a function
2202    FN being inlined into CALLER or if the top node of target_exprs is
2203    to be used.  */
2204
2205 tree
2206 cp_copy_res_decl_for_inlining (result, fn, caller, decl_map_,
2207                                need_decl, target_exprs)
2208      tree result, fn, caller;
2209      void *decl_map_;
2210      int *need_decl;
2211      void *target_exprs;
2212 {
2213   splay_tree decl_map = (splay_tree)decl_map_;
2214   varray_type *texps = (varray_type *)target_exprs;
2215   tree var;
2216   int aggregate_return_p;
2217
2218   /* Figure out whether or not FN returns an aggregate.  */
2219   aggregate_return_p = IS_AGGR_TYPE (TREE_TYPE (result));
2220   *need_decl = ! aggregate_return_p;
2221
2222   /* If FN returns an aggregate then the caller will always create the
2223      temporary (using a TARGET_EXPR) and the call will be the
2224      initializing expression for the TARGET_EXPR.  If we were just to
2225      create a new VAR_DECL here, then the result of this function
2226      would be copied (bitwise) into the variable initialized by the
2227      TARGET_EXPR.  That's incorrect, so we must transform any
2228      references to the RESULT into references to the target.  */
2229   if (aggregate_return_p)
2230     {
2231       if (VARRAY_ACTIVE_SIZE (*texps) == 0)
2232         abort ();
2233       var = TREE_OPERAND (VARRAY_TOP_TREE (*texps), 0);
2234       if (! same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (var),
2235                                                        TREE_TYPE (result)))
2236         abort ();
2237     }
2238   /* Otherwise, make an appropriate copy.  */
2239   else
2240     var = copy_decl_for_inlining (result, fn, caller);
2241
2242   if (DECL_SAVED_FUNCTION_DATA (fn))
2243     {
2244       tree nrv = DECL_SAVED_FUNCTION_DATA (fn)->x_return_value;
2245       if (nrv)
2246         {
2247           /* We have a named return value; copy the name and source
2248              position so we can get reasonable debugging information, and
2249              register the return variable as its equivalent.  */
2250           DECL_NAME (var) = DECL_NAME (nrv);
2251           DECL_SOURCE_FILE (var) = DECL_SOURCE_FILE (nrv);
2252           DECL_SOURCE_LINE (var) = DECL_SOURCE_LINE (nrv);
2253           DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv);
2254           splay_tree_insert (decl_map,
2255                              (splay_tree_key) nrv,
2256                              (splay_tree_value) var);
2257         }
2258     }
2259
2260   return var;
2261 }
2262
2263 /* Initialize tree.c.  */
2264
2265 void
2266 init_tree ()
2267 {
2268   make_lang_type_fn = cp_make_lang_type;
2269   lang_unsave = cp_unsave;
2270   lang_statement_code_p = cp_statement_code_p;
2271   lang_set_decl_assembler_name = mangle_decl;
2272   list_hash_table = htab_create (31, list_hash, list_hash_eq, NULL);
2273   ggc_add_root (&list_hash_table, 1, 
2274                 sizeof (list_hash_table),
2275                 mark_tree_hashtable);
2276 }
2277
2278 /* Called via walk_tree.  If *TP points to a DECL_STMT for a local
2279    declaration, copies the declaration and enters it in the splay_tree
2280    pointed to by DATA (which is really a `splay_tree *').  */
2281
2282 static tree
2283 mark_local_for_remap_r (tp, walk_subtrees, data)
2284      tree *tp;
2285      int *walk_subtrees ATTRIBUTE_UNUSED;
2286      void *data;
2287 {
2288   tree t = *tp;
2289   splay_tree st = (splay_tree) data;
2290   tree decl;
2291
2292   
2293   if (TREE_CODE (t) == DECL_STMT
2294       && nonstatic_local_decl_p (DECL_STMT_DECL (t)))
2295     decl = DECL_STMT_DECL (t);
2296   else if (TREE_CODE (t) == LABEL_STMT)
2297     decl = LABEL_STMT_LABEL (t);
2298   else if (TREE_CODE (t) == TARGET_EXPR
2299            && nonstatic_local_decl_p (TREE_OPERAND (t, 0)))
2300     decl = TREE_OPERAND (t, 0);
2301   else if (TREE_CODE (t) == CASE_LABEL)
2302     decl = CASE_LABEL_DECL (t);
2303   else
2304     decl = NULL_TREE;
2305
2306   if (decl)
2307     {
2308       tree copy;
2309
2310       /* Make a copy.  */
2311       copy = copy_decl_for_inlining (decl, 
2312                                      DECL_CONTEXT (decl), 
2313                                      DECL_CONTEXT (decl));
2314
2315       /* Remember the copy.  */
2316       splay_tree_insert (st,
2317                          (splay_tree_key) decl, 
2318                          (splay_tree_value) copy);
2319     }
2320
2321   return NULL_TREE;
2322 }
2323
2324 /* Called via walk_tree when an expression is unsaved.  Using the
2325    splay_tree pointed to by ST (which is really a `splay_tree'),
2326    remaps all local declarations to appropriate replacements.  */
2327
2328 static tree
2329 cp_unsave_r (tp, walk_subtrees, data)
2330      tree *tp;
2331      int *walk_subtrees;
2332      void *data;
2333 {
2334   splay_tree st = (splay_tree) data;
2335   splay_tree_node n;
2336
2337   /* Only a local declaration (variable or label).  */
2338   if (nonstatic_local_decl_p (*tp))
2339     {
2340       /* Lookup the declaration.  */
2341       n = splay_tree_lookup (st, (splay_tree_key) *tp);
2342       
2343       /* If it's there, remap it.  */
2344       if (n)
2345         *tp = (tree) n->value;
2346     }
2347   else if (TREE_CODE (*tp) == SAVE_EXPR)
2348     remap_save_expr (tp, st, current_function_decl, walk_subtrees);
2349   else
2350     {
2351       copy_tree_r (tp, walk_subtrees, NULL);
2352
2353       /* Do whatever unsaving is required.  */
2354       unsave_expr_1 (*tp);
2355     }
2356
2357   /* Keep iterating.  */
2358   return NULL_TREE;
2359 }
2360
2361 /* Called by unsave_expr_now whenever an expression (*TP) needs to be
2362    unsaved.  */
2363
2364 static void
2365 cp_unsave (tp)
2366      tree *tp;
2367 {
2368   splay_tree st;
2369
2370   /* Create a splay-tree to map old local variable declarations to new
2371      ones.  */
2372   st = splay_tree_new (splay_tree_compare_pointers, NULL, NULL);
2373
2374   /* Walk the tree once figuring out what needs to be remapped.  */
2375   walk_tree (tp, mark_local_for_remap_r, st, NULL);
2376
2377   /* Walk the tree again, copying, remapping, and unsaving.  */
2378   walk_tree (tp, cp_unsave_r, st, NULL);
2379
2380   /* Clean up.  */
2381   splay_tree_delete (st);
2382 }
2383
2384 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2385    is.  Note that this sfk_none is zero, so this function can be used
2386    as a predicate to test whether or not DECL is a special function.  */
2387
2388 special_function_kind
2389 special_function_p (decl)
2390      tree decl;
2391 {
2392   /* Rather than doing all this stuff with magic names, we should
2393      probably have a field of type `special_function_kind' in
2394      DECL_LANG_SPECIFIC.  */
2395   if (DECL_COPY_CONSTRUCTOR_P (decl))
2396     return sfk_copy_constructor;
2397   if (DECL_CONSTRUCTOR_P (decl))
2398     return sfk_constructor;
2399   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2400     return sfk_assignment_operator;
2401   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2402     return sfk_destructor;
2403   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2404     return sfk_complete_destructor;
2405   if (DECL_BASE_DESTRUCTOR_P (decl))
2406     return sfk_base_destructor;
2407   if (DECL_DELETING_DESTRUCTOR_P (decl))
2408     return sfk_deleting_destructor;
2409   if (DECL_CONV_FN_P (decl))
2410     return sfk_conversion;
2411
2412   return sfk_none;
2413 }
2414
2415 /* Returns non-zero if TYPE is a character type, including wchar_t.  */
2416
2417 int
2418 char_type_p (type)
2419      tree type;
2420 {
2421   return (same_type_p (type, char_type_node)
2422           || same_type_p (type, unsigned_char_type_node)
2423           || same_type_p (type, signed_char_type_node)
2424           || same_type_p (type, wchar_type_node));
2425 }
2426
2427 /* Returns the kind of linkage associated with the indicated DECL.  Th
2428    value returned is as specified by the language standard; it is
2429    independent of implementation details regarding template
2430    instantiation, etc.  For example, it is possible that a declaration
2431    to which this function assigns external linkage would not show up
2432    as a global symbol when you run `nm' on the resulting object file.  */
2433
2434 linkage_kind
2435 decl_linkage (decl)
2436      tree decl;
2437 {
2438   /* This function doesn't attempt to calculate the linkage from first
2439      principles as given in [basic.link].  Instead, it makes use of
2440      the fact that we have already set TREE_PUBLIC appropriately, and
2441      then handles a few special cases.  Ideally, we would calculate
2442      linkage first, and then transform that into a concrete
2443      implementation.  */
2444
2445   /* Things that don't have names have no linkage.  */
2446   if (!DECL_NAME (decl))
2447     return lk_none;
2448
2449   /* Things that are TREE_PUBLIC have external linkage.  */
2450   if (TREE_PUBLIC (decl))
2451     return lk_external;
2452
2453   /* Some things that are not TREE_PUBLIC have external linkage, too.
2454      For example, on targets that don't have weak symbols, we make all
2455      template instantiations have internal linkage (in the object
2456      file), but the symbols should still be treated as having external
2457      linkage from the point of view of the language.  */
2458   if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
2459     return lk_external;
2460
2461   /* Things in local scope do not have linkage, if they don't have
2462      TREE_PUBLIC set.  */
2463   if (decl_function_context (decl))
2464     return lk_none;
2465
2466   /* Everything else has internal linkage.  */
2467   return lk_internal;
2468 }