OSDN Git Service

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