OSDN Git Service

* tree.c (count_functions, bound_pmf_p, cp_is_overload_p,
[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 is_overloaded_fn (tree x)
773 {
774   /* A baselink is also considered an overloaded function.  */
775   if (TREE_CODE (x) == OFFSET_REF)
776     x = TREE_OPERAND (x, 1);
777   if (BASELINK_P (x))
778     x = BASELINK_FUNCTIONS (x);
779   return (TREE_CODE (x) == FUNCTION_DECL
780           || TREE_CODE (x) == TEMPLATE_ID_EXPR
781           || DECL_FUNCTION_TEMPLATE_P (x)
782           || TREE_CODE (x) == OVERLOAD);
783 }
784
785 int
786 really_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
794   return ((TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x))
795           || DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
796           || TREE_CODE (x) == TEMPLATE_ID_EXPR);
797 }
798
799 tree
800 get_first_fn (tree from)
801 {
802   gcc_assert (is_overloaded_fn (from));
803   /* A baselink is also considered an overloaded function.  */
804   if (BASELINK_P (from))
805     from = BASELINK_FUNCTIONS (from);
806   return OVL_CURRENT (from);
807 }
808
809 /* Return a new OVL node, concatenating it with the old one.  */
810
811 tree
812 ovl_cons (tree decl, tree chain)
813 {
814   tree result = make_node (OVERLOAD);
815   TREE_TYPE (result) = unknown_type_node;
816   OVL_FUNCTION (result) = decl;
817   TREE_CHAIN (result) = chain;
818
819   return result;
820 }
821
822 /* Build a new overloaded function. If this is the first one,
823    just return it; otherwise, ovl_cons the _DECLs */
824
825 tree
826 build_overload (tree decl, tree chain)
827 {
828   if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
829     return decl;
830   if (chain && TREE_CODE (chain) != OVERLOAD)
831     chain = ovl_cons (chain, NULL_TREE);
832   return ovl_cons (decl, chain);
833 }
834
835 \f
836 #define PRINT_RING_SIZE 4
837
838 const char *
839 cxx_printable_name (tree decl, int v)
840 {
841   static tree decl_ring[PRINT_RING_SIZE];
842   static char *print_ring[PRINT_RING_SIZE];
843   static int ring_counter;
844   int i;
845
846   /* Only cache functions.  */
847   if (v < 2
848       || TREE_CODE (decl) != FUNCTION_DECL
849       || DECL_LANG_SPECIFIC (decl) == 0)
850     return lang_decl_name (decl, v);
851
852   /* See if this print name is lying around.  */
853   for (i = 0; i < PRINT_RING_SIZE; i++)
854     if (decl_ring[i] == decl)
855       /* yes, so return it.  */
856       return print_ring[i];
857
858   if (++ring_counter == PRINT_RING_SIZE)
859     ring_counter = 0;
860
861   if (current_function_decl != NULL_TREE)
862     {
863       if (decl_ring[ring_counter] == current_function_decl)
864         ring_counter += 1;
865       if (ring_counter == PRINT_RING_SIZE)
866         ring_counter = 0;
867       gcc_assert (decl_ring[ring_counter] != current_function_decl);
868     }
869
870   if (print_ring[ring_counter])
871     free (print_ring[ring_counter]);
872
873   print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v));
874   decl_ring[ring_counter] = decl;
875   return print_ring[ring_counter];
876 }
877 \f
878 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
879    listed in RAISES.  */
880
881 tree
882 build_exception_variant (tree type, tree raises)
883 {
884   tree v = TYPE_MAIN_VARIANT (type);
885   int type_quals = TYPE_QUALS (type);
886
887   for (; v; v = TYPE_NEXT_VARIANT (v))
888     if (check_qualified_type (v, type, type_quals)
889         && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), 1))
890       return v;
891
892   /* Need to build a new variant.  */
893   v = build_variant_type_copy (type);
894   TYPE_RAISES_EXCEPTIONS (v) = raises;
895   return v;
896 }
897
898 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
899    BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
900    arguments.  */
901
902 tree
903 bind_template_template_parm (tree t, tree newargs)
904 {
905   tree decl = TYPE_NAME (t);
906   tree t2;
907
908   t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
909   decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
910
911   /* These nodes have to be created to reflect new TYPE_DECL and template
912      arguments.  */
913   TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
914   TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
915   TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
916     = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
917                  newargs, NULL_TREE);
918
919   TREE_TYPE (decl) = t2;
920   TYPE_NAME (t2) = decl;
921   TYPE_STUB_DECL (t2) = decl;
922   TYPE_SIZE (t2) = 0;
923
924   return t2;
925 }
926
927 /* Called from count_trees via walk_tree.  */
928
929 static tree
930 count_trees_r (tree *tp, int *walk_subtrees, void *data)
931 {
932   ++*((int *) data);
933
934   if (TYPE_P (*tp))
935     *walk_subtrees = 0;
936
937   return NULL_TREE;
938 }
939
940 /* Debugging function for measuring the rough complexity of a tree
941    representation.  */
942
943 int
944 count_trees (tree t)
945 {
946   int n_trees = 0;
947   walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
948   return n_trees;
949 }
950
951 /* Called from verify_stmt_tree via walk_tree.  */
952
953 static tree
954 verify_stmt_tree_r (tree* tp,
955                     int* walk_subtrees ATTRIBUTE_UNUSED ,
956                     void* data)
957 {
958   tree t = *tp;
959   htab_t *statements = (htab_t *) data;
960   void **slot;
961
962   if (!STATEMENT_CODE_P (TREE_CODE (t)))
963     return NULL_TREE;
964
965   /* If this statement is already present in the hash table, then
966      there is a circularity in the statement tree.  */
967   gcc_assert (!htab_find (*statements, t));
968
969   slot = htab_find_slot (*statements, t, INSERT);
970   *slot = t;
971
972   return NULL_TREE;
973 }
974
975 /* Debugging function to check that the statement T has not been
976    corrupted.  For now, this function simply checks that T contains no
977    circularities.  */
978
979 void
980 verify_stmt_tree (tree t)
981 {
982   htab_t statements;
983   statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
984   walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
985   htab_delete (statements);
986 }
987
988 /* Called from find_tree via walk_tree.  */
989
990 static tree
991 find_tree_r (tree* tp,
992              int* walk_subtrees ATTRIBUTE_UNUSED ,
993              void* data)
994 {
995   if (*tp == (tree) data)
996     return (tree) data;
997
998   return NULL_TREE;
999 }
1000
1001 /* Returns X if X appears in the tree structure rooted at T.  */
1002
1003 tree
1004 find_tree (tree t, tree x)
1005 {
1006   return walk_tree_without_duplicates (&t, find_tree_r, x);
1007 }
1008
1009 /* Check if the type T depends on a type with no linkage and if so, return
1010    it.  If RELAXED_P then do not consider a class type declared within
1011    a TREE_PUBLIC function to have no linkage.  */
1012
1013 tree
1014 no_linkage_check (tree t, bool relaxed_p)
1015 {
1016   tree r;
1017
1018   /* There's no point in checking linkage on template functions; we
1019      can't know their complete types.  */
1020   if (processing_template_decl)
1021     return NULL_TREE;
1022
1023   switch (TREE_CODE (t))
1024     {
1025       tree fn;
1026
1027     case RECORD_TYPE:
1028       if (TYPE_PTRMEMFUNC_P (t))
1029         goto ptrmem;
1030       /* Fall through.  */
1031     case UNION_TYPE:
1032       if (!CLASS_TYPE_P (t))
1033         return NULL_TREE;
1034       /* Fall through.  */
1035     case ENUMERAL_TYPE:
1036       if (TYPE_ANONYMOUS_P (t))
1037         return t;
1038       fn = decl_function_context (TYPE_MAIN_DECL (t));
1039       if (fn && (!relaxed_p || !TREE_PUBLIC (fn)))
1040         return t;
1041       return NULL_TREE;
1042
1043     case ARRAY_TYPE:
1044     case POINTER_TYPE:
1045     case REFERENCE_TYPE:
1046       return no_linkage_check (TREE_TYPE (t), relaxed_p);
1047
1048     case OFFSET_TYPE:
1049     ptrmem:
1050       r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1051                             relaxed_p);
1052       if (r)
1053         return r;
1054       return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
1055
1056     case METHOD_TYPE:
1057       r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
1058       if (r)
1059         return r;
1060       /* Fall through.  */
1061     case FUNCTION_TYPE:
1062       {
1063         tree parm;
1064         for (parm = TYPE_ARG_TYPES (t);
1065              parm && parm != void_list_node;
1066              parm = TREE_CHAIN (parm))
1067           {
1068             r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
1069             if (r)
1070               return r;
1071           }
1072         return no_linkage_check (TREE_TYPE (t), relaxed_p);
1073       }
1074
1075     default:
1076       return NULL_TREE;
1077     }
1078 }
1079
1080 #ifdef GATHER_STATISTICS
1081 extern int depth_reached;
1082 #endif
1083
1084 void
1085 cxx_print_statistics (void)
1086 {
1087   print_search_statistics ();
1088   print_class_statistics ();
1089 #ifdef GATHER_STATISTICS
1090   fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1091            depth_reached);
1092 #endif
1093 }
1094
1095 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1096    (which is an ARRAY_TYPE).  This counts only elements of the top
1097    array.  */
1098
1099 tree
1100 array_type_nelts_top (tree type)
1101 {
1102   return fold (build2 (PLUS_EXPR, sizetype,
1103                        array_type_nelts (type),
1104                        integer_one_node));
1105 }
1106
1107 /* Return, as an INTEGER_CST node, the number of elements for TYPE
1108    (which is an ARRAY_TYPE).  This one is a recursive count of all
1109    ARRAY_TYPEs that are clumped together.  */
1110
1111 tree
1112 array_type_nelts_total (tree type)
1113 {
1114   tree sz = array_type_nelts_top (type);
1115   type = TREE_TYPE (type);
1116   while (TREE_CODE (type) == ARRAY_TYPE)
1117     {
1118       tree n = array_type_nelts_top (type);
1119       sz = fold (build2 (MULT_EXPR, sizetype, sz, n));
1120       type = TREE_TYPE (type);
1121     }
1122   return sz;
1123 }
1124
1125 /* Called from break_out_target_exprs via mapcar.  */
1126
1127 static tree
1128 bot_manip (tree* tp, int* walk_subtrees, void* data)
1129 {
1130   splay_tree target_remap = ((splay_tree) data);
1131   tree t = *tp;
1132
1133   if (!TYPE_P (t) && TREE_CONSTANT (t))
1134     {
1135       /* There can't be any TARGET_EXPRs or their slot variables below
1136          this point.  We used to check !TREE_SIDE_EFFECTS, but then we
1137          failed to copy an ADDR_EXPR of the slot VAR_DECL.  */
1138       *walk_subtrees = 0;
1139       return NULL_TREE;
1140     }
1141   if (TREE_CODE (t) == TARGET_EXPR)
1142     {
1143       tree u;
1144
1145       if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
1146         {
1147           mark_used (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 1), 0), 0));
1148           u = build_cplus_new
1149             (TREE_TYPE (t), break_out_target_exprs (TREE_OPERAND (t, 1)));
1150         }
1151       else
1152         {
1153           u = build_target_expr_with_type
1154             (break_out_target_exprs (TREE_OPERAND (t, 1)), TREE_TYPE (t));
1155         }
1156
1157       /* Map the old variable to the new one.  */
1158       splay_tree_insert (target_remap,
1159                          (splay_tree_key) TREE_OPERAND (t, 0),
1160                          (splay_tree_value) TREE_OPERAND (u, 0));
1161
1162       /* Replace the old expression with the new version.  */
1163       *tp = u;
1164       /* We don't have to go below this point; the recursive call to
1165          break_out_target_exprs will have handled anything below this
1166          point.  */
1167       *walk_subtrees = 0;
1168       return NULL_TREE;
1169     }
1170   else if (TREE_CODE (t) == CALL_EXPR)
1171     mark_used (TREE_OPERAND (TREE_OPERAND (t, 0), 0));
1172
1173   /* Make a copy of this node.  */
1174   return copy_tree_r (tp, walk_subtrees, NULL);
1175 }
1176
1177 /* Replace all remapped VAR_DECLs in T with their new equivalents.
1178    DATA is really a splay-tree mapping old variables to new
1179    variables.  */
1180
1181 static tree
1182 bot_replace (tree* t,
1183              int* walk_subtrees ATTRIBUTE_UNUSED ,
1184              void* data)
1185 {
1186   splay_tree target_remap = ((splay_tree) data);
1187
1188   if (TREE_CODE (*t) == VAR_DECL)
1189     {
1190       splay_tree_node n = splay_tree_lookup (target_remap,
1191                                              (splay_tree_key) *t);
1192       if (n)
1193         *t = (tree) n->value;
1194     }
1195
1196   return NULL_TREE;
1197 }
1198
1199 /* When we parse a default argument expression, we may create
1200    temporary variables via TARGET_EXPRs.  When we actually use the
1201    default-argument expression, we make a copy of the expression, but
1202    we must replace the temporaries with appropriate local versions.  */
1203
1204 tree
1205 break_out_target_exprs (tree t)
1206 {
1207   static int target_remap_count;
1208   static splay_tree target_remap;
1209
1210   if (!target_remap_count++)
1211     target_remap = splay_tree_new (splay_tree_compare_pointers,
1212                                    /*splay_tree_delete_key_fn=*/NULL,
1213                                    /*splay_tree_delete_value_fn=*/NULL);
1214   walk_tree (&t, bot_manip, target_remap, NULL);
1215   walk_tree (&t, bot_replace, target_remap, NULL);
1216
1217   if (!--target_remap_count)
1218     {
1219       splay_tree_delete (target_remap);
1220       target_remap = NULL;
1221     }
1222
1223   return t;
1224 }
1225
1226 /* Similar to `build_nt', but for template definitions of dependent
1227    expressions  */
1228
1229 tree
1230 build_min_nt (enum tree_code code, ...)
1231 {
1232   tree t;
1233   int length;
1234   int i;
1235   va_list p;
1236
1237   va_start (p, code);
1238
1239   t = make_node (code);
1240   length = TREE_CODE_LENGTH (code);
1241
1242   for (i = 0; i < length; i++)
1243     {
1244       tree x = va_arg (p, tree);
1245       TREE_OPERAND (t, i) = x;
1246     }
1247
1248   va_end (p);
1249   return t;
1250 }
1251
1252 /* Similar to `build', but for template definitions.  */
1253
1254 tree
1255 build_min (enum tree_code code, tree tt, ...)
1256 {
1257   tree t;
1258   int length;
1259   int i;
1260   va_list p;
1261
1262   va_start (p, tt);
1263
1264   t = make_node (code);
1265   length = TREE_CODE_LENGTH (code);
1266   TREE_TYPE (t) = tt;
1267
1268   for (i = 0; i < length; i++)
1269     {
1270       tree x = va_arg (p, tree);
1271       TREE_OPERAND (t, i) = x;
1272       if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
1273         TREE_SIDE_EFFECTS (t) = 1;
1274     }
1275
1276   va_end (p);
1277   return t;
1278 }
1279
1280 /* Similar to `build', but for template definitions of non-dependent
1281    expressions. NON_DEP is the non-dependent expression that has been
1282    built.  */
1283
1284 tree
1285 build_min_non_dep (enum tree_code code, tree non_dep, ...)
1286 {
1287   tree t;
1288   int length;
1289   int i;
1290   va_list p;
1291
1292   va_start (p, non_dep);
1293
1294   t = make_node (code);
1295   length = TREE_CODE_LENGTH (code);
1296   TREE_TYPE (t) = TREE_TYPE (non_dep);
1297   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1298
1299   for (i = 0; i < length; i++)
1300     {
1301       tree x = va_arg (p, tree);
1302       TREE_OPERAND (t, i) = x;
1303     }
1304
1305   if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1306     /* This should not be considered a COMPOUND_EXPR, because it
1307        resolves to an overload.  */
1308     COMPOUND_EXPR_OVERLOADED (t) = 1;
1309
1310   va_end (p);
1311   return t;
1312 }
1313
1314 tree
1315 get_type_decl (tree t)
1316 {
1317   if (TREE_CODE (t) == TYPE_DECL)
1318     return t;
1319   if (TYPE_P (t))
1320     return TYPE_STUB_DECL (t);
1321   gcc_assert (t == error_mark_node);
1322   return t;
1323 }
1324
1325 /* Returns the namespace that contains DECL, whether directly or
1326    indirectly.  */
1327
1328 tree
1329 decl_namespace_context (tree decl)
1330 {
1331   while (1)
1332     {
1333       if (TREE_CODE (decl) == NAMESPACE_DECL)
1334         return decl;
1335       else if (TYPE_P (decl))
1336         decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1337       else
1338         decl = CP_DECL_CONTEXT (decl);
1339     }
1340 }
1341
1342 /* Return truthvalue of whether T1 is the same tree structure as T2.
1343    Return 1 if they are the same. Return 0 if they are different.  */
1344
1345 bool
1346 cp_tree_equal (tree t1, tree t2)
1347 {
1348   enum tree_code code1, code2;
1349
1350   if (t1 == t2)
1351     return true;
1352   if (!t1 || !t2)
1353     return false;
1354
1355   for (code1 = TREE_CODE (t1);
1356        code1 == NOP_EXPR || code1 == CONVERT_EXPR
1357          || code1 == NON_LVALUE_EXPR;
1358        code1 = TREE_CODE (t1))
1359     t1 = TREE_OPERAND (t1, 0);
1360   for (code2 = TREE_CODE (t2);
1361        code2 == NOP_EXPR || code2 == CONVERT_EXPR
1362          || code1 == NON_LVALUE_EXPR;
1363        code2 = TREE_CODE (t2))
1364     t2 = TREE_OPERAND (t2, 0);
1365
1366   /* They might have become equal now.  */
1367   if (t1 == t2)
1368     return true;
1369
1370   if (code1 != code2)
1371     return false;
1372
1373   switch (code1)
1374     {
1375     case INTEGER_CST:
1376       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
1377         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
1378
1379     case REAL_CST:
1380       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
1381
1382     case STRING_CST:
1383       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
1384         && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
1385                     TREE_STRING_LENGTH (t1));
1386
1387     case CONSTRUCTOR:
1388       /* We need to do this when determining whether or not two
1389          non-type pointer to member function template arguments
1390          are the same.  */
1391       if (!(same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1392             /* The first operand is RTL.  */
1393             && TREE_OPERAND (t1, 0) == TREE_OPERAND (t2, 0)))
1394         return false;
1395       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1396
1397     case TREE_LIST:
1398       if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
1399         return false;
1400       if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
1401         return false;
1402       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
1403
1404     case SAVE_EXPR:
1405       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1406
1407     case CALL_EXPR:
1408       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1409         return false;
1410       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1411
1412     case TARGET_EXPR:
1413       {
1414         tree o1 = TREE_OPERAND (t1, 0);
1415         tree o2 = TREE_OPERAND (t2, 0);
1416
1417         /* Special case: if either target is an unallocated VAR_DECL,
1418            it means that it's going to be unified with whatever the
1419            TARGET_EXPR is really supposed to initialize, so treat it
1420            as being equivalent to anything.  */
1421         if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
1422             && !DECL_RTL_SET_P (o1))
1423           /*Nop*/;
1424         else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
1425                  && !DECL_RTL_SET_P (o2))
1426           /*Nop*/;
1427         else if (!cp_tree_equal (o1, o2))
1428           return false;
1429
1430         return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
1431       }
1432
1433     case WITH_CLEANUP_EXPR:
1434       if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1435         return false;
1436       return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
1437
1438     case COMPONENT_REF:
1439       if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
1440         return false;
1441       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
1442
1443     case VAR_DECL:
1444     case PARM_DECL:
1445     case CONST_DECL:
1446     case FUNCTION_DECL:
1447     case TEMPLATE_DECL:
1448     case IDENTIFIER_NODE:
1449       return false;
1450
1451     case BASELINK:
1452       return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
1453               && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
1454               && cp_tree_equal (BASELINK_FUNCTIONS (t1),
1455                                 BASELINK_FUNCTIONS (t2)));
1456
1457     case TEMPLATE_PARM_INDEX:
1458       return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
1459               && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
1460               && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
1461                               TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
1462
1463     case TEMPLATE_ID_EXPR:
1464       {
1465         unsigned ix;
1466         tree vec1, vec2;
1467
1468         if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
1469           return false;
1470         vec1 = TREE_OPERAND (t1, 1);
1471         vec2 = TREE_OPERAND (t2, 1);
1472
1473         if (!vec1 || !vec2)
1474           return !vec1 && !vec2;
1475
1476         if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
1477           return false;
1478
1479         for (ix = TREE_VEC_LENGTH (vec1); ix--;)
1480           if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
1481                               TREE_VEC_ELT (vec2, ix)))
1482             return false;
1483
1484         return true;
1485       }
1486
1487     case SIZEOF_EXPR:
1488     case ALIGNOF_EXPR:
1489       {
1490         tree o1 = TREE_OPERAND (t1, 0);
1491         tree o2 = TREE_OPERAND (t2, 0);
1492
1493         if (TREE_CODE (o1) != TREE_CODE (o2))
1494           return false;
1495         if (TYPE_P (o1))
1496           return same_type_p (o1, o2);
1497         else
1498           return cp_tree_equal (o1, o2);
1499       }
1500
1501     case PTRMEM_CST:
1502       /* Two pointer-to-members are the same if they point to the same
1503          field or function in the same class.  */
1504       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
1505         return false;
1506
1507       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
1508
1509     case OVERLOAD:
1510       if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
1511         return false;
1512       return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
1513
1514     default:
1515       break;
1516     }
1517
1518   switch (TREE_CODE_CLASS (code1))
1519     {
1520     case tcc_unary:
1521     case tcc_binary:
1522     case tcc_comparison:
1523     case tcc_expression:
1524     case tcc_reference:
1525     case tcc_statement:
1526       {
1527         int i;
1528
1529         for (i = 0; i < TREE_CODE_LENGTH (code1); ++i)
1530           if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
1531             return false;
1532
1533         return true;
1534       }
1535
1536     case tcc_type:
1537       return same_type_p (t1, t2);
1538     default:
1539       gcc_unreachable ();
1540     }
1541   /* We can get here with --disable-checking.  */
1542   return false;
1543 }
1544
1545 /* The type of ARG when used as an lvalue.  */
1546
1547 tree
1548 lvalue_type (tree arg)
1549 {
1550   tree type = TREE_TYPE (arg);
1551   return type;
1552 }
1553
1554 /* The type of ARG for printing error messages; denote lvalues with
1555    reference types.  */
1556
1557 tree
1558 error_type (tree arg)
1559 {
1560   tree type = TREE_TYPE (arg);
1561
1562   if (TREE_CODE (type) == ARRAY_TYPE)
1563     ;
1564   else if (TREE_CODE (type) == ERROR_MARK)
1565     ;
1566   else if (real_lvalue_p (arg))
1567     type = build_reference_type (lvalue_type (arg));
1568   else if (IS_AGGR_TYPE (type))
1569     type = lvalue_type (arg);
1570
1571   return type;
1572 }
1573
1574 /* Does FUNCTION use a variable-length argument list?  */
1575
1576 int
1577 varargs_function_p (tree function)
1578 {
1579   tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
1580   for (; parm; parm = TREE_CHAIN (parm))
1581     if (TREE_VALUE (parm) == void_type_node)
1582       return 0;
1583   return 1;
1584 }
1585
1586 /* Returns 1 if decl is a member of a class.  */
1587
1588 int
1589 member_p (tree decl)
1590 {
1591   const tree ctx = DECL_CONTEXT (decl);
1592   return (ctx && TYPE_P (ctx));
1593 }
1594
1595 /* Create a placeholder for member access where we don't actually have an
1596    object that the access is against.  */
1597
1598 tree
1599 build_dummy_object (tree type)
1600 {
1601   tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
1602   return build_indirect_ref (decl, NULL);
1603 }
1604
1605 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
1606    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
1607    binfo path from current_class_type to TYPE, or 0.  */
1608
1609 tree
1610 maybe_dummy_object (tree type, tree* binfop)
1611 {
1612   tree decl, context;
1613   tree binfo;
1614
1615   if (current_class_type
1616       && (binfo = lookup_base (current_class_type, type,
1617                                ba_unique | ba_quiet, NULL)))
1618     context = current_class_type;
1619   else
1620     {
1621       /* Reference from a nested class member function.  */
1622       context = type;
1623       binfo = TYPE_BINFO (type);
1624     }
1625
1626   if (binfop)
1627     *binfop = binfo;
1628
1629   if (current_class_ref && context == current_class_type
1630       /* Kludge: Make sure that current_class_type is actually
1631          correct.  It might not be if we're in the middle of
1632          tsubst_default_argument.  */
1633       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
1634                       current_class_type))
1635     decl = current_class_ref;
1636   else
1637     decl = build_dummy_object (context);
1638
1639   return decl;
1640 }
1641
1642 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
1643
1644 int
1645 is_dummy_object (tree ob)
1646 {
1647   if (TREE_CODE (ob) == INDIRECT_REF)
1648     ob = TREE_OPERAND (ob, 0);
1649   return (TREE_CODE (ob) == NOP_EXPR
1650           && TREE_OPERAND (ob, 0) == void_zero_node);
1651 }
1652
1653 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
1654
1655 int
1656 pod_type_p (tree t)
1657 {
1658   t = strip_array_types (t);
1659
1660   if (t == error_mark_node)
1661     return 1;
1662   if (INTEGRAL_TYPE_P (t))
1663     return 1;  /* integral, character or enumeral type */
1664   if (FLOAT_TYPE_P (t))
1665     return 1;
1666   if (TYPE_PTR_P (t))
1667     return 1; /* pointer to non-member */
1668   if (TYPE_PTR_TO_MEMBER_P (t))
1669     return 1; /* pointer to member */
1670
1671   if (TREE_CODE (t) == VECTOR_TYPE)
1672     return 1; /* vectors are (small) arrays of scalars */
1673
1674   if (! CLASS_TYPE_P (t))
1675     return 0; /* other non-class type (reference or function) */
1676   if (CLASSTYPE_NON_POD_P (t))
1677     return 0;
1678   return 1;
1679 }
1680
1681 /* Returns 1 iff zero initialization of type T means actually storing
1682    zeros in it.  */
1683
1684 int
1685 zero_init_p (tree t)
1686 {
1687   t = strip_array_types (t);
1688
1689   if (t == error_mark_node)
1690     return 1;
1691
1692   /* NULL pointers to data members are initialized with -1.  */
1693   if (TYPE_PTRMEM_P (t))
1694     return 0;
1695
1696   /* Classes that contain types that can't be zero-initialized, cannot
1697      be zero-initialized themselves.  */
1698   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
1699     return 0;
1700
1701   return 1;
1702 }
1703
1704 /* Table of valid C++ attributes.  */
1705 const struct attribute_spec cxx_attribute_table[] =
1706 {
1707   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1708   { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
1709   { "com_interface",  0, 0, false, false, false, handle_com_interface_attribute },
1710   { "init_priority",  1, 1, true,  false, false, handle_init_priority_attribute },
1711   { NULL,             0, 0, false, false, false, NULL }
1712 };
1713
1714 /* Handle a "java_interface" attribute; arguments as in
1715    struct attribute_spec.handler.  */
1716 static tree
1717 handle_java_interface_attribute (tree* node,
1718                                  tree name,
1719                                  tree args ATTRIBUTE_UNUSED ,
1720                                  int flags,
1721                                  bool* no_add_attrs)
1722 {
1723   if (DECL_P (*node)
1724       || !CLASS_TYPE_P (*node)
1725       || !TYPE_FOR_JAVA (*node))
1726     {
1727       error ("%qE attribute can only be applied to Java class definitions",
1728              name);
1729       *no_add_attrs = true;
1730       return NULL_TREE;
1731     }
1732   if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
1733     *node = build_variant_type_copy (*node);
1734   TYPE_JAVA_INTERFACE (*node) = 1;
1735
1736   return NULL_TREE;
1737 }
1738
1739 /* Handle a "com_interface" attribute; arguments as in
1740    struct attribute_spec.handler.  */
1741 static tree
1742 handle_com_interface_attribute (tree* node,
1743                                 tree name,
1744                                 tree args ATTRIBUTE_UNUSED ,
1745                                 int flags ATTRIBUTE_UNUSED ,
1746                                 bool* no_add_attrs)
1747 {
1748   static int warned;
1749
1750   *no_add_attrs = true;
1751
1752   if (DECL_P (*node)
1753       || !CLASS_TYPE_P (*node)
1754       || *node != TYPE_MAIN_VARIANT (*node))
1755     {
1756       warning ("%qE attribute can only be applied to class definitions", name);
1757       return NULL_TREE;
1758     }
1759
1760   if (!warned++)
1761     warning ("%qE is obsolete; g++ vtables are now COM-compatible by default",
1762              name);
1763
1764   return NULL_TREE;
1765 }
1766
1767 /* Handle an "init_priority" attribute; arguments as in
1768    struct attribute_spec.handler.  */
1769 static tree
1770 handle_init_priority_attribute (tree* node,
1771                                 tree name,
1772                                 tree args,
1773                                 int flags ATTRIBUTE_UNUSED ,
1774                                 bool* no_add_attrs)
1775 {
1776   tree initp_expr = TREE_VALUE (args);
1777   tree decl = *node;
1778   tree type = TREE_TYPE (decl);
1779   int pri;
1780
1781   STRIP_NOPS (initp_expr);
1782
1783   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
1784     {
1785       error ("requested init_priority is not an integer constant");
1786       *no_add_attrs = true;
1787       return NULL_TREE;
1788     }
1789
1790   pri = TREE_INT_CST_LOW (initp_expr);
1791
1792   type = strip_array_types (type);
1793
1794   if (decl == NULL_TREE
1795       || TREE_CODE (decl) != VAR_DECL
1796       || !TREE_STATIC (decl)
1797       || DECL_EXTERNAL (decl)
1798       || (TREE_CODE (type) != RECORD_TYPE
1799           && TREE_CODE (type) != UNION_TYPE)
1800       /* Static objects in functions are initialized the
1801          first time control passes through that
1802          function. This is not precise enough to pin down an
1803          init_priority value, so don't allow it.  */
1804       || current_function_decl)
1805     {
1806       error ("can only use %qE attribute on file-scope definitions "
1807              "of objects of class type", name);
1808       *no_add_attrs = true;
1809       return NULL_TREE;
1810     }
1811
1812   if (pri > MAX_INIT_PRIORITY || pri <= 0)
1813     {
1814       error ("requested init_priority is out of range");
1815       *no_add_attrs = true;
1816       return NULL_TREE;
1817     }
1818
1819   /* Check for init_priorities that are reserved for
1820      language and runtime support implementations.*/
1821   if (pri <= MAX_RESERVED_INIT_PRIORITY)
1822     {
1823       warning
1824         ("requested init_priority is reserved for internal use");
1825     }
1826
1827   if (SUPPORTS_INIT_PRIORITY)
1828     {
1829       DECL_INIT_PRIORITY (decl) = pri;
1830       return NULL_TREE;
1831     }
1832   else
1833     {
1834       error ("%qE attribute is not supported on this platform", name);
1835       *no_add_attrs = true;
1836       return NULL_TREE;
1837     }
1838 }
1839
1840 /* Return a new TINST_LEVEL for DECL at location locus.  */
1841 tree
1842 make_tinst_level (tree decl, location_t locus)
1843 {
1844   tree tinst_level = make_node (TINST_LEVEL);
1845   TREE_CHAIN (tinst_level) = NULL_TREE;
1846   TINST_DECL (tinst_level) = decl;
1847   TINST_LOCATION (tinst_level) = locus;
1848   return tinst_level;
1849 }
1850
1851 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
1852    thing pointed to by the constant.  */
1853
1854 tree
1855 make_ptrmem_cst (tree type, tree member)
1856 {
1857   tree ptrmem_cst = make_node (PTRMEM_CST);
1858   TREE_TYPE (ptrmem_cst) = type;
1859   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
1860   return ptrmem_cst;
1861 }
1862
1863 /* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
1864    return an existing type of an appropriate type already exists.  */
1865
1866 tree
1867 cp_build_type_attribute_variant (tree type, tree attributes)
1868 {
1869   tree new_type;
1870
1871   new_type = build_type_attribute_variant (type, attributes);
1872   if (TREE_CODE (new_type) == FUNCTION_TYPE
1873       && (TYPE_RAISES_EXCEPTIONS (new_type)
1874           != TYPE_RAISES_EXCEPTIONS (type)))
1875     new_type = build_exception_variant (new_type,
1876                                         TYPE_RAISES_EXCEPTIONS (type));
1877   return new_type;
1878 }
1879
1880 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
1881    traversal.  Called from walk_tree.  */
1882
1883 tree
1884 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
1885                   void *data, struct pointer_set_t *pset)
1886 {
1887   enum tree_code code = TREE_CODE (*tp);
1888   location_t save_locus;
1889   tree result;
1890
1891 #define WALK_SUBTREE(NODE)                              \
1892   do                                                    \
1893     {                                                   \
1894       result = walk_tree (&(NODE), func, data, pset);   \
1895       if (result) goto out;                             \
1896     }                                                   \
1897   while (0)
1898
1899   /* Set input_location here so we get the right instantiation context
1900      if we call instantiate_decl from inlinable_function_p.  */
1901   save_locus = input_location;
1902   if (EXPR_HAS_LOCATION (*tp))
1903     input_location = EXPR_LOCATION (*tp);
1904
1905   /* Not one of the easy cases.  We must explicitly go through the
1906      children.  */
1907   result = NULL_TREE;
1908   switch (code)
1909     {
1910     case DEFAULT_ARG:
1911     case TEMPLATE_TEMPLATE_PARM:
1912     case BOUND_TEMPLATE_TEMPLATE_PARM:
1913     case UNBOUND_CLASS_TEMPLATE:
1914     case TEMPLATE_PARM_INDEX:
1915     case TEMPLATE_TYPE_PARM:
1916     case TYPENAME_TYPE:
1917     case TYPEOF_TYPE:
1918     case BASELINK:
1919       /* None of these have subtrees other than those already walked
1920          above.  */
1921       *walk_subtrees_p = 0;
1922       break;
1923
1924     case TINST_LEVEL:
1925       WALK_SUBTREE (TINST_DECL (*tp));
1926       *walk_subtrees_p = 0;
1927       break;
1928
1929     case PTRMEM_CST:
1930       WALK_SUBTREE (TREE_TYPE (*tp));
1931       *walk_subtrees_p = 0;
1932       break;
1933
1934     case TREE_LIST:
1935       WALK_SUBTREE (TREE_PURPOSE (*tp));
1936       break;
1937
1938     case OVERLOAD:
1939       WALK_SUBTREE (OVL_FUNCTION (*tp));
1940       WALK_SUBTREE (OVL_CHAIN (*tp));
1941       *walk_subtrees_p = 0;
1942       break;
1943
1944     case RECORD_TYPE:
1945       if (TYPE_PTRMEMFUNC_P (*tp))
1946         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
1947       break;
1948
1949     default:
1950       input_location = save_locus;
1951       return NULL_TREE;
1952     }
1953
1954   /* We didn't find what we were looking for.  */
1955  out:
1956   input_location = save_locus;
1957   return result;
1958
1959 #undef WALK_SUBTREE
1960 }
1961
1962 /* Decide whether there are language-specific reasons to not inline a
1963    function as a tree.  */
1964
1965 int
1966 cp_cannot_inline_tree_fn (tree* fnp)
1967 {
1968   tree fn = *fnp;
1969
1970   /* We can inline a template instantiation only if it's fully
1971      instantiated.  */
1972   if (DECL_TEMPLATE_INFO (fn)
1973       && TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
1974     {
1975       /* Don't instantiate functions that are not going to be
1976          inlined.  */
1977       if (!DECL_INLINE (DECL_TEMPLATE_RESULT
1978                         (template_for_substitution (fn))))
1979         return 1;
1980
1981       fn = *fnp = instantiate_decl (fn, /*defer_ok=*/0, /*undefined_ok=*/0);
1982
1983       if (TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (fn)))
1984         return 1;
1985     }
1986
1987   if (flag_really_no_inline
1988       && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
1989     return 1;
1990
1991   /* Don't auto-inline anything that might not be bound within
1992      this unit of translation.
1993      Exclude comdat functions from this rule.  While they can be bound
1994      to the other unit, they all must be the same.  This is especially
1995      important so templates can inline.  */
1996   if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn)
1997       && !DECL_COMDAT (fn))
1998     {
1999       DECL_UNINLINABLE (fn) = 1;
2000       return 1;
2001     }
2002
2003   if (varargs_function_p (fn))
2004     {
2005       DECL_UNINLINABLE (fn) = 1;
2006       return 1;
2007     }
2008
2009   if (! function_attribute_inlinable_p (fn))
2010     {
2011       DECL_UNINLINABLE (fn) = 1;
2012       return 1;
2013     }
2014
2015   return 0;
2016 }
2017
2018 /* Add any pending functions other than the current function (already
2019    handled by the caller), that thus cannot be inlined, to FNS_P, then
2020    return the latest function added to the array, PREV_FN.  */
2021
2022 tree
2023 cp_add_pending_fn_decls (void* fns_p, tree prev_fn)
2024 {
2025   varray_type *fnsp = (varray_type *)fns_p;
2026   struct saved_scope *s;
2027
2028   for (s = scope_chain; s; s = s->prev)
2029     if (s->function_decl && s->function_decl != prev_fn)
2030       {
2031         VARRAY_PUSH_TREE (*fnsp, s->function_decl);
2032         prev_fn = s->function_decl;
2033       }
2034
2035   return prev_fn;
2036 }
2037
2038 /* Determine whether VAR is a declaration of an automatic variable in
2039    function FN.  */
2040
2041 int
2042 cp_auto_var_in_fn_p (tree var, tree fn)
2043 {
2044   return (DECL_P (var) && DECL_CONTEXT (var) == fn
2045           && nonstatic_local_decl_p (var));
2046 }
2047
2048 /* Initialize tree.c.  */
2049
2050 void
2051 init_tree (void)
2052 {
2053   list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
2054 }
2055
2056 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
2057    is.  Note that sfk_none is zero, so this function can be used as a
2058    predicate to test whether or not DECL is a special function.  */
2059
2060 special_function_kind
2061 special_function_p (tree decl)
2062 {
2063   /* Rather than doing all this stuff with magic names, we should
2064      probably have a field of type `special_function_kind' in
2065      DECL_LANG_SPECIFIC.  */
2066   if (DECL_COPY_CONSTRUCTOR_P (decl))
2067     return sfk_copy_constructor;
2068   if (DECL_CONSTRUCTOR_P (decl))
2069     return sfk_constructor;
2070   if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
2071     return sfk_assignment_operator;
2072   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2073     return sfk_destructor;
2074   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2075     return sfk_complete_destructor;
2076   if (DECL_BASE_DESTRUCTOR_P (decl))
2077     return sfk_base_destructor;
2078   if (DECL_DELETING_DESTRUCTOR_P (decl))
2079     return sfk_deleting_destructor;
2080   if (DECL_CONV_FN_P (decl))
2081     return sfk_conversion;
2082
2083   return sfk_none;
2084 }
2085
2086 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
2087
2088 int
2089 char_type_p (tree type)
2090 {
2091   return (same_type_p (type, char_type_node)
2092           || same_type_p (type, unsigned_char_type_node)
2093           || same_type_p (type, signed_char_type_node)
2094           || same_type_p (type, wchar_type_node));
2095 }
2096
2097 /* Returns the kind of linkage associated with the indicated DECL.  Th
2098    value returned is as specified by the language standard; it is
2099    independent of implementation details regarding template
2100    instantiation, etc.  For example, it is possible that a declaration
2101    to which this function assigns external linkage would not show up
2102    as a global symbol when you run `nm' on the resulting object file.  */
2103
2104 linkage_kind
2105 decl_linkage (tree decl)
2106 {
2107   /* This function doesn't attempt to calculate the linkage from first
2108      principles as given in [basic.link].  Instead, it makes use of
2109      the fact that we have already set TREE_PUBLIC appropriately, and
2110      then handles a few special cases.  Ideally, we would calculate
2111      linkage first, and then transform that into a concrete
2112      implementation.  */
2113
2114   /* Things that don't have names have no linkage.  */
2115   if (!DECL_NAME (decl))
2116     return lk_none;
2117
2118   /* Things that are TREE_PUBLIC have external linkage.  */
2119   if (TREE_PUBLIC (decl))
2120     return lk_external;
2121
2122   /* Some things that are not TREE_PUBLIC have external linkage, too.
2123      For example, on targets that don't have weak symbols, we make all
2124      template instantiations have internal linkage (in the object
2125      file), but the symbols should still be treated as having external
2126      linkage from the point of view of the language.  */
2127   if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
2128     return lk_external;
2129
2130   /* Things in local scope do not have linkage, if they don't have
2131      TREE_PUBLIC set.  */
2132   if (decl_function_context (decl))
2133     return lk_none;
2134
2135   /* Everything else has internal linkage.  */
2136   return lk_internal;
2137 }
2138 \f
2139 /* EXP is an expression that we want to pre-evaluate.  Returns via INITP an
2140    expression to perform the pre-evaluation, and returns directly an
2141    expression to use the precalculated result.  */
2142
2143 tree
2144 stabilize_expr (tree exp, tree* initp)
2145 {
2146   tree init_expr;
2147
2148   if (!TREE_SIDE_EFFECTS (exp))
2149     {
2150       init_expr = NULL_TREE;
2151     }
2152   else if (!real_lvalue_p (exp)
2153            || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
2154     {
2155       init_expr = get_target_expr (exp);
2156       exp = TARGET_EXPR_SLOT (init_expr);
2157     }
2158   else
2159     {
2160       exp = build_unary_op (ADDR_EXPR, exp, 1);
2161       init_expr = get_target_expr (exp);
2162       exp = TARGET_EXPR_SLOT (init_expr);
2163       exp = build_indirect_ref (exp, 0);
2164     }
2165
2166   *initp = init_expr;
2167   return exp;
2168 }
2169
2170 /* Add NEW, an expression whose value we don't care about, after the
2171    similar expression ORIG.  */
2172
2173 tree
2174 add_stmt_to_compound (tree orig, tree new)
2175 {
2176   if (!new || !TREE_SIDE_EFFECTS (new))
2177     return orig;
2178   if (!orig || !TREE_SIDE_EFFECTS (orig))
2179     return new;
2180   return build2 (COMPOUND_EXPR, void_type_node, orig, new);
2181 }
2182
2183 /* Like stabilize_expr, but for a call whose args we want to
2184    pre-evaluate.  */
2185
2186 void
2187 stabilize_call (tree call, tree *initp)
2188 {
2189   tree inits = NULL_TREE;
2190   tree t;
2191
2192   if (call == error_mark_node)
2193     return;
2194
2195   gcc_assert (TREE_CODE (call) == CALL_EXPR
2196               || TREE_CODE (call) == AGGR_INIT_EXPR);
2197
2198   for (t = TREE_OPERAND (call, 1); t; t = TREE_CHAIN (t))
2199     if (TREE_SIDE_EFFECTS (TREE_VALUE (t)))
2200       {
2201         tree init;
2202         TREE_VALUE (t) = stabilize_expr (TREE_VALUE (t), &init);
2203         inits = add_stmt_to_compound (inits, init);
2204       }
2205
2206   *initp = inits;
2207 }
2208
2209 /* Like stabilize_expr, but for an initialization.  If we are initializing
2210    an object of class type, we don't want to introduce an extra temporary,
2211    so we look past the TARGET_EXPR and stabilize the arguments of the call
2212    instead.  */
2213
2214 bool
2215 stabilize_init (tree init, tree *initp)
2216 {
2217   tree t = init;
2218
2219   if (t == error_mark_node)
2220     return true;
2221
2222   if (TREE_CODE (t) == INIT_EXPR
2223       && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR)
2224     TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
2225   else
2226     {
2227       if (TREE_CODE (t) == INIT_EXPR)
2228         t = TREE_OPERAND (t, 1);
2229       if (TREE_CODE (t) == TARGET_EXPR)
2230         t = TARGET_EXPR_INITIAL (t);
2231       if (TREE_CODE (t) == COMPOUND_EXPR)
2232         t = expr_last (t);
2233       if (TREE_CODE (t) == CONSTRUCTOR
2234           && CONSTRUCTOR_ELTS (t) == NULL_TREE)
2235         {
2236           /* Default-initialization.  */
2237           *initp = NULL_TREE;
2238           return true;
2239         }
2240
2241       /* If the initializer is a COND_EXPR, we can't preevaluate
2242          anything.  */
2243       if (TREE_CODE (t) == COND_EXPR)
2244         return false;
2245
2246       stabilize_call (t, initp);
2247     }
2248
2249   return true;
2250 }
2251
2252 /* Like "fold", but should be used whenever we might be processing the
2253    body of a template.  */
2254
2255 tree
2256 fold_if_not_in_template (tree expr)
2257 {
2258   /* In the body of a template, there is never any need to call
2259      "fold".  We will call fold later when actually instantiating the
2260      template.  Integral constant expressions in templates will be
2261      evaluated via fold_non_dependent_expr, as necessary.  */
2262   return (processing_template_decl ? expr : fold (expr));
2263 }
2264
2265 \f
2266 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
2267 /* Complain that some language-specific thing hanging off a tree
2268    node has been accessed improperly.  */
2269
2270 void
2271 lang_check_failed (const char* file, int line, const char* function)
2272 {
2273   internal_error ("lang_* check: failed in %s, at %s:%d",
2274                   function, trim_filename (file), line);
2275 }
2276 #endif /* ENABLE_TREE_CHECKING */
2277
2278 #include "gt-cp-tree.h"