OSDN Git Service

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