OSDN Git Service

Remove cast-as-lvalue extension.
[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 (VAR_DECL, 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 (VAR_DECL, 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 /* Obstack used for allocating nodes in template function and variable
1269    definitions.  */
1270
1271 /* Similar to `build_nt', except that we set TREE_COMPLEXITY to be the
1272    current line number.  */
1273
1274 tree
1275 build_min_nt (enum tree_code code, ...)
1276 {
1277   register tree t;
1278   register int length;
1279   register int i;
1280   va_list p;
1281
1282   va_start (p, code);
1283
1284   t = make_node (code);
1285   length = TREE_CODE_LENGTH (code);
1286   TREE_COMPLEXITY (t) = input_line;
1287
1288   for (i = 0; i < length; i++)
1289     {
1290       tree x = va_arg (p, tree);
1291       TREE_OPERAND (t, i) = x;
1292     }
1293
1294   va_end (p);
1295   return t;
1296 }
1297
1298 /* Similar to `build', except we set TREE_COMPLEXITY to the current
1299    line-number.  */
1300
1301 tree
1302 build_min (enum tree_code code, tree tt, ...)
1303 {
1304   register tree t;
1305   register int length;
1306   register int i;
1307   va_list p;
1308
1309   va_start (p, tt);
1310
1311   t = make_node (code);
1312   length = TREE_CODE_LENGTH (code);
1313   TREE_TYPE (t) = tt;
1314   TREE_COMPLEXITY (t) = input_line;
1315
1316   for (i = 0; i < length; i++)
1317     {
1318       tree x = va_arg (p, tree);
1319       TREE_OPERAND (t, i) = x;
1320     }
1321
1322   va_end (p);
1323   return t;
1324 }
1325
1326 /* Returns an INTEGER_CST (of type `int') corresponding to I.
1327    Multiple calls with the same value of I may or may not yield the
1328    same node; therefore, callers should never modify the node
1329    returned.  */
1330
1331 static GTY(()) tree shared_int_cache[256];
1332
1333 tree
1334 build_shared_int_cst (int i)
1335 {
1336   if (i >= 256)
1337     return build_int_2 (i, 0);
1338   
1339   if (!shared_int_cache[i])
1340     shared_int_cache[i] = build_int_2 (i, 0);
1341   
1342   return shared_int_cache[i];
1343 }
1344
1345 tree
1346 get_type_decl (tree t)
1347 {
1348   if (TREE_CODE (t) == TYPE_DECL)
1349     return t;
1350   if (TYPE_P (t))
1351     return TYPE_STUB_DECL (t);
1352   if (t == error_mark_node)
1353     return t;
1354   
1355   abort ();
1356
1357   /* Stop compiler from complaining control reaches end of non-void function.  */
1358   return 0;
1359 }
1360
1361 /* Return first vector element whose BINFO_TYPE is ELEM.
1362    Return 0 if ELEM is not in VEC.  VEC may be NULL_TREE.  */
1363
1364 tree
1365 vec_binfo_member (tree elem, tree vec)
1366 {
1367   int i;
1368
1369   if (vec)
1370     for (i = 0; i < TREE_VEC_LENGTH (vec); ++i)
1371       if (same_type_p (elem, BINFO_TYPE (TREE_VEC_ELT (vec, i))))
1372         return TREE_VEC_ELT (vec, i);
1373
1374   return NULL_TREE;
1375 }
1376
1377 /* Returns the namespace that contains DECL, whether directly or
1378    indirectly.  */
1379
1380 tree
1381 decl_namespace_context (tree decl)
1382 {
1383   while (1)
1384     {
1385       if (TREE_CODE (decl) == NAMESPACE_DECL)
1386         return decl;
1387       else if (TYPE_P (decl))
1388         decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1389       else
1390         decl = CP_DECL_CONTEXT (decl);
1391     }
1392 }
1393
1394 /* Return truthvalue of whether T1 is the same tree structure as T2.
1395    Return 1 if they are the same. Return 0 if they are different.  */
1396
1397 bool
1398 cp_tree_equal (tree t1, tree t2)
1399 {
1400   register enum tree_code code1, code2;
1401
1402   if (t1 == t2)
1403     return true;
1404   if (!t1 || !t2)
1405     return false;
1406
1407   for (code1 = TREE_CODE (t1);
1408        code1 == NOP_EXPR || code1 == CONVERT_EXPR
1409          || code1 == NON_LVALUE_EXPR;
1410        code1 = TREE_CODE (t1))
1411     t1 = TREE_OPERAND (t1, 0);
1412   for (code2 = TREE_CODE (t2);
1413        code2 == NOP_EXPR || code2 == CONVERT_EXPR
1414          || code1 == NON_LVALUE_EXPR;
1415        code2 = TREE_CODE (t2))
1416     t2 = TREE_OPERAND (t2, 0);
1417
1418   /* They might have become equal now.  */
1419   if (t1 == t2)
1420     return true;
1421   
1422   if (code1 != code2)
1423     return false;
1424
1425   switch (code1)
1426     {
1427     case INTEGER_CST:
1428       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1429         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1430
1431     case REAL_CST:
1432       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1433
1434     case STRING_CST:
1435       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1436         && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1437                     TREE_STRING_LENGTH (t1));
1438
1439     case CONSTRUCTOR:
1440       /* We need to do this when determining whether or not two
1441          non-type pointer to member function template arguments
1442          are the same.  */
1443       if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1444             /* The first operand is RTL.  */
1445             && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1446         return false;
1447       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1448
1449     case TREE_LIST:
1450       if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1451         return false;
1452       if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1453         return false;
1454       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1455
1456     case SAVE_EXPR:
1457       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1458
1459     case CALL_EXPR:
1460       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1461         return false;
1462       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1463
1464     case TARGET_EXPR:
1465       {
1466         tree o1 = TREE_OPERAND (t1, 0);
1467         tree o2 = TREE_OPERAND (t2, 0);
1468         
1469         /* Special case: if either target is an unallocated VAR_DECL,
1470            it means that it's going to be unified with whatever the
1471            TARGET_EXPR is really supposed to initialize, so treat it
1472            as being equivalent to anything.  */
1473         if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1474             && !DECL_RTL_SET_P (o1))
1475           /*Nop*/;
1476         else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1477                  && !DECL_RTL_SET_P (o2))
1478           /*Nop*/;
1479         else if (!cp_tree_equal (o1, o2))
1480           return false;
1481       
1482         return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1483       }
1484       
1485     case WITH_CLEANUP_EXPR:
1486       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1487         return false;
1488       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1489
1490     case COMPONENT_REF:
1491       if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1492         return false;
1493       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1494
1495     case VAR_DECL:
1496     case PARM_DECL:
1497     case CONST_DECL:
1498     case FUNCTION_DECL:
1499     case TEMPLATE_DECL:
1500     case IDENTIFIER_NODE:
1501       return false;
1502
1503     case TEMPLATE_PARM_INDEX:
1504       return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1505               && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1506               && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1507                               TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
1508
1509     case TEMPLATE_ID_EXPR:
1510       {
1511         unsigned ix;
1512         tree vec1, vec2;
1513         
1514         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1515           return false;
1516         vec1 = TREE_OPERAND (t1, 1);
1517         vec2 = TREE_OPERAND (t2, 1);
1518
1519         if (!vec1 || !vec2)
1520           return !vec1 && !vec2;
1521         
1522         if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1523           return false;
1524
1525         for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1526           if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1527                               TREE_VEC_ELT (vec2, ix)))
1528             return false;
1529         
1530         return true;
1531       }
1532       
1533     case SIZEOF_EXPR:
1534     case ALIGNOF_EXPR:
1535       {
1536         tree o1 = TREE_OPERAND (t1, 0);
1537         tree o2 = TREE_OPERAND (t2, 0);
1538         
1539         if (TREE_CODE (o1) != TREE_CODE (o2))
1540           return false;
1541         if (TYPE_P (o1))
1542           return same_type_p (o1, o2);
1543         else
1544           return cp_tree_equal (o1, o2);
1545       }
1546       
1547     case PTRMEM_CST:
1548       /* Two pointer-to-members are the same if they point to the same
1549          field or function in the same class.  */
1550       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1551         return false;
1552
1553       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
1554
1555     default:
1556       break;
1557     }
1558
1559   switch (TREE_CODE_CLASS (code1))
1560     {
1561     case '1':
1562     case '2':
1563     case '<':
1564     case 'e':
1565     case 'r':
1566     case 's':
1567       {
1568         int i;
1569         
1570         for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
1571           if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
1572             return false;
1573         
1574         return true;
1575       }
1576     
1577     case 't':
1578       return same_type_p (t1, t2);
1579     }
1580
1581   my_friendly_assert (0, 20030617);
1582   return false;
1583 }
1584
1585 /* Build a wrapper around a 'struct z_candidate' so we can use it as a
1586    tree.  */
1587
1588 tree
1589 build_zc_wrapper (struct z_candidate* ptr)
1590 {
1591   tree t = make_node (WRAPPER);
1592   WRAPPER_ZC (t) = ptr;
1593   return t;
1594 }
1595
1596 /* The type of ARG when used as an lvalue.  */
1597
1598 tree
1599 lvalue_type (tree arg)
1600 {
1601   tree type = TREE_TYPE (arg);
1602   if (TREE_CODE (arg) == OVERLOAD)
1603     type = unknown_type_node;
1604   return type;
1605 }
1606
1607 /* The type of ARG for printing error messages; denote lvalues with
1608    reference types.  */
1609
1610 tree
1611 error_type (tree arg)
1612 {
1613   tree type = TREE_TYPE (arg);
1614   
1615   if (TREE_CODE (type) == ARRAY_TYPE)
1616     ;
1617   else if (TREE_CODE (type) == ERROR_MARK)
1618     ;
1619   else if (real_lvalue_p (arg))
1620     type = build_reference_type (lvalue_type (arg));
1621   else if (IS_AGGR_TYPE (type))
1622     type = lvalue_type (arg);
1623
1624   return type;
1625 }
1626
1627 /* Does FUNCTION use a variable-length argument list?  */
1628
1629 int
1630 varargs_function_p (tree function)
1631 {
1632   tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1633   for (; parm; parm = TREE_CHAIN (parm))
1634     if (TREE_VALUE (parm) == void_type_node)
1635       return 0;
1636   return 1;
1637 }
1638
1639 /* Returns 1 if decl is a member of a class.  */
1640
1641 int
1642 member_p (tree decl)
1643 {
1644   const tree ctx = DECL_CONTEXT (decl);
1645   return (ctx && TYPE_P (ctx));
1646 }
1647
1648 /* Create a placeholder for member access where we don't actually have an
1649    object that the access is against.  */
1650
1651 tree
1652 build_dummy_object (tree type)
1653 {
1654   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
1655   return build_indirect_ref (decl, NULL);
1656 }
1657
1658 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
1659    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
1660    binfo path from current_class_type to TYPE, or 0.  */
1661
1662 tree
1663 maybe_dummy_object (tree type, tree* binfop)
1664 {
1665   tree decl, context;
1666   tree binfo;
1667   
1668   if (current_class_type
1669       && (binfo = lookup_base (current_class_type, type,
1670                                ba_ignore | ba_quiet, NULL)))
1671     context = current_class_type;
1672   else
1673     {
1674       /* Reference from a nested class member function.  */
1675       context = type;
1676       binfo = TYPE_BINFO (type);
1677     }
1678
1679   if (binfop)
1680     *binfop = binfo;
1681   
1682   if (current_class_ref && context == current_class_type
1683       /* Kludge: Make sure that current_class_type is actually
1684          correct.  It might not be if we're in the middle of
1685          tsubst_default_argument.  */
1686       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
1687                       current_class_type))
1688     decl = current_class_ref;
1689   else
1690     decl = build_dummy_object (context);
1691
1692   return decl;
1693 }
1694
1695 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
1696
1697 int
1698 is_dummy_object (tree ob)
1699 {
1700   if (TREE_CODE (ob) == INDIRECT_REF)
1701     ob = TREE_OPERAND (ob, 0);
1702   return (TREE_CODE (ob) == NOP_EXPR
1703           && TREE_OPERAND (ob, 0) == void_zero_node);
1704 }
1705
1706 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
1707
1708 int
1709 pod_type_p (tree t)
1710 {
1711   t = strip_array_types (t);
1712
1713   if (t == error_mark_node)
1714     return 1;
1715   if (INTEGRAL_TYPE_P (t))
1716     return 1;  /* integral, character or enumeral type */
1717   if (FLOAT_TYPE_P (t))
1718     return 1;
1719   if (TYPE_PTR_P (t))
1720     return 1; /* pointer to non-member */
1721   if (TYPE_PTR_TO_MEMBER_P (t))
1722     return 1; /* pointer to member */
1723   
1724   if (! CLASS_TYPE_P (t))
1725     return 0; /* other non-class type (reference or function) */
1726   if (CLASSTYPE_NON_POD_P (t))
1727     return 0;
1728   return 1;
1729 }
1730
1731 /* Returns 1 iff zero initialization of type T means actually storing
1732    zeros in it.  */
1733
1734 int
1735 zero_init_p (tree t)
1736 {
1737   t = strip_array_types (t);
1738
1739   if (t == error_mark_node)
1740     return 1;
1741
1742   /* NULL pointers to data members are initialized with -1.  */
1743   if (TYPE_PTRMEM_P (t))
1744     return 0;
1745
1746   /* Classes that contain types that can't be zero-initialized, cannot
1747      be zero-initialized themselves.  */
1748   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
1749     return 0;
1750
1751   return 1;
1752 }
1753
1754 /* Table of valid C++ attributes.  */
1755 const struct attribute_spec cxx_attribute_table[] =
1756 {
1757   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1758   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
1759   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
1760   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
1761   { NULL,             0, 0, false, false, false, NULL }
1762 };
1763
1764 /* Handle a "java_interface" attribute; arguments as in
1765    struct attribute_spec.handler.  */
1766 static tree
1767 handle_java_interface_attribute (tree* node, 
1768                                  tree name, 
1769                                  tree args ATTRIBUTE_UNUSED , 
1770                                  int flags, 
1771                                  bool* no_add_attrs)
1772 {
1773   if (DECL_P (*node)
1774       || !CLASS_TYPE_P (*node)
1775       || !TYPE_FOR_JAVA (*node))
1776     {
1777       error ("`%s' attribute can only be applied to Java class definitions",
1778              IDENTIFIER_POINTER (name));
1779       *no_add_attrs = true;
1780       return NULL_TREE;
1781     }
1782   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
1783     *node = build_type_copy (*node);
1784   TYPE_JAVA_INTERFACE (*node) = 1;
1785
1786   return NULL_TREE;
1787 }
1788
1789 /* Handle a "com_interface" attribute; arguments as in
1790    struct attribute_spec.handler.  */
1791 static tree
1792 handle_com_interface_attribute (tree* node, 
1793                                 tree name, 
1794                                 tree args ATTRIBUTE_UNUSED , 
1795                                 int flags ATTRIBUTE_UNUSED , 
1796                                 bool* no_add_attrs)
1797 {
1798   static int warned;
1799
1800   *no_add_attrs = true;
1801
1802   if (DECL_P (*node)
1803       || !CLASS_TYPE_P (*node)
1804       || *node != TYPE_MAIN_VARIANT (*node))
1805     {
1806       warning ("`%s' attribute can only be applied to class definitions",
1807                IDENTIFIER_POINTER (name));
1808       return NULL_TREE;
1809     }
1810
1811   if (!warned++)
1812     warning ("`%s' is obsolete; g++ vtables are now COM-compatible by default",
1813              IDENTIFIER_POINTER (name));
1814
1815   return NULL_TREE;
1816 }
1817
1818 /* Handle an "init_priority" attribute; arguments as in
1819    struct attribute_spec.handler.  */
1820 static tree
1821 handle_init_priority_attribute (tree* node, 
1822                                 tree name, 
1823                                 tree args, 
1824                                 int flags ATTRIBUTE_UNUSED , 
1825                                 bool* no_add_attrs)
1826 {
1827   tree initp_expr = TREE_VALUE (args);
1828   tree decl = *node;
1829   tree type = TREE_TYPE (decl);
1830   int pri;
1831
1832   STRIP_NOPS (initp_expr);
1833           
1834   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
1835     {
1836       error ("requested init_priority is not an integer constant");
1837       *no_add_attrs = true;
1838       return NULL_TREE;
1839     }
1840
1841   pri = TREE_INT_CST_LOW (initp_expr);
1842         
1843   type = strip_array_types (type);
1844
1845   if (decl == NULL_TREE
1846       || TREE_CODE (decl) != VAR_DECL
1847       || !TREE_STATIC (decl)
1848       || DECL_EXTERNAL (decl)
1849       || (TREE_CODE (type) != RECORD_TYPE
1850           && TREE_CODE (type) != UNION_TYPE)
1851       /* Static objects in functions are initialized the
1852          first time control passes through that
1853          function. This is not precise enough to pin down an
1854          init_priority value, so don't allow it.  */
1855       || current_function_decl) 
1856     {
1857       error ("can only use `%s' attribute on file-scope definitions of objects of class type",
1858              IDENTIFIER_POINTER (name));
1859       *no_add_attrs = true;
1860       return NULL_TREE;
1861     }
1862
1863   if (pri > MAX_INIT_PRIORITY || pri <= 0)
1864     {
1865       error ("requested init_priority is out of range");
1866       *no_add_attrs = true;
1867       return NULL_TREE;
1868     }
1869
1870   /* Check for init_priorities that are reserved for
1871      language and runtime support implementations.*/
1872   if (pri <= MAX_RESERVED_INIT_PRIORITY)
1873     {
1874       warning 
1875         ("requested init_priority is reserved for internal use");
1876     }
1877
1878   if (SUPPORTS_INIT_PRIORITY)
1879     {
1880       DECL_INIT_PRIORITY (decl) = pri;
1881       return NULL_TREE;
1882     }
1883   else
1884     {
1885       error ("`%s' attribute is not supported on this platform",
1886              IDENTIFIER_POINTER (name));
1887       *no_add_attrs = true;
1888       return NULL_TREE;
1889     }
1890 }
1891
1892 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
1893    thing pointed to by the constant.  */
1894
1895 tree
1896 make_ptrmem_cst (tree type, tree member)
1897 {
1898   tree ptrmem_cst = make_node (PTRMEM_CST);
1899   /* If would seem a great convenience if make_node would set
1900      TREE_CONSTANT for things of class `c', but it does not.  */
1901   TREE_CONSTANT (ptrmem_cst) = 1;
1902   TREE_TYPE (ptrmem_cst) = type;
1903   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
1904   return ptrmem_cst;
1905 }
1906
1907 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
1908    traversal.  Called from walk_tree().  */
1909
1910 tree 
1911 cp_walk_subtrees (tree* tp, 
1912                   int* walk_subtrees_p, 
1913                   walk_tree_fn func, 
1914                   void* data, 
1915                   void* htab)
1916 {
1917   enum tree_code code = TREE_CODE (*tp);
1918   tree result;
1919   
1920 #define WALK_SUBTREE(NODE)                              \
1921   do                                                    \
1922     {                                                   \
1923       result = walk_tree (&(NODE), func, data, htab);   \
1924       if (result)                                       \
1925         return result;                                  \
1926     }                                                   \
1927   while (0)
1928
1929   /* Not one of the easy cases.  We must explicitly go through the
1930      children.  */
1931   switch (code)
1932     {
1933     case DEFAULT_ARG:
1934     case TEMPLATE_TEMPLATE_PARM:
1935     case BOUND_TEMPLATE_TEMPLATE_PARM:
1936     case UNBOUND_CLASS_TEMPLATE:
1937     case TEMPLATE_PARM_INDEX:
1938     case TEMPLATE_TYPE_PARM:
1939     case TYPENAME_TYPE:
1940     case TYPEOF_TYPE:
1941     case BASELINK:
1942       /* None of thse have subtrees other than those already walked
1943          above.  */
1944       *walk_subtrees_p = 0;
1945       break;
1946
1947     case PTRMEM_CST:
1948       WALK_SUBTREE (TREE_TYPE (*tp));
1949       *walk_subtrees_p = 0;
1950       break;
1951
1952     case TREE_LIST:
1953       WALK_SUBTREE (TREE_PURPOSE (*tp));
1954       break;
1955
1956     case OVERLOAD:
1957       WALK_SUBTREE (OVL_FUNCTION (*tp));
1958       WALK_SUBTREE (OVL_CHAIN (*tp));
1959       *walk_subtrees_p = 0;
1960       break;
1961
1962     case RECORD_TYPE:
1963       if (TYPE_PTRMEMFUNC_P (*tp))
1964         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
1965       break;
1966
1967     default:
1968       break;
1969     }
1970
1971   /* We didn't find what we were looking for.  */
1972   return NULL_TREE;
1973
1974 #undef WALK_SUBTREE
1975 }
1976
1977 /* Decide whether there are language-specific reasons to not inline a
1978    function as a tree.  */
1979
1980 int
1981 cp_cannot_inline_tree_fn (tree* fnp)
1982 {
1983   tree fn = *fnp;
1984
1985   /* We can inline a template instantiation only if it's fully
1986      instantiated.  */
1987   if (DECL_TEMPLATE_INFO (fn)
1988       && TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
1989     {
1990       /* Don't instantiate functions that are not going to be
1991          inlined.  */
1992       if (!DECL_INLINE (DECL_TEMPLATE_RESULT 
1993                         (template_for_substitution (fn))))
1994         return 1;
1995       fn = *fnp = instantiate_decl (fn, /*defer_ok=*/0);
1996       if (TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
1997         return 1;
1998     }
1999
2000   if (flag_really_no_inline
2001       && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
2002     return 1;
2003
2004   /* Don't auto-inline anything that might not be bound within
2005      this unit of translation.  */
2006   if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn))
2007     {
2008       DECL_UNINLINABLE (fn) = 1;
2009       return 1;
2010     }
2011
2012   if (varargs_function_p (fn))
2013     {
2014       DECL_UNINLINABLE (fn) = 1;
2015       return 1;
2016     }
2017
2018   if (! function_attribute_inlinable_p (fn))
2019     {
2020       DECL_UNINLINABLE (fn) = 1;
2021       return 1;
2022     }
2023
2024   return 0;
2025 }
2026
2027 /* Add any pending functions other than the current function (already
2028    handled by the caller), that thus cannot be inlined, to FNS_P, then
2029    return the latest function added to the array, PREV_FN.  */
2030
2031 tree
2032 cp_add_pending_fn_decls (void* fns_p, tree prev_fn)
2033 {
2034   varray_type *fnsp = (varray_type *)fns_p;
2035   struct saved_scope *s;
2036
2037   for (s = scope_chain; s; s = s->prev)
2038     if (s->function_decl && s->function_decl != prev_fn)
2039       {
2040         VARRAY_PUSH_TREE (*fnsp, s->function_decl);
2041         prev_fn = s->function_decl;
2042       }
2043
2044   return prev_fn;
2045 }
2046
2047 /* Determine whether a tree node is an OVERLOAD node.  Used to decide
2048    whether to copy a node or to preserve its chain when inlining a
2049    function.  */
2050
2051 int
2052 cp_is_overload_p (tree t)
2053 {
2054   return TREE_CODE (t) == OVERLOAD;
2055 }
2056
2057 /* Determine whether VAR is a declaration of an automatic variable in
2058    function FN.  */
2059
2060 int
2061 cp_auto_var_in_fn_p (tree var, tree fn)
2062 {
2063   return (DECL_P (var) && DECL_CONTEXT (var) == fn
2064           && nonstatic_local_decl_p (var));
2065 }
2066
2067 /* Tell whether a declaration is needed for the RESULT of a function
2068    FN being inlined into CALLER or if the top node of target_exprs is
2069    to be used.  */
2070
2071 tree
2072 cp_copy_res_decl_for_inlining (tree result, 
2073                                tree fn, 
2074                                tree caller, 
2075                                void* decl_map_,
2076                                int* need_decl, 
2077                                tree return_slot_addr)
2078 {
2079   splay_tree decl_map = (splay_tree)decl_map_;
2080   tree var;
2081
2082   /* If FN returns an aggregate then the caller will always pass the
2083      address of the return slot explicitly.  If we were just to
2084      create a new VAR_DECL here, then the result of this function
2085      would be copied (bitwise) into the variable initialized by the
2086      TARGET_EXPR.  That's incorrect, so we must transform any
2087      references to the RESULT into references to the target.  */
2088
2089   /* We should have an explicit return slot iff the return type is
2090      TREE_ADDRESSABLE.  See simplify_aggr_init_expr.  */
2091   if (TREE_ADDRESSABLE (TREE_TYPE (result))
2092       != (return_slot_addr != NULL_TREE))
2093     abort ();
2094
2095   *need_decl = !return_slot_addr;
2096   if (return_slot_addr)
2097     {
2098       var = build_indirect_ref (return_slot_addr, "");
2099       if (! same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (var),
2100                                                        TREE_TYPE (result)))
2101         abort ();
2102     }
2103   /* Otherwise, make an appropriate copy.  */
2104   else
2105     var = copy_decl_for_inlining (result, fn, caller);
2106
2107   if (DECL_SAVED_FUNCTION_DATA (fn))
2108     {
2109       tree nrv = DECL_SAVED_FUNCTION_DATA (fn)->x_return_value;
2110       if (nrv)
2111         {
2112           /* We have a named return value; copy the name and source
2113              position so we can get reasonable debugging information, and
2114              register the return variable as its equivalent.  */
2115           if (TREE_CODE (var) == VAR_DECL
2116               /* But not if we're initializing a variable from the
2117                  enclosing function which already has its own name.  */
2118               && DECL_NAME (var) == NULL_TREE)
2119             {
2120               DECL_NAME (var) = DECL_NAME (nrv);
2121               DECL_SOURCE_LOCATION (var) = DECL_SOURCE_LOCATION (nrv);
2122               DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv);
2123               /* Don't lose initialization info.  */
2124               DECL_INITIAL (var) = DECL_INITIAL (nrv);
2125               /* Don't forget that it needs to go in the stack.  */
2126               TREE_ADDRESSABLE (var) = TREE_ADDRESSABLE (nrv);
2127             }
2128
2129           splay_tree_insert (decl_map,
2130                              (splay_tree_key) nrv,
2131                              (splay_tree_value) var);
2132         }
2133     }
2134
2135   return var;
2136 }
2137
2138 /* Record that we're about to start inlining FN, and return nonzero if
2139    that's OK.  Used for lang_hooks.tree_inlining.start_inlining.  */
2140
2141 int
2142 cp_start_inlining (tree fn)
2143 {
2144   if (DECL_TEMPLATE_INSTANTIATION (fn))
2145     return push_tinst_level (fn);
2146   else
2147     return 1;
2148 }
2149
2150 /* Record that we're done inlining FN.  Used for
2151    lang_hooks.tree_inlining.end_inlining.  */
2152
2153 void
2154 cp_end_inlining (tree fn ATTRIBUTE_UNUSED )
2155 {
2156   if (DECL_TEMPLATE_INSTANTIATION (fn))
2157     pop_tinst_level ();
2158 }
2159
2160 /* Initialize tree.c.  */
2161
2162 void
2163 init_tree (void)
2164 {
2165   list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2166 }
2167
2168 /* Called via walk_tree.  If *TP points to a DECL_STMT for a local
2169    declaration, copies the declaration and enters it in the splay_tree
2170    pointed to by DATA (which is really a `splay_tree *').  */
2171
2172 static tree
2173 mark_local_for_remap_r (tree* tp, 
2174                         int* walk_subtrees ATTRIBUTE_UNUSED , 
2175                         void* data)
2176 {
2177   tree t = *tp;
2178   splay_tree st = (splay_tree) data;
2179   tree decl;
2180
2181   
2182   if (TREE_CODE (t) == DECL_STMT
2183       && nonstatic_local_decl_p (DECL_STMT_DECL (t)))
2184     decl = DECL_STMT_DECL (t);
2185   else if (TREE_CODE (t) == LABEL_STMT)
2186     decl = LABEL_STMT_LABEL (t);
2187   else if (TREE_CODE (t) == TARGET_EXPR
2188            && nonstatic_local_decl_p (TREE_OPERAND (t, 0)))
2189     decl = TREE_OPERAND (t, 0);
2190   else if (TREE_CODE (t) == CASE_LABEL)
2191     decl = CASE_LABEL_DECL (t);
2192   else
2193     decl = NULL_TREE;
2194
2195   if (decl)
2196     {
2197       tree copy;
2198
2199       /* Make a copy.  */
2200       copy = copy_decl_for_inlining (decl, 
2201                                      DECL_CONTEXT (decl), 
2202                                      DECL_CONTEXT (decl));
2203
2204       /* Remember the copy.  */
2205       splay_tree_insert (st,
2206                          (splay_tree_key) decl, 
2207                          (splay_tree_value) copy);
2208     }
2209
2210   return NULL_TREE;
2211 }
2212
2213 /* Called via walk_tree when an expression is unsaved.  Using the
2214    splay_tree pointed to by ST (which is really a `splay_tree'),
2215    remaps all local declarations to appropriate replacements.  */
2216
2217 static tree
2218 cp_unsave_r (tree* tp, 
2219              int* walk_subtrees, 
2220              void* data)
2221 {
2222   splay_tree st = (splay_tree) data;
2223   splay_tree_node n;
2224
2225   /* Only a local declaration (variable or label).  */
2226   if (nonstatic_local_decl_p (*tp))
2227     {
2228       /* Lookup the declaration.  */
2229       n = splay_tree_lookup (st, (splay_tree_key) *tp);
2230       
2231       /* If it's there, remap it.  */
2232       if (n)
2233         *tp = (tree) n->value;
2234     }
2235   else if (TREE_CODE (*tp) == SAVE_EXPR)
2236     remap_save_expr (tp, st, current_function_decl, walk_subtrees);
2237   else
2238     {
2239       copy_tree_r (tp, walk_subtrees, NULL);
2240
2241       /* Do whatever unsaving is required.  */
2242       unsave_expr_1 (*tp);
2243     }
2244
2245   /* Keep iterating.  */
2246   return NULL_TREE;
2247 }
2248
2249 /* Called whenever an expression needs to be unsaved.  */
2250
2251 tree
2252 cxx_unsave_expr_now (tree tp)
2253 {
2254   splay_tree st;
2255
2256   /* Create a splay-tree to map old local variable declarations to new
2257      ones.  */
2258   st = splay_tree_new (splay_tree_compare_pointers, NULL, NULL);
2259
2260   /* Walk the tree once figuring out what needs to be remapped.  */
2261   walk_tree (&tp, mark_local_for_remap_r, st, NULL);
2262
2263   /* Walk the tree again, copying, remapping, and unsaving.  */
2264   walk_tree (&tp, cp_unsave_r, st, NULL);
2265
2266   /* Clean up.  */
2267   splay_tree_delete (st);
2268
2269   return tp;
2270 }
2271
2272 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2273    is.  Note that sfk_none is zero, so this function can be used as a
2274    predicate to test whether or not DECL is a special function.  */
2275
2276 special_function_kind
2277 special_function_p (tree decl)
2278 {
2279   /* Rather than doing all this stuff with magic names, we should
2280      probably have a field of type `special_function_kind' in
2281      DECL_LANG_SPECIFIC.  */
2282   if (DECL_COPY_CONSTRUCTOR_P (decl))
2283     return sfk_copy_constructor;
2284   if (DECL_CONSTRUCTOR_P (decl))
2285     return sfk_constructor;
2286   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2287     return sfk_assignment_operator;
2288   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2289     return sfk_destructor;
2290   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2291     return sfk_complete_destructor;
2292   if (DECL_BASE_DESTRUCTOR_P (decl))
2293     return sfk_base_destructor;
2294   if (DECL_DELETING_DESTRUCTOR_P (decl))
2295     return sfk_deleting_destructor;
2296   if (DECL_CONV_FN_P (decl))
2297     return sfk_conversion;
2298
2299   return sfk_none;
2300 }
2301
2302 /* Returns true if and only if NODE is a name, i.e., a node created
2303    by the parser when processing an id-expression.  */
2304
2305 bool
2306 name_p (tree node)
2307 {
2308   if (TREE_CODE (node) == TEMPLATE_ID_EXPR)
2309     node = TREE_OPERAND (node, 0);
2310   return (/* An ordinary unqualified name.  */
2311           TREE_CODE (node) == IDENTIFIER_NODE
2312           /* A destructor name.  */
2313           || TREE_CODE (node) == BIT_NOT_EXPR
2314           /* A qualified name.  */
2315           || TREE_CODE (node) == SCOPE_REF);
2316 }
2317
2318 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
2319
2320 int
2321 char_type_p (tree type)
2322 {
2323   return (same_type_p (type, char_type_node)
2324           || same_type_p (type, unsigned_char_type_node)
2325           || same_type_p (type, signed_char_type_node)
2326           || same_type_p (type, wchar_type_node));
2327 }
2328
2329 /* Returns the kind of linkage associated with the indicated DECL.  Th
2330    value returned is as specified by the language standard; it is
2331    independent of implementation details regarding template
2332    instantiation, etc.  For example, it is possible that a declaration
2333    to which this function assigns external linkage would not show up
2334    as a global symbol when you run `nm' on the resulting object file.  */
2335
2336 linkage_kind
2337 decl_linkage (tree decl)
2338 {
2339   /* This function doesn't attempt to calculate the linkage from first
2340      principles as given in [basic.link].  Instead, it makes use of
2341      the fact that we have already set TREE_PUBLIC appropriately, and
2342      then handles a few special cases.  Ideally, we would calculate
2343      linkage first, and then transform that into a concrete
2344      implementation.  */
2345
2346   /* Things that don't have names have no linkage.  */
2347   if (!DECL_NAME (decl))
2348     return lk_none;
2349
2350   /* Things that are TREE_PUBLIC have external linkage.  */
2351   if (TREE_PUBLIC (decl))
2352     return lk_external;
2353
2354   /* Some things that are not TREE_PUBLIC have external linkage, too.
2355      For example, on targets that don't have weak symbols, we make all
2356      template instantiations have internal linkage (in the object
2357      file), but the symbols should still be treated as having external
2358      linkage from the point of view of the language.  */
2359   if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
2360     return lk_external;
2361
2362   /* Things in local scope do not have linkage, if they don't have
2363      TREE_PUBLIC set.  */
2364   if (decl_function_context (decl))
2365     return lk_none;
2366
2367   /* Everything else has internal linkage.  */
2368   return lk_internal;
2369 }
2370 \f
2371 /* EXP is an expression that we want to pre-evaluate.  Returns via INITP an
2372    expression to perform the pre-evaluation, and returns directly an
2373    expression to use the precalculated result.  */
2374
2375 tree
2376 stabilize_expr (tree exp, tree* initp)
2377 {
2378   tree init_expr;
2379
2380   if (!TREE_SIDE_EFFECTS (exp))
2381     {
2382       init_expr = void_zero_node;
2383     }
2384   else if (!real_lvalue_p (exp)
2385            || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2386     {
2387       init_expr = get_target_expr (exp);
2388       exp = TARGET_EXPR_SLOT (init_expr);
2389     }
2390   else
2391     {
2392       exp = build_unary_op (ADDR_EXPR, exp, 1);
2393       init_expr = get_target_expr (exp);
2394       exp = TARGET_EXPR_SLOT (init_expr);
2395       exp = build_indirect_ref (exp, 0);
2396     }
2397
2398   *initp = init_expr;
2399   return exp;
2400 }
2401 \f
2402 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2403 /* Complain that some language-specific thing hanging off a tree
2404    node has been accessed improperly.  */
2405
2406 void
2407 lang_check_failed (const char* file, int line, const char* function)
2408 {
2409   internal_error ("lang_* check: failed in %s, at %s:%d",
2410                   function, trim_filename (file), line);
2411 }
2412 #endif /* ENABLE_TREE_CHECKING */
2413
2414 #include "gt-cp-tree.h"