OSDN Git Service

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