OSDN Git Service

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