OSDN Git Service

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