OSDN Git Service

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